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/ . --- skel/build/Makefile.in | 140 +++++++++++++++++++++++++++++++++++++++++++ skel/build/gen_parrot.pl | 84 ++++++++++++++++++++++++++ skel/build/module-install.pl | 37 ++++++++++++ 3 files changed, 261 insertions(+) create mode 100644 skel/build/Makefile.in create mode 100644 skel/build/gen_parrot.pl create mode 100644 skel/build/module-install.pl (limited to 'skel/build') 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); +} -- cgit v1.1