packages feed

ajhc-0.8.0.8: utils/build_extlibs.prl

#!/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";
}