Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

74 lines (54 sloc) 2.135 kb
#!/usr/bin/env perl
use strict;
use warnings;
use File::Spec;
use File::Copy;
my $inst_path = File::Spec->rel2abs(shift(@ARGV) || 'build');
print "Installing to '$inst_path'\n";
if ($inst_path =~ /\s/) {
warn "Path names with whitspace are known to cause trouble\n"
. "You would be on the safer side without them - set with $^X $0 'inst_path'\n";
}
chdir('rakudo') or die "Can't chdir to rakudo: $!";
print "Building parrot and Rakudo...\n";
system($^X, 'Configure.pl', '--gen-parrot', "--gen-parrot-prefix=$inst_path") == 0
or die "Can't run $^x Configure.pl ($?): $!";
my %config = read_parrot_config();
my $make = $config{make};
system($make, 'install') == 0
or die "Can't run 'make install' for Rakudo: ($?): $!";
chdir('..') or die "Can't chdir back to .., something's seriously wrong!\n";
print "Rakudo build was successful. \\o/\n";
my $path_var_sep = $^O =~ /mswin32/i ? ';' : ':';
$ENV{PATH} = join '', "$inst_path/bin", $path_var_sep, $ENV{PATH};
my $res = qx/perl6 -e 'say "sanity";'/;
chomp $res;
if ($res ne 'sanity') {
die "Sanity check for running Rakudo Perl 6 failed. Got '$res', Expected: 'sanity'\n"
. "Aborting.\n";
}
print "Things look good so far, executing a very simple Perl 6 program worked!\n";
copy('ufo/ufo', "$inst_path/bin/") or die "Can't copy ufo/ufo to $inst_path/bin: $!";
print "We now have alien technology that lets us install more modules...\n";
$ENV{PLS_NO_FETCH} = 1;
use Cwd;
my $proto_lib = getcwd() . '/proto/lib';
$ENV{PERL6LIB} = $proto_lib;
chdir 'proto' or die "Can't chdir to 'proto': $!";
# TODO: find a better way to determine which modules to install in this step.
# Likely derive from @modules or so.
for (qw(zavolaj xml-writer svg svg-plot Math-RungeKutta Math-Model)) {
print "Installing $_...\n";
system('perl6', 'proof-of-concept', $_) == 0
or die "Can't run poc $_ ($?): $!";
}
sub read_parrot_config {
my %config = ();
if (open my $CFG, "parrot/config_lib.pir") {
while (<$CFG>) {
if (/P0\["(.*?)"], "(.*?)"/) { $config{$1} = $2 }
}
close $CFG;
}
%config;
}
Jump to Line
Something went wrong with that request. Please try again.