added small script fixing the shebang (#!/bin/...) path.

It searches the PATH env variable for the same executable.

svn path=/nixpkgs/trunk/; revision=9667
This commit is contained in:
Marc Weber 2007-11-14 19:07:38 +00:00
parent 076cc3a7d8
commit a89817cba8
3 changed files with 60 additions and 0 deletions

View File

@ -0,0 +1,20 @@
args:
args.stdenv.mkDerivation {
name = "shebangfix-0.0";
buildInputs = [args.perl];
file = ./shebangfix.pl;
phases = "buildPhase";
buildPhase = "
ensureDir \$out/bin
s=\$out/bin/shebangfix
cp \$file \$s
chmod +x \$s
perl \$s \$s
";
meta = { description = "replaces the #!executable with $#!correctpath/executable "; };
}

View File

@ -0,0 +1,35 @@
#!/bin/perl
use warnings;
use strict;
#usage PATH=< : separated path list> perl <this script> file1 file2
print "TODO fix space trouble. This script won't work if your paths contain spaces";
sub findInPath{
my $file = shift(@_);
foreach (split(/:/, $ENV{'PATH'})){
my $f = "$_/$file";
if (-x "$f"){
return $f;
}
}
print "unable to find $file in on of ".$ENV{'PATH'};
exit 1
}
foreach (@ARGV)
{
my $file = $_;
open(FILE, $file);
my $content = do { local $/; <FILE> };
close(FILE);
(my $name = $content) =~ /^#![^ ]*\/([^ \n\r]*)/;
my $fullpath = ($1 eq 'sh') ? "/bin/sh" : findInPath($1);
$content =~ s/^#![^ \n\r]*/#!$fullpath/;
open(FILE, ">$file");
print FILE $content;
close($file);
}

View File

@ -659,6 +659,11 @@ rec {
inherit fetchurl stdenv ncurses;
};
shebangfix = import ../tools/misc/shebangfix {
inherit perl;
stdenv = overrideSetup stdenv ../stdenv/generic/setup-new-2.sh;
};
smartmontools = import ../tools/system/smartmontools {
inherit fetchurl stdenv;
};