#!/usr/bin/perl use strict; use warnings; use Cwd; use Getopt::Std; our ($opt_l,$opt_d,$opt_c,$opt_j); getopts('ldc:j:') or die "unknown opt"; $opt_c = "./ajhc" unless $opt_c; $opt_j = "./jahm" unless $opt_j; # clean out environment delete $ENV{AJHC_PATH}; delete $ENV{AJHC_OPTS}; delete $ENV{AJHC_CACHE}; delete $ENV{AJHC_LIBRARY_PATH}; my $tmpdir = "tmp/build"; mkdir "tmp"; mkdir "tmp/build"; sub mysystem { print( (join " ", @_), "\n"); system @_ and die "Running Command Failed!"; } foreach my $fn (@ARGV) { next unless $fn =~ /\.(cabal|yaml)$/; my $patch = $fn; $patch =~ s/\.(cabal|yaml)$/.patch/; print "Processing $fn\n" unless $opt_l; open my $fh, "<", $fn or die "$!: $fn"; my ($name,$version,$options); $options = ""; while(<$fh>) { $name = $1 if /^name:\s*(.*?)\s*$/i; $version = $1 if /^version:\s*(.*?)\s*$/i; $options = $1 if /^options:\s*(.*?)\s*$/i; } next unless $name; next unless $version; $options = "$options --stop deps --deps tmp/$name-deps.yaml" if $opt_d; print("$name-$version.hl\n"),next if $opt_l; print "Processing $fn, found $name-$version\n"; my $url = "http://hackage.haskell.org/packages/archive/$name/$version/$name-$version.tar.gz"; # my $url = "http://new-hackage.haskell.org/package/$name-$version/$name-$version.tar.gz"; print "Fetching $url\n"; unless(-e "$tmpdir/$name-$version.tar.gz") { mysystem "$opt_j downloadURI $url $tmpdir/$name-$version.tar.gz"; } mysystem "tar -zxv --directory $tmpdir -f $tmpdir/$name-$version.tar.gz" and die "$!: tar"; my $src = -d "$tmpdir/$name-$version/src" ? "/src" : ""; mysystem "patch -d $tmpdir/$name-$version -p1 < $patch" if -e $patch; mysystem("cp '$fn' '$tmpdir/$name-$version'"); $fn =~ s/.*\///; mysystem("$opt_c $options " . ($ENV{AJHC_TEST} || "") . " --build-hl '$tmpdir/$name-$version/$fn' -L- -L. -i- '-i$tmpdir/$name-$version$src'") and die "$!: ajhc"; }