aboutsummaryrefslogtreecommitdiff
path: root/skel/build
diff options
context:
space:
mode:
authorpmichaud <pmichaud@pobox.com>2010-07-28 01:23:44 -0500
committerpmichaud <pmichaud@pobox.com>2010-07-28 01:23:44 -0500
commit2eff06a529aae02f2b6b38835ad38fbf7833597c (patch)
tree79ea7a0fda91bbd73fb658bf320a933a668723b1 /skel/build
parent5d1a7bccc213b2444581345c06f756f1fa538c50 (diff)
Refactor pieces into skel/ .
Diffstat (limited to 'skel/build')
-rw-r--r--skel/build/Makefile.in140
-rw-r--r--skel/build/gen_parrot.pl84
-rw-r--r--skel/build/module-install.pl37
3 files changed, 261 insertions, 0 deletions
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);
+}