aboutsummaryrefslogtreecommitdiff
path: root/src/nix-instantiate
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2003-03-20 22:23:48 +0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2003-03-20 22:23:48 +0000
commitcadc3852e44bc625872ef18f4407bff6797ac5dd (patch)
tree8ec70b7c7250c018af7c91cf628d34325b5107ed /src/nix-instantiate
parentf7a98e081dac20858cda21a6190f8d0222e59728 (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/nix-instantiate')
-rwxr-xr-xsrc/nix-instantiate72
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]));
+}