develooper Front page | perl.perl6.internals | Postings from October 2002

miniparrot, a first attempt.

Thread Next
Josh Wilmes
October 31, 2002 19:45
miniparrot, a first attempt.
Message ID:

I've banged together a first attempt at a miniparrot- that is, something 
that can be built on any ANSI C system without anything other than a 

Right now, as a proof of concept, it's building a source tree and a shell 
script which would build miniparrot under gcc.   A real version would 
include platform-specific build scripts which are a tad smarter- but since 
all they have to do now is run a sequence of compile steps, they don't 
need to do much other than figure out what compiler to use and how to call 

Here's a log of how to use it.   The way I would envision this working is 
that we would periodically run this and check the results into CVS, so 
that there was a miniparrot tree available alongside the real one.   We 
could tinderbox it as well.

Note: Until the stack direction issue is sorted out, this isn't really 
going to work across platforms.  

josh@galactic:~/devel/parrot-rw% make miniparrot-update
** tools/dev/ reconfiguring parrot for miniparrot build
- perl --miniparrot
Parrot Version 0.0.8 Configure 2.0
Copyright (C) 2001-2002 Yet Another Society

Hello, I'm Configure.  My job is to poke and prod your system to figure out 
how to build Parrot.  The process is completely automated, unless you passed in
the `--ask' flag on the command line, in which case it'll prompt you for a few
pieces of info.

Since you're running this script, you obviously have Perl 5--I'll be pulling 
some defaults from its configuration.

Checking MANIFEST...done.
Setting up Configure's data structures...done.
Checking for --miniparrot...Yes..done.
Loading platform hints file...(no hints) done.
Enabling debugging...(none requested) done.
Determining what C compiler and linker to use...done.
Determining what types Parrot should use...done.
Determining what opcode files should be compiled in...done.
Setting up experimental systems...done.
Determining what pmc files should be compiled in...done.
Tweaking ccflags...done.
Determining your minimum pointer alignment...done.
Probing for C headers...done.
Determining some sizes...done.
Determining stack growth direction...done.
Computing native byteorder for Parrot's wordsize...done.
Figuring out how to pack() Parrot's types...done.
Figuring out what formats should be used for sprintf...done.
Determining if your C compiler is actually gcc...done.
Determining architecture, OS and JIT capability...done.
Verifying that the compiler supports function pointer casts...done.
Determining if your compiler supports computed goto...done.
Determining what allocator to use ... (gc) done.
Generating config.h...done.
Writing Parrot::Config module...done.
Generating Makefiles...done.
Recording this configuration in myconfig...done.
Moving platform files into place...done.
Generating libparrot.def...done.
Generating core pmc list...done.
Okay, we're done!

You can now use `make' (or your platform's equivalent to `make') to build your
Parrot. After that, you can use `make test' to run the test suite.

Happy Hacking,
        The Parrot Team

