diff options
Diffstat (limited to 'src/nix-instantiate.in')
-rwxr-xr-x | src/nix-instantiate.in | 121 |
1 files changed, 0 insertions, 121 deletions
diff --git a/src/nix-instantiate.in b/src/nix-instantiate.in deleted file mode 100755 index 7551e9d24da3..000000000000 --- a/src/nix-instantiate.in +++ /dev/null @@ -1,121 +0,0 @@ -#! /usr/bin/perl -w - -use strict; -use FileHandle; -use File::Spec; -use Digest::MD5; - -my $system = "@host@"; - -my $outdir = File::Spec->rel2abs($ARGV[0]); -my $netdir = File::Spec->rel2abs($ARGV[1]); - -my %donetmpls = (); - -sub fetchFile { - my $loc = shift; - - if ($loc =~ /^([+\w\d\.\/-]+)$/) { - return $1; - } elsif ($loc =~ /^url\((.*)\)$/) { - my $url = $1; - $url =~ /\/([^\/]+)$/ || die "invalid url $url"; - my $fn = "$netdir/$1"; - if (! -f $fn) { - print "fetching $url...\n"; - system "cd $netdir; wget --quiet -N $url"; - if ($? != 0) { - unlink($fn); - die; - } - } - return $fn; - } else { - die "invalid file specified $loc"; - } -} - -sub hashFile { - my $file = shift; - open FILE, "< $file" or die "cannot open $file"; - # !!! error checking - my $hash = Digest::MD5->new->addfile(*FILE)->hexdigest; - close FILE; - return $hash; -} - -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 $tmpfile = "$outdir/$fn-tmp"; - open $IN, "< $descr" or die "cannot open $descr"; - -# Descr([Bind("x", Str("y")), Bind("x", File("1234")), Bind("x", Pkg("1234"))]) -# bindings alphabetisch gesorteerd - - my %bindings; - - while (<$IN>) { - chomp; - s/\s*#.*$//; - next if (/^$/); - - if (/^(\w+)\s*=\s*([^\#\s]*)\s*(\#.*)?$/) { - my ($name, $loc) = ($1, $2); - my $file = fetchFile($loc); - $file = File::Spec->rel2abs($file, $dir); - my $hash = hashFile($file); - $bindings{$name} = "File(\"$hash\")"; - } elsif (/^(\w+)\s*<-\s*([+\w\d\.\/-]+)\s*(\#.*)?$/) { - my $name = $1; - my $file = $2; - $file = File::Spec->rel2abs($file, $dir); - $file = convert($file); - my $hash = hashFile($file); - $bindings{$name} = "Pkg(\"$hash\")"; - } elsif (/^(\w+)\s*:\s*([+\w\d\.\/-]+)\s*(\#.*)?$/) { - my $name = $1; - my $value = $2; - $bindings{$name} = "Str(\"$value\")"; - } else { - die "syntax error: $_"; - } - } - - close $IN; - - $bindings{"system"} = "Str(\"$system\")"; - - open $OUT, "| baffle -wt > $tmpfile" or die "cannot create $tmpfile"; - print $OUT "Descr(["; - my $first = 1; - foreach my $name (sort (keys %bindings)) { - if (!$first) { print $OUT ","; }; - print $OUT "Bind(\"$name\",$bindings{$name})"; - $first = 0; - } - print $OUT "])"; - close $OUT; - - my $hash = hashFile($tmpfile); - - my $outfile = "$outdir/$fn-$hash"; - rename($tmpfile, $outfile) or die "cannot rename $tmpfile to $outfile"; - - $donetmpls{$descr} = $outfile; - return $outfile; -} - -for (my $i = 2; $i < scalar @ARGV; $i++) { - convert(File::Spec->rel2abs($ARGV[$i])); -} |