diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2003-03-20 22:23:48 +0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2003-03-20 22:23:48 +0000 |
commit | cadc3852e44bc625872ef18f4407bff6797ac5dd (patch) | |
tree | 8ec70b7c7250c018af7c91cf628d34325b5107ed /src | |
parent | f7a98e081dac20858cda21a6190f8d0222e59728 (diff) |
* nix-instantiate now instantiantes the closure of the set of
descriptor templates under the import relation. I.e., we can now
say:
nix-instantiate outdir foo.nix
which will create descriptors for foo.nix and all imported packages
in outdir/.
Diffstat (limited to 'src')
-rwxr-xr-x | src/nix-instantiate | 72 |
1 files changed, 55 insertions, 17 deletions
diff --git a/src/nix-instantiate b/src/nix-instantiate index 242bcfaf9..4823d2212 100755 --- a/src/nix-instantiate +++ b/src/nix-instantiate @@ -1,23 +1,61 @@ #! /usr/bin/perl -w -my $descr = $ARGV[0]; - -open DESCR, "< $descr"; - -while (<DESCR>) { - chomp; - - if (/^(\w+)\s*=\s*([\w\d\.\/-]+)\s*(\#.*)?$/) { - my $name = $1; - my $file = $2; - my $out = `md5sum $file`; - $out =~ /^([0-9a-f]+)\s/; - my $hash = $1; - print "$name = $hash\n"; - } else { - print "$_\n"; +use strict; +use FileHandle; +use File::Spec; + +my $outdir = $ARGV[0]; + +my %donetmpls = (); + +sub convert { + my $descr = shift; + + if (defined $donetmpls{$descr}) { + return $donetmpls{$descr}; } + my ($x, $dir, $fn) = File::Spec->splitpath($descr); + + print "$descr\n"; + + my $IN = new FileHandle; + my $OUT = new FileHandle; + my $outfile = "$outdir/$fn"; + open $IN, "< $descr" or die "cannot open $descr"; + open $OUT, "> $outfile" or die "cannot create $outfile"; + + while (<$IN>) { + chomp; + + if (/^(\w+)\s*=\s*([+\w\d\.\/-]+)\s*(\#.*)?$/) { + my $name = $1; + my $file = $2; + $file = File::Spec->rel2abs($file, $dir); + my $out = `md5sum $file`; + die unless ($? == 0); + $out =~ /^([0-9a-f]+)\s/; + my $hash = $1; + print $OUT "$name = $hash\n"; + } elsif (/^(\w+)\s*<-\s*([+\w\d\.\/-]+)\s*(\#.*)?$/) { + my $name = $1; + my $file = $2; + $file = File::Spec->rel2abs($file, $dir); + $file = convert($file); + my $out = `md5sum $file`; + die unless ($? == 0); + $out =~ /^([0-9a-f]+)\s/; + my $hash = $1; + print $OUT "$name <- $hash\n"; + } else { + print $OUT "$_\n"; + } + } + + $donetmpls{$descr} = $outfile; + return $outfile; } -close DESCR; +for (my $i = 1; $i < scalar @ARGV; $i++) { + convert(File::Spec->rel2abs($ARGV[$i])); +} |