** tools/dev/ initiating parrot prebuild
- make miniparrot-prebuild
make[1]: Entering directory `/home/josh/devel/parrot-rw'
perl C core.ops debug.ops io.ops math.ops rx.ops 
perl CPrederef core.ops debug.ops io.ops math.ops rx.ops 
perl core.ops debug.ops io.ops math.ops rx.ops 
perl > fingerprint.c
** tools/dev/ removing files in miniparrot directory

- cd classes; make array.c boolean.c continuation.c coroutine.c csub.c default.c intlist.c intqueue.c key.c multiarray.c perlarray.c perlhash.c perlint.c perlnum.c perlstring.c perlundef.c pointer.c scalar.c sub.c
make[2]: Entering directory `/home/josh/devel/parrot-rw/classes'
perl array.pmc
Scanning /home/josh/devel/parrot-rw/classes/array.pmc...
perl boolean.pmc
Scanning /home/josh/devel/parrot-rw/classes/boolean.pmc...
Scanning /home/josh/devel/parrot-rw/classes/perlint.pmc...
Scanning /home/josh/devel/parrot-rw/classes/scalar.pmc...
perl continuation.pmc
Scanning /home/josh/devel/parrot-rw/classes/continuation.pmc...
perl coroutine.pmc
Scanning /home/josh/devel/parrot-rw/classes/coroutine.pmc...
perl csub.pmc
Scanning /home/josh/devel/parrot-rw/classes/csub.pmc...
perl default.pmc
perl intlist.pmc
Scanning /home/josh/devel/parrot-rw/classes/intlist.pmc...
perl intqueue.pmc
Scanning /home/josh/devel/parrot-rw/classes/intqueue.pmc...
perl key.pmc
Scanning /home/josh/devel/parrot-rw/classes/key.pmc...
perl multiarray.pmc
Scanning /home/josh/devel/parrot-rw/classes/multiarray.pmc...
Scanning /home/josh/devel/parrot-rw/classes/array.pmc...
perl perlarray.pmc
Scanning /home/josh/devel/parrot-rw/classes/perlarray.pmc...
Scanning /home/josh/devel/parrot-rw/classes/array.pmc...
perl perlhash.pmc
Scanning /home/josh/devel/parrot-rw/classes/perlhash.pmc...
perl perlint.pmc
Scanning /home/josh/devel/parrot-rw/classes/perlint.pmc...
Scanning /home/josh/devel/parrot-rw/classes/scalar.pmc...
perl perlnum.pmc
Scanning /home/josh/devel/parrot-rw/classes/perlnum.pmc...
Scanning /home/josh/devel/parrot-rw/classes/scalar.pmc...
perl perlstring.pmc
Scanning /home/josh/devel/parrot-rw/classes/perlstring.pmc...
Scanning /home/josh/devel/parrot-rw/classes/scalar.pmc...
perl perlundef.pmc
Scanning /home/josh/devel/parrot-rw/classes/perlundef.pmc...
Scanning /home/josh/devel/parrot-rw/classes/perlint.pmc...
Scanning /home/josh/devel/parrot-rw/classes/scalar.pmc...
perl pointer.pmc
Scanning /home/josh/devel/parrot-rw/classes/pointer.pmc...
perl scalar.pmc
Scanning /home/josh/devel/parrot-rw/classes/scalar.pmc...
perl sub.pmc
Scanning /home/josh/devel/parrot-rw/classes/sub.pmc...
make[2]: Leaving directory `/home/josh/devel/parrot-rw/classes'

** tools/dev/ copying source files to miniparrot directory
- copy include/parrot/config.h => miniparrot/include/parrot/config.h
- copy include/parrot/platform.h => miniparrot/include/parrot/platform.h
- copy include/parrot/has_header.h => miniparrot/include/parrot/has_header.h
- copy lib/Parrot/ => miniparrot/lib/Parrot/
- copy lib/Parrot/ => miniparrot/lib/Parrot/
- copy platform.c => miniparrot/platform.c
- copy include/parrot/core_pmcs.h => miniparrot/include/parrot/core_pmcs.h
- copy core_pmcs.c => miniparrot/core_pmcs.c
- copy include/parrot/vtable.h => miniparrot/include/parrot/vtable.h
- copy include/parrot/oplib/core_ops.h => miniparrot/include/parrot/oplib/core_ops.h
- copy include/parrot/oplib/core_ops_prederef.h => miniparrot/include/parrot/oplib/core_ops_prederef.h
- copy core_ops.c => miniparrot/core_ops.c
- copy core_ops_prederef.c => miniparrot/core_ops_prederef.c
- copy fingerprint.c => miniparrot/fingerprint.c
- copy lib/Parrot/OpLib/ => miniparrot/lib/Parrot/OpLib/
- copy include/parrot/config.h => miniparrot/include/parrot/config.h
- copy include/parrot/exceptions.h => miniparrot/include/parrot/exceptions.h
- copy include/parrot/io.h => miniparrot/include/parrot/io.h
- copy include/parrot/op.h => miniparrot/include/parrot/op.h
- copy include/parrot/register.h => miniparrot/include/parrot/register.h
- copy include/parrot/string.h => miniparrot/include/parrot/string.h
- copy include/parrot/events.h => miniparrot/include/parrot/events.h
- copy include/parrot/interpreter.h => miniparrot/include/parrot/interpreter.h
- copy include/parrot/memory.h => miniparrot/include/parrot/memory.h
- copy include/parrot/parrot.h => miniparrot/include/parrot/parrot.h
- copy include/parrot/stacks.h => miniparrot/include/parrot/stacks.h
- copy include/parrot/packfile.h => miniparrot/include/parrot/packfile.h
- copy include/parrot/global_setup.h => miniparrot/include/parrot/global_setup.h
- copy include/parrot/vtable.h => miniparrot/include/parrot/vtable.h
- copy include/parrot/oplib/core_ops.h => miniparrot/include/parrot/oplib/core_ops.h
- copy include/parrot/oplib/core_ops_prederef.h => miniparrot/include/parrot/oplib/core_ops_prederef.h
- copy include/parrot/runops_cores.h => miniparrot/include/parrot/runops_cores.h
- copy include/parrot/trace.h => miniparrot/include/parrot/trace.h
- copy include/parrot/pmc.h => miniparrot/include/parrot/pmc.h
- copy include/parrot/key.h => miniparrot/include/parrot/key.h
- copy include/parrot/hash.h => miniparrot/include/parrot/hash.h
- copy include/parrot/resources.h => miniparrot/include/parrot/resources.h
- copy include/parrot/core_pmcs.h => miniparrot/include/parrot/core_pmcs.h
- copy include/parrot/platform.h => miniparrot/include/parrot/platform.h
- copy include/parrot/interp_guts.h => miniparrot/include/parrot/interp_guts.h
- copy include/parrot/rx.h => miniparrot/include/parrot/rx.h
- copy include/parrot/rxstacks.h => miniparrot/include/parrot/rxstacks.h
- copy include/parrot/intlist.h => miniparrot/include/parrot/intlist.h
- copy include/parrot/embed.h => miniparrot/include/parrot/embed.h
- copy include/parrot/warnings.h => miniparrot/include/parrot/warnings.h
- copy include/parrot/misc.h => miniparrot/include/parrot/misc.h
- copy include/parrot/pmc.h => miniparrot/include/parrot/pmc.h
- copy include/parrot/key.h => miniparrot/include/parrot/key.h
- copy include/parrot/hash.h => miniparrot/include/parrot/hash.h
- copy include/parrot/smallobject.h => miniparrot/include/parrot/smallobject.h
- copy include/parrot/headers.h => miniparrot/include/parrot/headers.h
- copy include/parrot/dod.h => miniparrot/include/parrot/dod.h
- copy include/parrot/method_util.h => miniparrot/include/parrot/method_util.h
- copy include/parrot/list.h => miniparrot/include/parrot/list.h
- copy include/parrot/datatypes.h => miniparrot/include/parrot/datatypes.h
- copy include/parrot/regfuncs.h => miniparrot/include/parrot/regfuncs.h
- copy include/parrot/string_funcs.h => miniparrot/include/parrot/string_funcs.h
- copy include/parrot/encoding.h => miniparrot/include/parrot/encoding.h
- copy include/parrot/chartype.h => miniparrot/include/parrot/chartype.h
- copy include/parrot/oplib.h => miniparrot/include/parrot/oplib.h
- copy include/parrot/sub.h => miniparrot/include/parrot/sub.h
- copy include/parrot/unicode.h => miniparrot/include/parrot/unicode.h
- copy include/parrot/perltypes.h => miniparrot/include/parrot/perltypes.h

** tools/dev/ copying source files to miniparrot directory
- copy classes/array.h => miniparrot/classes/array.h
- copy classes/boolean.h => miniparrot/classes/boolean.h
- copy classes/continuation.h => miniparrot/classes/continuation.h
- copy classes/coroutine.h => miniparrot/classes/coroutine.h
- copy classes/csub.h => miniparrot/classes/csub.h
- copy classes/default.h => miniparrot/classes/default.h
- copy classes/intlist.h => miniparrot/classes/intlist.h
- copy classes/intqueue.h => miniparrot/classes/intqueue.h
- copy classes/key.h => miniparrot/classes/key.h
- copy classes/multiarray.h => miniparrot/classes/multiarray.h
- copy classes/parrotcoroutine.h => miniparrot/classes/parrotcoroutine.h
- copy classes/parrotpointer.h => miniparrot/classes/parrotpointer.h
- copy classes/parrotsub.h => miniparrot/classes/parrotsub.h
- copy classes/perlarray.h => miniparrot/classes/perlarray.h
- copy classes/perlhash.h => miniparrot/classes/perlhash.h
- copy classes/perlint.h => miniparrot/classes/perlint.h
- copy classes/perlnum.h => miniparrot/classes/perlnum.h
- copy classes/perlstring.h => miniparrot/classes/perlstring.h
- copy classes/perlundef.h => miniparrot/classes/perlundef.h
- copy classes/pointer.h => miniparrot/classes/pointer.h
- copy classes/scalar.h => miniparrot/classes/scalar.h
- copy classes/sub.h => miniparrot/classes/sub.h
- copy test_main.c => miniparrot/test_main.c
- copy include/parrot/debug.h => miniparrot/include/parrot/debug.h

** tools/dev/ copying object source files to miniparrot directory
- copy exceptions.c => miniparrot/exceptions.c
- copy global_setup.c => miniparrot/global_setup.c
- copy interpreter.c => miniparrot/interpreter.c
- copy parrot.c => miniparrot/parrot.c
- copy register.c => miniparrot/register.c
- copy core_ops.c => miniparrot/core_ops.c
- copy core_ops_prederef.c => miniparrot/core_ops_prederef.c
- copy memory.c => miniparrot/memory.c
- copy packfile.c => miniparrot/packfile.c
- copy stacks.c => miniparrot/stacks.c
- copy string.c => miniparrot/string.c
- copy sub.c => miniparrot/sub.c
- copy encoding.c => miniparrot/encoding.c
- copy chartype.c => miniparrot/chartype.c
- copy runops_cores.c => miniparrot/runops_cores.c
- copy trace.c => miniparrot/trace.c
- copy pmc.c => miniparrot/pmc.c
- copy key.c => miniparrot/key.c
- copy hash.c => miniparrot/hash.c
- copy core_pmcs.c => miniparrot/core_pmcs.c
- copy platform.c => miniparrot/platform.c
- copy resources.c => miniparrot/resources.c
- copy rx.c => miniparrot/rx.c
- copy rxstacks.c => miniparrot/rxstacks.c
- copy intlist.c => miniparrot/intlist.c
- copy list.c => miniparrot/list.c
- copy embed.c => miniparrot/embed.c
- copy warnings.c => miniparrot/warnings.c
- copy packout.c => miniparrot/packout.c
- copy byteorder.c => miniparrot/byteorder.c
- copy debug.c => miniparrot/debug.c
- copy smallobject.c => miniparrot/smallobject.c
- copy headers.c => miniparrot/headers.c
- copy dod.c => miniparrot/dod.c
- copy method_util.c => miniparrot/method_util.c
- copy misc.c => miniparrot/misc.c
- copy spf_render.c => miniparrot/spf_render.c
- copy spf_vtable.c => miniparrot/spf_vtable.c
- copy datatypes.c => miniparrot/datatypes.c
- copy fingerprint.c => miniparrot/fingerprint.c
- copy io/io.c => miniparrot/io/io.c
- copy io/io_buf.c => miniparrot/io/io_buf.c
- copy io/io_unix.c => miniparrot/io/io_unix.c
- copy io/io_win32.c => miniparrot/io/io_win32.c
- copy io/io_stdio.c => miniparrot/io/io_stdio.c
- copy classes/array.c => miniparrot/classes/array.c
- copy classes/boolean.c => miniparrot/classes/boolean.c
- copy classes/continuation.c => miniparrot/classes/continuation.c
- copy classes/coroutine.c => miniparrot/classes/coroutine.c
- copy classes/csub.c => miniparrot/classes/csub.c
- copy classes/default.c => miniparrot/classes/default.c
- copy classes/intlist.c => miniparrot/classes/intlist.c
- copy classes/intqueue.c => miniparrot/classes/intqueue.c
- copy classes/key.c => miniparrot/classes/key.c
- copy classes/multiarray.c => miniparrot/classes/multiarray.c
- copy classes/perlarray.c => miniparrot/classes/perlarray.c
- copy classes/perlhash.c => miniparrot/classes/perlhash.c
- copy classes/perlint.c => miniparrot/classes/perlint.c
- copy classes/perlnum.c => miniparrot/classes/perlnum.c
- copy classes/perlstring.c => miniparrot/classes/perlstring.c
- copy classes/perlundef.c => miniparrot/classes/perlundef.c
- copy classes/pointer.c => miniparrot/classes/pointer.c
- copy classes/scalar.c => miniparrot/classes/scalar.c
- copy classes/sub.c => miniparrot/classes/sub.c
- copy encodings/singlebyte.c => miniparrot/encodings/singlebyte.c
- copy encodings/utf8.c => miniparrot/encodings/utf8.c
- copy encodings/utf16.c => miniparrot/encodings/utf16.c
- copy encodings/utf32.c => miniparrot/encodings/utf32.c
- copy chartypes/unicode.c => miniparrot/chartypes/unicode.c
- copy chartypes/usascii.c => miniparrot/chartypes/usascii.c

** tools/dev/ writing parrot build scripts

make[1]: Leaving directory `/home/josh/devel/parrot-rw'

