From 2eff06a529aae02f2b6b38835ad38fbf7833597c Mon Sep 17 00:00:00 2001 From: pmichaud Date: Wed, 28 Jul 2010 01:23:44 -0500 Subject: Refactor pieces into skel/ . --- Makefile | 27 ++--- build/Configure.pl | 231 --------------------------------------- build/Makefile.in | 136 ----------------------- build/gen_parrot.pl | 84 -------------- build/module-install.pl | 37 ------- docs/announce/2010.07 | 8 -- docs/external-documentation | 25 ----- skel/Configure.pl | 231 +++++++++++++++++++++++++++++++++++++++ skel/build/Makefile.in | 140 ++++++++++++++++++++++++ skel/build/gen_parrot.pl | 84 ++++++++++++++ skel/build/module-install.pl | 37 +++++++ skel/docs/announce/2010.07 | 8 ++ skel/docs/external-documentation | 25 +++++ 13 files changed, 534 insertions(+), 539 deletions(-) delete mode 100644 build/Configure.pl delete mode 100644 build/Makefile.in delete mode 100644 build/gen_parrot.pl delete mode 100644 build/module-install.pl delete mode 100644 docs/announce/2010.07 delete mode 100644 docs/external-documentation create mode 100644 skel/Configure.pl create mode 100644 skel/build/Makefile.in create mode 100644 skel/build/gen_parrot.pl create mode 100644 skel/build/module-install.pl create mode 100644 skel/docs/announce/2010.07 create mode 100644 skel/docs/external-documentation diff --git a/Makefile b/Makefile index 5695840..35f5c82 100644 --- a/Makefile +++ b/Makefile @@ -11,11 +11,6 @@ RAKUDO_DIR = $(DISTDIR)/rakudo BUILD_DIR = $(DISTDIR)/build MODULES_DIR = $(DISTDIR)/modules -BUILD_FILES = \ - build/gen_parrot.pl \ - build/module-install.pl \ - build/Makefile.in \ - MODULES = \ git://github.com/masak/ufo \ git://github.com/masak/proto \ @@ -39,15 +34,20 @@ DISTTARGETS = \ $(PARROT_DIR) \ $(RAKUDO_DIR) \ $(MODULES_DIR) \ - $(BUILD_DIR) \ $(BUILD_DIR)/PARROT_REVISION \ - $(DISTDIR)/Configure.pl \ $(DISTDIR)/MANIFEST \ -$(DISTDIR): version_check $(DISTTARGETS) +dist: version_check $(DISTDIR) $(DISTTARGETS) + +version_check: + @[ -n "$(VERSION)" ] || ( echo "\nTry 'make VERSION=yyyy.mm'\n\n"; exit 1) + +always: + +$(DISTDIR): + cp -a skel $(DISTDIR) $(PARROT_DIR): $(PARROT_TGZ) - mkdir -p $(DISTDIR) tar -C $(DISTDIR) -xvzf $(PARROT_TGZ) $(PARROT).tar.gz: wget http://ftp.parrot.org/releases/supported/$(PARROT_VER)/$(PARROT_TGZ) @@ -56,10 +56,6 @@ $(RAKUDO_DIR): git clone git@github.com:rakudo/rakudo.git $(RAKUDO_DIR) cd $(RAKUDO_DIR); git checkout $(RAKUDO_VER) -$(BUILD_DIR): $(BUILD_FILES) - mkdir -p $(BUILD_DIR) - cp $(BUILD_FILES) $(BUILD_DIR) - $(BUILD_DIR)/PARROT_REVISION: $(RAKUDO_DIR) $(RAKUDO_DIR)/build/PARROT_REVISION cp $(RAKUDO_DIR)/build/PARROT_REVISION $(BUILD_DIR) @@ -77,11 +73,6 @@ $(DISTDIR)/MANIFEST: echo "$(PARROT)/.gitignore" >>$(DISTDIR)/MANIFEST echo "$(PARROT)/tools/dev/.gdbinit" >>$(DISTDIR)/MANIFEST -version_check: - @[ -n "$(VERSION)" ] || ( echo "\nTry 'make VERSION=yyyy.mm'\n\n"; exit 1) - -always: - release: $(DISTDIR) perl -ne 'print "$(DISTDIR)/$$_"' $(DISTDIR)/MANIFEST |\ tar -zcv -T - -f $(DISTDIR).tar.gz diff --git a/build/Configure.pl b/build/Configure.pl deleted file mode 100644 index a0e687e..0000000 --- a/build/Configure.pl +++ /dev/null @@ -1,231 +0,0 @@ -#! perl -# Copyright (C) 2009 The Perl Foundation - -use 5.008; -use strict; -use warnings; -use Getopt::Long; -use Cwd; - -MAIN: { - my %options; - GetOptions(\%options, 'help!', 'parrot-config=s', 'makefile-timing!', - 'gen-parrot!', 'prefix=s', 'gen-parrot-option=s@'); - - # Print help if it's requested - if ($options{'help'}) { - print_help(); - exit(0); - } - - # Determine the revision of Parrot we require - open my $REQ, '<', "build/PARROT_REVISION" - or die "cannot open build/PARROT_REVISION: $!\n"; - my ($reqsvn, $reqpar) = split(' ', <$REQ>); - $reqsvn += 0; - close $REQ; - - # Update/generate parrot build if needed - if ($options{'gen-parrot'}) { - my @opts = @{ $options{'gen-parrot-option'} || [] }; - my $prefix = $options{'prefix'} || cwd()."/install"; - # parrot's Configure.pl mishandles win32 backslashes in --prefix - $prefix =~ s{\\}{/}g; - my @command = ($^X, "build/gen_parrot.pl", "--prefix=$prefix", ($^O !~ /win32/i ? "--optimize" : ()), @opts); - - print "Generating Parrot ...\n"; - print "@command\n\n"; - system @command; - } - - # Get a list of parrot-configs to invoke. - my @parrot_config_exe = qw( - install/bin/parrot_config - parrot_config - ); - if (exists $options{'prefix'}) { - unshift @parrot_config_exe, - $options{'prefix'} . '/bin/parrot_config'; - } - - if ($options{'parrot-config'} && $options{'parrot-config'} ne '1') { - @parrot_config_exe = ($options{'parrot-config'}); - } - - # Get configuration information from parrot_config - my %config = read_parrot_config(@parrot_config_exe); - - my $parrot_errors = ''; - if (!%config) { - $parrot_errors .= "Unable to locate parrot_config\n"; - } - elsif ($reqsvn > $config{'revision'} && - ($reqpar eq '' || version_int($reqpar) > version_int($config{'VERSION'}))) { - $parrot_errors .= "Parrot revision r$reqsvn required (currently r$config{'revision'})\n"; - } - - if ($parrot_errors) { - die <<"END"; -===SORRY!=== -$parrot_errors -To automatically build the version of Parrot that came with this -distribution ($reqpar), try re-running Configure.pl with the -'--gen-parrot' option. Or, use the '--parrot-config' option to -explicitly specify the location of parrot_config to be used to -build Rakudo Star. - -END - } - - # Verify the Parrot installation is sufficient for building Rakudo - verify_parrot(%config); - - # Create the Makefile using the information we just got - create_makefile($options{'makefile-timing'}, %config); - my $make = $config{'make'}; - - { - no warnings; - print "Cleaning up ...\n"; - if (open my $CLEAN, '-|', "$make clean") { - my @slurp = <$CLEAN>; - close $CLEAN; - } - } - - print <<"END"; - -You can now use '$make' to build Rakudo Perl. -After that, you can use '$make test' to run some local tests, -or '$make spectest' to check out (via svn) a copy of the Perl 6 -official test suite and run its tests. - -END - exit 0; - -} - - -sub read_parrot_config { - my @parrot_config_exe = @_; - my %config = (); - for my $exe (@parrot_config_exe) { - no warnings; - if (open my $PARROT_CONFIG, '-|', "$exe --dump") { - print "\nReading configuration information from $exe ...\n"; - while (<$PARROT_CONFIG>) { - if (/(\w+) => '(.*)'/) { $config{$1} = $2 } - } - close $PARROT_CONFIG or die $!; - last if %config; - } - } - return %config; -} - - -sub verify_parrot { - print "Verifying Parrot installation...\n"; - my %config = @_; - my $EXE = $config{'exe'}; - my $PARROT_BIN_DIR = $config{'bindir'}; - my $PARROT_VERSION = $config{'versiondir'}; - my $PARROT_LIB_DIR = $config{'libdir'}.$PARROT_VERSION; - my $PARROT_SRC_DIR = $config{'srcdir'}.$PARROT_VERSION; - my $PARROT_INCLUDE_DIR = $config{'includedir'}.$PARROT_VERSION; - my $PARROT_TOOLS_DIR = "$PARROT_LIB_DIR/tools"; - my @required_files = ( - "$PARROT_LIB_DIR/library/PGE/Perl6Grammar.pbc", - "$PARROT_LIB_DIR/library/PCT/HLLCompiler.pbc", - "$PARROT_BIN_DIR/ops2c".$EXE, - "$PARROT_TOOLS_DIR/build/pmc2c.pl", - "$PARROT_SRC_DIR", - "$PARROT_SRC_DIR/pmc", - "$PARROT_INCLUDE_DIR", - "$PARROT_INCLUDE_DIR/pmc", - ); - my @missing = map { " $_" } grep { ! -e } @required_files; - if (@missing) { - my $missing = join("\n", @missing); - die <<"END"; - -===SORRY!=== -I'm missing some needed files from the Parrot installation: -$missing -(Perhaps you need to use Parrot's "make install-dev" or -install the "parrot-devel" package for your system?) - -END - } -} - -# Generate a Makefile from a configuration -sub create_makefile { - my ($makefile_timing, %config) = @_; - - my $maketext = slurp( 'build/Makefile.in' ); - - $config{'stagestats'} = $makefile_timing ? '--stagestats' : ''; - $config{'win32_libparrot_copy'} = $^O eq 'MSWin32' ? 'copy $(PARROT_BIN_DIR)\libparrot.dll .' : ''; - $maketext =~ s/@(\w+)@/$config{$1}/g; - if ($^O eq 'MSWin32') { - $maketext =~ s{/}{\\}g; - $maketext =~ s{\\\*}{\\\\*}g; - $maketext =~ s{http:\S+}{ do {my $t = $&; $t =~ s'\\'/'g; $t} }eg; - } - - if ($makefile_timing) { - $maketext =~ s{(?', $outfile) || - die "Unable to write $outfile\n"; - print {$MAKEOUT} $maketext; - close $MAKEOUT or die $!; - - return; -} - -sub slurp { - my $filename = shift; - - open my $fh, '<', $filename or die "Unable to read $filename\n"; - local $/ = undef; - my $maketext = <$fh>; - close $fh or die $!; - - return $maketext; -} - -sub version_int { - sprintf('%d%03d%03d', split(/\./, $_[0])) -} - - -# Print some help text. -sub print_help { - print <<'END'; -Configure.pl - Rakudo Configure - -General Options: - --help Show this text - --gen-parrot Download and build a copy of Parrot to use - --gen-parrot-option='--option=value' - Set parrot config option when using --gen-parrot - --parrot-config=/path/to/parrot_config - Use config information from parrot_config executable -Experimental developer's options: - --makefile-timing Insert 'time' command all over in the Makefile -END - - return; -} - -# Local Variables: -# mode: cperl -# cperl-indent-level: 4 -# fill-column: 100 -# End: -# vim: expandtab shiftwidth=4: diff --git a/build/Makefile.in b/build/Makefile.in deleted file mode 100644 index 9c85fb5..0000000 --- a/build/Makefile.in +++ /dev/null @@ -1,136 +0,0 @@ -# Copyright (C) 2006-2010, The Perl Foundation. -# $Id$ - -PARROT_ARGS = - -# values from parrot_config -PARROT_BIN_DIR = @bindir@ -PARROT_VERSION = @versiondir@ -PARROT_INCLUDE_DIR = @includedir@$(PARROT_VERSION) -PARROT_LIB_DIR = @libdir@$(PARROT_VERSION) -PARROT_SRC_DIR = @srcdir@$(PARROT_VERSION) -HAS_ICU = @has_icu@ - -CC = @cc@ -CFLAGS = @ccflags@ @cc_shared@ @cc_debug@ @ccwarn@ @cc_hasjit@ @gc_flag@ -EXE = @exe@ -LD = @ld@ -LDFLAGS = @ldflags@ @ld_debug@ -LD_LOAD_FLAGS = @ld_load_flags@ -LIBPARROT = @inst_libparrot_ldflags@ -O = @o@ -LOAD_EXT = @load_ext@ -PERL = @perl@ -CP = @cp@ -MV = @mv@ -RM_F = @rm_f@ -MKPATH = $(PERL) -MExtUtils::Command -e mkpath -CHMOD = $(PERL) -MExtUtils::Command -e chmod -POD2MAN = @pod2man@ - -# locations of parrot resources -PARROT = $(PARROT_BIN_DIR)/parrot$(EXE) -NQP_EXE = $(PARROT_BIN_DIR)/parrot-nqp$(EXE) -PBC_TO_EXE = $(PARROT_BIN_DIR)/pbc_to_exe$(EXE) -PARROT_TOOLS_DIR = $(PARROT_LIB_DIR)/tools -PARROT_PERL_LIB = $(PARROT_TOOLS_DIR)/lib -OPS2C = $(PARROT_BIN_DIR)/ops2c$(EXE) -PMC2C = $(PERL) $(PARROT_TOOLS_DIR)/build/pmc2c.pl -PMC2C_INCLUDES = --include src/pmc --include $(PARROT_SRC_DIR) --include $(PARROT_SRC_DIR)/pmc -CINCLUDES = -I$(PARROT_INCLUDE_DIR) -I$(PARROT_INCLUDE_DIR)/pmc -LINKARGS = $(LDFLAGS) $(LD_LOAD_FLAGS) $(LIBPARROT) @libs@ @icu_shared@ - -# rakudo directories -DYNEXT_DIR = dynext -PMC_DIR = src/pmc -OPS_DIR = src/ops -PERL6_LANG_DIR = $(PARROT_LIB_DIR)/languages/perl6 -MANDIR = @mandir@ -DOCDIR = @prefix@/share/doc - -PERL6_EXE = perl6$(EXE) -PERL6_LANG_DIR = $(PARROT_LIB_DIR)/languages/perl6 - -MODULES = \ - modules/zavolaj \ - modules/MiniDBI \ - modules/xml-writer \ - modules/svg \ - modules/svg-plot \ - modules/Math-RungeKutta \ - modules/Math-Model \ - modules/mainline \ - modules/perl6-Config-INI \ - modules/perl6-File-Find \ - modules/perl6-Term-ANSIColor \ - modules/Algorithm-Viterbi \ - -all: rakudo - -rakudo: rakudo/$(PERL6_EXE) -rakudo/$(PERL6_EXE): - cd rakudo && $(PERL) Configure.pl --parrot-config=$(PARROT_BIN_DIR)/parrot_config && $(MAKE) -rakudo-test: rakudo/perl6 - cd rakudo && $(MAKE) test -rakudo-install: rakudo - cd rakudo && $(MAKE) install - $(CP) $(PARROT_BIN_DIR)/$(PERL6_EXE) . - -modules-install: - @echo "Installing 'ufo'" - $(CP) modules/ufo/ufo $(PARROT_BIN_DIR)/ufo - $(CHMOD) 755 $(PARROT_BIN_DIR)/ufo - $(PERL) build/module-install.pl $(PERL6_EXE) $(DESTDIR)$(PERL6_LANG_DIR)/lib $(MODULES) - -install: rakudo-install modules-install - -## cleaning -clean: - $(RM_F) $(CLEANUPS) - -distclean: realclean - -realclean: clean - $(RM_F) Makefile - -testclean: - - -## miscellaneous targets -# a listing of all targets meant to be called by users -help: - @echo "" - @echo "Following targets are available for the user:" - @echo "" - @echo " all: perl6.pbc" - @echo " install: Install stuff." - @echo "" - @echo "Maintenance:" - @echo " perlcritic: Run Perl::Critic on all the Perl 5 code." - @echo "" - @echo "Cleaning:" - @echo " clean: Basic cleaning up." - @echo " distclean: Removes also anything built, in theory." - @echo " realclean: Removes also files generated by 'Configure.pl'." - @echo " testclean: Clean up test results." - @echo "" - @echo "Misc:" - @echo " help: Print this help message." - @echo "" - -config: - $(PERL) Configure.pl - -$(PARROT): - -CRITIC_FILES=Configure.pl t/harness build/ tools/ - -perlcritic: - perlcritic -1 --profile tools/util/perlcritic.conf $(CRITIC_FILES) - -release: MANIFEST - [ -n "$(VERSION)" ] || ( echo "\nTry 'make release VERSION=yyyy.mm'\n\n"; exit 1 ) - [ -d rakudo-star-$(VERSION) ] || ln -s . rakudo-star-$(VERSION) - $(PERL) -ne 'print "rakudo-star-$(VERSION)/$$_"' MANIFEST | \ - tar -zcv -T - -f rakudo-star-$(VERSION).tar.gz - rm rakudo-star-$(VERSION) diff --git a/build/gen_parrot.pl b/build/gen_parrot.pl deleted file mode 100644 index b5faaa2..0000000 --- a/build/gen_parrot.pl +++ /dev/null @@ -1,84 +0,0 @@ -#! perl -# Copyright (C) 2009 The Perl Foundation - -=head1 TITLE - -gen_parrot.pl - script to obtain and build Parrot for Rakudo - -=head2 SYNOPSIS - - perl gen_parrot.pl [--parrot --configure=options] - -=head2 DESCRIPTION - -Maintains an appropriate copy of Parrot in the parrot/ subdirectory. -The revision of Parrot to be used in the build is given by the -build/PARROT_REVISION file. - -=cut - -use strict; -use warnings; -use 5.008; - -# Work out slash character to use. -my $slash = $^O eq 'MSWin32' ? '\\' : '/'; - -## determine what revision of Parrot we require -open my $REQ, "build/PARROT_REVISION" - || die "cannot open build/PARROT_REVISION\n"; -my ($reqsvn, $reqpar) = split(' ', <$REQ>); -$reqsvn += 0; -close $REQ; - -{ - no warnings; - if (open my $REV, '-|', "parrot_install${slash}bin${slash}parrot_config revision") { - my $revision = 0+<$REV>; - close $REV; - if ($revision >= $reqsvn) { print "Parrot r$revision already available (r$reqsvn required)\n"; - exit(0); - } - } -} - -chdir('parrot-2.6.0') || die "Can't chdir to 'parrot-2.6.0': $!"; - - -## If we have a Makefile from a previous build, do a 'make realclean' -if (-f 'Makefile') { - my %config = read_parrot_config(); - my $make = $config{'make'}; - if ($make) { - print "\nPerforming '$make realclean' ...\n"; - system_or_die($make, "realclean"); - } -} - -print "\nConfiguring Parrot ...\n"; -my @config_command = ($^X, 'Configure.pl', @ARGV); -print "@config_command\n"; -system_or_die( @config_command ); - -print "\nBuilding Parrot ...\n"; -my %config = read_parrot_config(); -my $make = $config{'make'} or exit(1); -system_or_die($make, 'install-dev'); - -sub read_parrot_config { - my %config = (); - if (open my $CFG, "config_lib.pir") { - while (<$CFG>) { - if (/P0\["(.*?)"], "(.*?)"/) { $config{$1} = $2 } - } - close $CFG; - } - %config; -} - -sub system_or_die { - my @cmd = @_; - - system( @cmd ) == 0 - or die "Command failed (status $?): @cmd\n"; -} diff --git a/build/module-install.pl b/build/module-install.pl deleted file mode 100644 index cba32df..0000000 --- a/build/module-install.pl +++ /dev/null @@ -1,37 +0,0 @@ -#! perl - -use warnings; -use strict; -use File::Find; -use File::Copy; -use File::Path; -use File::Basename; - -my $perl6 = shift @ARGV; -my $perl6lib = shift @ARGV; - -my @pmfiles; -while (@ARGV) { - my $module = shift @ARGV; - our $mlib = "$module/lib"; - - find({ no_chdir=>1, wanted => \&libcopy }, $mlib); - - sub libcopy { - return unless /\.pm6?/; - my $source = $File::Find::name; - my $target = $source; - $target =~ s/$mlib/$perl6lib/; - print "$source => $target\n"; - mkpath dirname($target); - copy($source, $target) or die "copy failed: $!\n"; - push @pmfiles, $target; - } -} - -foreach my $pm (@pmfiles) { - my $out = $pm; $out =~ s/\.pm6?$/.pir/; - my @cmd = ('./perl6', '--target=pir', "--output=$out", $pm); - print join(' ', @cmd), "\n"; - system(@cmd); -} diff --git a/docs/announce/2010.07 b/docs/announce/2010.07 deleted file mode 100644 index 321cb10..0000000 --- a/docs/announce/2010.07 +++ /dev/null @@ -1,8 +0,0 @@ - Announce: Rakudo Star Distribution Release 1 - -On behalf of the Rakudo development team, I'm pleased to announce the first -"Rakudo Star" release. It is a distribution release containing the Rakudo -Perl 6 compiler, modules and documentation, aiming to be a useable development -environment. - -This is not a Perl 6 production release, or a finalized 6.0 release. diff --git a/docs/external-documentation b/docs/external-documentation deleted file mode 100644 index d591479..0000000 --- a/docs/external-documentation +++ /dev/null @@ -1,25 +0,0 @@ -Here are some useful links to a knowledge source not included in -Rakudo Star, yet helpful and especially useful for beginners. - -* Perl 5 to 6 - http://perlgeek.de/en/article/5-to-6 - -Series of articles by Moritz Lenz giving an excellent introduction -to Perl 6 for Perl 5 programmers, focusing on the changed things -and underlining the caveats. - -* Perl 6 Advent Calendar - http://perl6advent.wordpress.com/ - -Series of articles showing "Something cool about Perl 6 every day". -Advent Calendar shows some nice new features of Perl 6, explains -the new operators and shows many interesting, challenging examples -of their usage. - -* Gabor Szabo's screencasts - http://szabgab.com/perl6.html#screencast - -In his screencasts, Gabor Szabo shows a baby-steps introduction -to Perl 6, showing code examples and executing them to show their -effect on the screen. A great introduction if you'd like to start -from the very beginning and explore Perl 6 piece by piece. diff --git a/skel/Configure.pl b/skel/Configure.pl new file mode 100644 index 0000000..a0e687e --- /dev/null +++ b/skel/Configure.pl @@ -0,0 +1,231 @@ +#! perl +# Copyright (C) 2009 The Perl Foundation + +use 5.008; +use strict; +use warnings; +use Getopt::Long; +use Cwd; + +MAIN: { + my %options; + GetOptions(\%options, 'help!', 'parrot-config=s', 'makefile-timing!', + 'gen-parrot!', 'prefix=s', 'gen-parrot-option=s@'); + + # Print help if it's requested + if ($options{'help'}) { + print_help(); + exit(0); + } + + # Determine the revision of Parrot we require + open my $REQ, '<', "build/PARROT_REVISION" + or die "cannot open build/PARROT_REVISION: $!\n"; + my ($reqsvn, $reqpar) = split(' ', <$REQ>); + $reqsvn += 0; + close $REQ; + + # Update/generate parrot build if needed + if ($options{'gen-parrot'}) { + my @opts = @{ $options{'gen-parrot-option'} || [] }; + my $prefix = $options{'prefix'} || cwd()."/install"; + # parrot's Configure.pl mishandles win32 backslashes in --prefix + $prefix =~ s{\\}{/}g; + my @command = ($^X, "build/gen_parrot.pl", "--prefix=$prefix", ($^O !~ /win32/i ? "--optimize" : ()), @opts); + + print "Generating Parrot ...\n"; + print "@command\n\n"; + system @command; + } + + # Get a list of parrot-configs to invoke. + my @parrot_config_exe = qw( + install/bin/parrot_config + parrot_config + ); + if (exists $options{'prefix'}) { + unshift @parrot_config_exe, + $options{'prefix'} . '/bin/parrot_config'; + } + + if ($options{'parrot-config'} && $options{'parrot-config'} ne '1') { + @parrot_config_exe = ($options{'parrot-config'}); + } + + # Get configuration information from parrot_config + my %config = read_parrot_config(@parrot_config_exe); + + my $parrot_errors = ''; + if (!%config) { + $parrot_errors .= "Unable to locate parrot_config\n"; + } + elsif ($reqsvn > $config{'revision'} && + ($reqpar eq '' || version_int($reqpar) > version_int($config{'VERSION'}))) { + $parrot_errors .= "Parrot revision r$reqsvn required (currently r$config{'revision'})\n"; + } + + if ($parrot_errors) { + die <<"END"; +===SORRY!=== +$parrot_errors +To automatically build the version of Parrot that came with this +distribution ($reqpar), try re-running Configure.pl with the +'--gen-parrot' option. Or, use the '--parrot-config' option to +explicitly specify the location of parrot_config to be used to +build Rakudo Star. + +END + } + + # Verify the Parrot installation is sufficient for building Rakudo + verify_parrot(%config); + + # Create the Makefile using the information we just got + create_makefile($options{'makefile-timing'}, %config); + my $make = $config{'make'}; + + { + no warnings; + print "Cleaning up ...\n"; + if (open my $CLEAN, '-|', "$make clean") { + my @slurp = <$CLEAN>; + close $CLEAN; + } + } + + print <<"END"; + +You can now use '$make' to build Rakudo Perl. +After that, you can use '$make test' to run some local tests, +or '$make spectest' to check out (via svn) a copy of the Perl 6 +official test suite and run its tests. + +END + exit 0; + +} + + +sub read_parrot_config { + my @parrot_config_exe = @_; + my %config = (); + for my $exe (@parrot_config_exe) { + no warnings; + if (open my $PARROT_CONFIG, '-|', "$exe --dump") { + print "\nReading configuration information from $exe ...\n"; + while (<$PARROT_CONFIG>) { + if (/(\w+) => '(.*)'/) { $config{$1} = $2 } + } + close $PARROT_CONFIG or die $!; + last if %config; + } + } + return %config; +} + + +sub verify_parrot { + print "Verifying Parrot installation...\n"; + my %config = @_; + my $EXE = $config{'exe'}; + my $PARROT_BIN_DIR = $config{'bindir'}; + my $PARROT_VERSION = $config{'versiondir'}; + my $PARROT_LIB_DIR = $config{'libdir'}.$PARROT_VERSION; + my $PARROT_SRC_DIR = $config{'srcdir'}.$PARROT_VERSION; + my $PARROT_INCLUDE_DIR = $config{'includedir'}.$PARROT_VERSION; + my $PARROT_TOOLS_DIR = "$PARROT_LIB_DIR/tools"; + my @required_files = ( + "$PARROT_LIB_DIR/library/PGE/Perl6Grammar.pbc", + "$PARROT_LIB_DIR/library/PCT/HLLCompiler.pbc", + "$PARROT_BIN_DIR/ops2c".$EXE, + "$PARROT_TOOLS_DIR/build/pmc2c.pl", + "$PARROT_SRC_DIR", + "$PARROT_SRC_DIR/pmc", + "$PARROT_INCLUDE_DIR", + "$PARROT_INCLUDE_DIR/pmc", + ); + my @missing = map { " $_" } grep { ! -e } @required_files; + if (@missing) { + my $missing = join("\n", @missing); + die <<"END"; + +===SORRY!=== +I'm missing some needed files from the Parrot installation: +$missing +(Perhaps you need to use Parrot's "make install-dev" or +install the "parrot-devel" package for your system?) + +END + } +} + +# Generate a Makefile from a configuration +sub create_makefile { + my ($makefile_timing, %config) = @_; + + my $maketext = slurp( 'build/Makefile.in' ); + + $config{'stagestats'} = $makefile_timing ? '--stagestats' : ''; + $config{'win32_libparrot_copy'} = $^O eq 'MSWin32' ? 'copy $(PARROT_BIN_DIR)\libparrot.dll .' : ''; + $maketext =~ s/@(\w+)@/$config{$1}/g; + if ($^O eq 'MSWin32') { + $maketext =~ s{/}{\\}g; + $maketext =~ s{\\\*}{\\\\*}g; + $maketext =~ s{http:\S+}{ do {my $t = $&; $t =~ s'\\'/'g; $t} }eg; + } + + if ($makefile_timing) { + $maketext =~ s{(?', $outfile) || + die "Unable to write $outfile\n"; + print {$MAKEOUT} $maketext; + close $MAKEOUT or die $!; + + return; +} + +sub slurp { + my $filename = shift; + + open my $fh, '<', $filename or die "Unable to read $filename\n"; + local $/ = undef; + my $maketext = <$fh>; + close $fh or die $!; + + return $maketext; +} + +sub version_int { + sprintf('%d%03d%03d', split(/\./, $_[0])) +} + + +# Print some help text. +sub print_help { + print <<'END'; +Configure.pl - Rakudo Configure + +General Options: + --help Show this text + --gen-parrot Download and build a copy of Parrot to use + --gen-parrot-option='--option=value' + Set parrot config option when using --gen-parrot + --parrot-config=/path/to/parrot_config + Use config information from parrot_config executable +Experimental developer's options: + --makefile-timing Insert 'time' command all over in the Makefile +END + + return; +} + +# Local Variables: +# mode: cperl +# cperl-indent-level: 4 +# fill-column: 100 +# End: +# vim: expandtab shiftwidth=4: diff --git a/skel/build/Makefile.in b/skel/build/Makefile.in new file mode 100644 index 0000000..f3666ae --- /dev/null +++ b/skel/build/Makefile.in @@ -0,0 +1,140 @@ +# Copyright (C) 2006-2010, The Perl Foundation. +# $Id$ + +PARROT_ARGS = + +# values from parrot_config +PARROT_BIN_DIR = @bindir@ +PARROT_VERSION = @versiondir@ +PARROT_INCLUDE_DIR = @includedir@$(PARROT_VERSION) +PARROT_LIB_DIR = @libdir@$(PARROT_VERSION) +PARROT_SRC_DIR = @srcdir@$(PARROT_VERSION) +HAS_ICU = @has_icu@ + +CC = @cc@ +CFLAGS = @ccflags@ @cc_shared@ @cc_debug@ @ccwarn@ @cc_hasjit@ @gc_flag@ +EXE = @exe@ +LD = @ld@ +LDFLAGS = @ldflags@ @ld_debug@ +LD_LOAD_FLAGS = @ld_load_flags@ +LIBPARROT = @inst_libparrot_ldflags@ +O = @o@ +LOAD_EXT = @load_ext@ +PERL = @perl@ +CP = @cp@ +MV = @mv@ +RM_F = @rm_f@ +MKPATH = $(PERL) -MExtUtils::Command -e mkpath +CHMOD = $(PERL) -MExtUtils::Command -e chmod +POD2MAN = @pod2man@ + +# locations of parrot resources +PARROT = $(PARROT_BIN_DIR)/parrot$(EXE) +NQP_EXE = $(PARROT_BIN_DIR)/parrot-nqp$(EXE) +PBC_TO_EXE = $(PARROT_BIN_DIR)/pbc_to_exe$(EXE) +PARROT_CONFIG = $(PARROT_BIN_DIR)/parrot_config$(EXE) +PARROT_TOOLS_DIR = $(PARROT_LIB_DIR)/tools +PARROT_PERL_LIB = $(PARROT_TOOLS_DIR)/lib +OPS2C = $(PARROT_BIN_DIR)/ops2c$(EXE) +PMC2C = $(PERL) $(PARROT_TOOLS_DIR)/build/pmc2c.pl +PMC2C_INCLUDES = --include src/pmc --include $(PARROT_SRC_DIR) --include $(PARROT_SRC_DIR)/pmc +CINCLUDES = -I$(PARROT_INCLUDE_DIR) -I$(PARROT_INCLUDE_DIR)/pmc +LINKARGS = $(LDFLAGS) $(LD_LOAD_FLAGS) $(LIBPARROT) @libs@ @icu_shared@ + +# rakudo directories +DYNEXT_DIR = dynext +PMC_DIR = src/pmc +OPS_DIR = src/ops +PERL6_LANG_DIR = $(PARROT_LIB_DIR)/languages/perl6 +MANDIR = @mandir@ +DOCDIR = @prefix@/share/doc + +PERL6_EXE = perl6$(EXE) +PERL6_LANG_DIR = $(PARROT_LIB_DIR)/languages/perl6 + +MODULES = \ + modules/zavolaj \ + modules/MiniDBI \ + modules/xml-writer \ + modules/svg \ + modules/svg-plot \ + modules/Math-RungeKutta \ + modules/Math-Model \ + modules/mainline \ + modules/perl6-Config-INI \ + modules/perl6-File-Find \ + modules/perl6-Term-ANSIColor \ + modules/Algorithm-Viterbi \ + +all: rakudo + +rakudo: rakudo/$(PERL6_EXE) +rakudo/$(PERL6_EXE): + cd rakudo && $(PERL) Configure.pl --parrot-config=$(PARROT_CONFIG) && $(MAKE) +rakudo-test: rakudo/perl6 + cd rakudo && $(MAKE) test +rakudo-install: rakudo + cd rakudo && $(MAKE) install + $(CP) $(PARROT_BIN_DIR)/$(PERL6_EXE) . + $(CHMOD) 755 $(PERL6_EXE) + +modules-install: + @echo "Installing 'ufo'" + $(CP) modules/ufo/ufo $(PARROT_BIN_DIR)/ufo + $(CHMOD) 755 $(PARROT_BIN_DIR)/ufo + $(PERL) build/module-install.pl $(PARROT_BIN_DIR)/$(PERL6_EXE) $(DESTDIR)$(PERL6_LANG_DIR)/lib $(MODULES) + +blizkost: + cd modules/blizkost && $(PERL) Configure.pl --parrot-config=$(PARROT_CONFIG) && $(MAKE) +blizkost-install: blizkost + cd modules/blizkost && $(MAKE) install + +install: rakudo-install modules-install + +## cleaning +clean: + $(RM_F) $(CLEANUPS) + +distclean: realclean + +realclean: clean + $(RM_F) Makefile + +testclean: + + +## miscellaneous targets +# a listing of all targets meant to be called by users +help: + @echo "" + @echo "Following targets are available for the user:" + @echo "" + @echo "Maintenance:" + @echo " perlcritic: Run Perl::Critic on all the Perl 5 code." + @echo "" + @echo "Cleaning:" + @echo " clean: Basic cleaning up." + @echo " distclean: Removes also anything built, in theory." + @echo " realclean: Removes also files generated by 'Configure.pl'." + @echo " testclean: Clean up test results." + @echo "" + @echo "Misc:" + @echo " help: Print this help message." + @echo "" + +config: + $(PERL) Configure.pl + +$(PARROT): + +CRITIC_FILES=Configure.pl build/ + +perlcritic: + perlcritic -1 --profile tools/util/perlcritic.conf $(CRITIC_FILES) + +release: MANIFEST + [ -n "$(VERSION)" ] || ( echo "\nTry 'make release VERSION=yyyy.mm'\n\n"; exit 1 ) + [ -d rakudo-star-$(VERSION) ] || ln -s . rakudo-star-$(VERSION) + $(PERL) -ne 'print "rakudo-star-$(VERSION)/$$_"' MANIFEST | \ + tar -zcv -T - -f rakudo-star-$(VERSION).tar.gz + rm rakudo-star-$(VERSION) diff --git a/skel/build/gen_parrot.pl b/skel/build/gen_parrot.pl new file mode 100644 index 0000000..b5faaa2 --- /dev/null +++ b/skel/build/gen_parrot.pl @@ -0,0 +1,84 @@ +#! perl +# Copyright (C) 2009 The Perl Foundation + +=head1 TITLE + +gen_parrot.pl - script to obtain and build Parrot for Rakudo + +=head2 SYNOPSIS + + perl gen_parrot.pl [--parrot --configure=options] + +=head2 DESCRIPTION + +Maintains an appropriate copy of Parrot in the parrot/ subdirectory. +The revision of Parrot to be used in the build is given by the +build/PARROT_REVISION file. + +=cut + +use strict; +use warnings; +use 5.008; + +# Work out slash character to use. +my $slash = $^O eq 'MSWin32' ? '\\' : '/'; + +## determine what revision of Parrot we require +open my $REQ, "build/PARROT_REVISION" + || die "cannot open build/PARROT_REVISION\n"; +my ($reqsvn, $reqpar) = split(' ', <$REQ>); +$reqsvn += 0; +close $REQ; + +{ + no warnings; + if (open my $REV, '-|', "parrot_install${slash}bin${slash}parrot_config revision") { + my $revision = 0+<$REV>; + close $REV; + if ($revision >= $reqsvn) { print "Parrot r$revision already available (r$reqsvn required)\n"; + exit(0); + } + } +} + +chdir('parrot-2.6.0') || die "Can't chdir to 'parrot-2.6.0': $!"; + + +## If we have a Makefile from a previous build, do a 'make realclean' +if (-f 'Makefile') { + my %config = read_parrot_config(); + my $make = $config{'make'}; + if ($make) { + print "\nPerforming '$make realclean' ...\n"; + system_or_die($make, "realclean"); + } +} + +print "\nConfiguring Parrot ...\n"; +my @config_command = ($^X, 'Configure.pl', @ARGV); +print "@config_command\n"; +system_or_die( @config_command ); + +print "\nBuilding Parrot ...\n"; +my %config = read_parrot_config(); +my $make = $config{'make'} or exit(1); +system_or_die($make, 'install-dev'); + +sub read_parrot_config { + my %config = (); + if (open my $CFG, "config_lib.pir") { + while (<$CFG>) { + if (/P0\["(.*?)"], "(.*?)"/) { $config{$1} = $2 } + } + close $CFG; + } + %config; +} + +sub system_or_die { + my @cmd = @_; + + system( @cmd ) == 0 + or die "Command failed (status $?): @cmd\n"; +} diff --git a/skel/build/module-install.pl b/skel/build/module-install.pl new file mode 100644 index 0000000..cba32df --- /dev/null +++ b/skel/build/module-install.pl @@ -0,0 +1,37 @@ +#! perl + +use warnings; +use strict; +use File::Find; +use File::Copy; +use File::Path; +use File::Basename; + +my $perl6 = shift @ARGV; +my $perl6lib = shift @ARGV; + +my @pmfiles; +while (@ARGV) { + my $module = shift @ARGV; + our $mlib = "$module/lib"; + + find({ no_chdir=>1, wanted => \&libcopy }, $mlib); + + sub libcopy { + return unless /\.pm6?/; + my $source = $File::Find::name; + my $target = $source; + $target =~ s/$mlib/$perl6lib/; + print "$source => $target\n"; + mkpath dirname($target); + copy($source, $target) or die "copy failed: $!\n"; + push @pmfiles, $target; + } +} + +foreach my $pm (@pmfiles) { + my $out = $pm; $out =~ s/\.pm6?$/.pir/; + my @cmd = ('./perl6', '--target=pir', "--output=$out", $pm); + print join(' ', @cmd), "\n"; + system(@cmd); +} diff --git a/skel/docs/announce/2010.07 b/skel/docs/announce/2010.07 new file mode 100644 index 0000000..321cb10 --- /dev/null +++ b/skel/docs/announce/2010.07 @@ -0,0 +1,8 @@ + Announce: Rakudo Star Distribution Release 1 + +On behalf of the Rakudo development team, I'm pleased to announce the first +"Rakudo Star" release. It is a distribution release containing the Rakudo +Perl 6 compiler, modules and documentation, aiming to be a useable development +environment. + +This is not a Perl 6 production release, or a finalized 6.0 release. diff --git a/skel/docs/external-documentation b/skel/docs/external-documentation new file mode 100644 index 0000000..d591479 --- /dev/null +++ b/skel/docs/external-documentation @@ -0,0 +1,25 @@ +Here are some useful links to a knowledge source not included in +Rakudo Star, yet helpful and especially useful for beginners. + +* Perl 5 to 6 + http://perlgeek.de/en/article/5-to-6 + +Series of articles by Moritz Lenz giving an excellent introduction +to Perl 6 for Perl 5 programmers, focusing on the changed things +and underlining the caveats. + +* Perl 6 Advent Calendar + http://perl6advent.wordpress.com/ + +Series of articles showing "Something cool about Perl 6 every day". +Advent Calendar shows some nice new features of Perl 6, explains +the new operators and shows many interesting, challenging examples +of their usage. + +* Gabor Szabo's screencasts + http://szabgab.com/perl6.html#screencast + +In his screencasts, Gabor Szabo shows a baby-steps introduction +to Perl 6, showing code examples and executing them to show their +effect on the screen. A great introduction if you'd like to start +from the very beginning and explore Perl 6 piece by piece. -- cgit v1.1