josh@galactic:~/devel/parrot-rw% cd miniparrot
josh@galactic:~/devel/parrot-rw/miniparrot% sh ./ 
+ gcc -DMINIPARROT -I./include -c exceptions.c -o exceptions.o
+ gcc -DMINIPARROT -I./include -c global_setup.c -o global_setup.o
+ gcc -DMINIPARROT -I./include -c interpreter.c -o interpreter.o
+ gcc -DMINIPARROT -I./include -c parrot.c -o parrot.o
+ gcc -DMINIPARROT -I./include -c register.c -o register.o
+ gcc -DMINIPARROT -I./include -c core_ops.c -o core_ops.o
+ gcc -DMINIPARROT -I./include -c core_ops_prederef.c -o core_ops_prederef.o
+ gcc -DMINIPARROT -I./include -c memory.c -o memory.o
+ gcc -DMINIPARROT -I./include -c packfile.c -o packfile.o
+ gcc -DMINIPARROT -I./include -c stacks.c -o stacks.o
+ gcc -DMINIPARROT -I./include -c string.c -o string.o
+ gcc -DMINIPARROT -I./include -c sub.c -o sub.o
+ gcc -DMINIPARROT -I./include -c encoding.c -o encoding.o
+ gcc -DMINIPARROT -I./include -c chartype.c -o chartype.o
+ gcc -DMINIPARROT -I./include -c runops_cores.c -o runops_cores.o
+ gcc -DMINIPARROT -I./include -c trace.c -o trace.o
+ gcc -DMINIPARROT -I./include -c pmc.c -o pmc.o
+ gcc -DMINIPARROT -I./include -c key.c -o key.o
+ gcc -DMINIPARROT -I./include -c hash.c -o hash.o
+ gcc -DMINIPARROT -I./include -c core_pmcs.c -o core_pmcs.o
+ gcc -DMINIPARROT -I./include -c platform.c -o platform.o
+ gcc -DMINIPARROT -I./include -c resources.c -o resources.o
+ gcc -DMINIPARROT -I./include -c rx.c -o rx.o
+ gcc -DMINIPARROT -I./include -c rxstacks.c -o rxstacks.o
+ gcc -DMINIPARROT -I./include -c intlist.c -o intlist.o
+ gcc -DMINIPARROT -I./include -c list.c -o list.o
+ gcc -DMINIPARROT -I./include -c embed.c -o embed.o
+ gcc -DMINIPARROT -I./include -c warnings.c -o warnings.o
+ gcc -DMINIPARROT -I./include -c packout.c -o packout.o
+ gcc -DMINIPARROT -I./include -c byteorder.c -o byteorder.o
+ gcc -DMINIPARROT -I./include -c debug.c -o debug.o
+ gcc -DMINIPARROT -I./include -c smallobject.c -o smallobject.o
+ gcc -DMINIPARROT -I./include -c headers.c -o headers.o
+ gcc -DMINIPARROT -I./include -c dod.c -o dod.o
+ gcc -DMINIPARROT -I./include -c method_util.c -o method_util.o
+ gcc -DMINIPARROT -I./include -c misc.c -o misc.o
+ gcc -DMINIPARROT -I./include -c spf_render.c -o spf_render.o
+ gcc -DMINIPARROT -I./include -c spf_vtable.c -o spf_vtable.o
+ gcc -DMINIPARROT -I./include -c datatypes.c -o datatypes.o
+ gcc -DMINIPARROT -I./include -c fingerprint.c -o fingerprint.o
+ gcc -DMINIPARROT -I./include -c io/io.c -o io/io.o
+ gcc -DMINIPARROT -I./include -c io/io_buf.c -o io/io_buf.o
+ gcc -DMINIPARROT -I./include -c io/io_unix.c -o io/io_unix.o
+ gcc -DMINIPARROT -I./include -c io/io_win32.c -o io/io_win32.o
+ gcc -DMINIPARROT -I./include -c io/io_stdio.c -o io/io_stdio.o
+ gcc -DMINIPARROT -I./include -c classes/array.c -o classes/array.o
+ gcc -DMINIPARROT -I./include -c classes/boolean.c -o classes/boolean.o
+ gcc -DMINIPARROT -I./include -c classes/continuation.c -o classes/continuation.o
+ gcc -DMINIPARROT -I./include -c classes/coroutine.c -o classes/coroutine.o
+ gcc -DMINIPARROT -I./include -c classes/csub.c -o classes/csub.o
+ gcc -DMINIPARROT -I./include -c classes/default.c -o classes/default.o
+ gcc -DMINIPARROT -I./include -c classes/intlist.c -o classes/intlist.o
+ gcc -DMINIPARROT -I./include -c classes/intqueue.c -o classes/intqueue.o
+ gcc -DMINIPARROT -I./include -c classes/key.c -o classes/key.o
+ gcc -DMINIPARROT -I./include -c classes/multiarray.c -o classes/multiarray.o
+ gcc -DMINIPARROT -I./include -c classes/perlarray.c -o classes/perlarray.o
+ gcc -DMINIPARROT -I./include -c classes/perlhash.c -o classes/perlhash.o
+ gcc -DMINIPARROT -I./include -c classes/perlint.c -o classes/perlint.o
+ gcc -DMINIPARROT -I./include -c classes/perlnum.c -o classes/perlnum.o
+ gcc -DMINIPARROT -I./include -c classes/perlstring.c -o classes/perlstring.o
+ gcc -DMINIPARROT -I./include -c classes/perlundef.c -o classes/perlundef.o
+ gcc -DMINIPARROT -I./include -c classes/pointer.c -o classes/pointer.o
+ gcc -DMINIPARROT -I./include -c classes/scalar.c -o classes/scalar.o
+ gcc -DMINIPARROT -I./include -c classes/sub.c -o classes/sub.o
+ gcc -DMINIPARROT -I./include -c encodings/singlebyte.c -o encodings/singlebyte.o
+ gcc -DMINIPARROT -I./include -c encodings/utf8.c -o encodings/utf8.o
+ gcc -DMINIPARROT -I./include -c encodings/utf16.c -o encodings/utf16.o
+ gcc -DMINIPARROT -I./include -c encodings/utf32.c -o encodings/utf32.o
+ gcc -DMINIPARROT -I./include -c chartypes/unicode.c -o chartypes/unicode.o
+ gcc -DMINIPARROT -I./include -c chartypes/usascii.c -o chartypes/usascii.o
+ gcc -DMINIPARROT -I./include -c test_main.c -o test_main.o
+ gcc -lm -o parrot exceptions.o global_setup.o interpreter.o parrot.o register.o core_ops.o core_ops_prederef.o memory.o packfile.o stacks.o string.o sub.o encoding.o chartype.o runops_cores.o trace.o pmc.o key.o hash.o core_pmcs.o platform.o resources.o rx.o rxstacks.o intlist.o list.o embed.o warnings.o packout.o byteorder.o debug.o smallobject.o headers.o dod.o method_util.o misc.o spf_render.o spf_vtable.o datatypes.o fingerprint.o io/io.o io/io_buf.o io/io_unix.o io/io_win32.o io/io_stdio.o classes/array.o classes/boolean.o classes/continuation.o classes/coroutine.o classes/csub.o classes/default.o classes/intlist.o classes/intqueue.o classes/key.o classes/multiarray.o classes/perlarray.o classes/perlhash.o classes/perlint.o classes/perlnum.o classes/perlstring.o classes/perlundef.o classes/pointer.o classes/scalar.o classes/sub.o encodings/singlebyte.o encodings/utf8.o encodings/utf16.o encodings/utf32.o chartypes/unicode.o chartypes/usascii.o test_main.o
josh@galactic:~/devel/parrot-rw/miniparrot% ./parrot -v
This is parrot version 0.0.8-devel-miniparrot built for nojit
Copyright (C) 2001-2002 Yet Another Society.  All Rights Reserved.

Parrot may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Parrot source kit.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
the GNU General Public License or the Artistic License for more details.


Thread Next Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at | Group listing | About