Manifests have been superseded by binary caches for years. This also gets rid of nix-pull, nix-generate-patches and bsdiff/bspatch.
		
			
				
	
	
		
			127 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			Text
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			127 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			Text
		
	
	
		
			Executable file
		
	
	
	
	
#! @perl@ -w @perlFlags@
 | 
						||
 | 
						||
use utf8;
 | 
						||
use strict;
 | 
						||
use Nix::Config;
 | 
						||
use Nix::Utils;
 | 
						||
 | 
						||
binmode STDERR, ":encoding(utf8)";
 | 
						||
 | 
						||
 | 
						||
# Parse the command line arguments.
 | 
						||
my @args = @ARGV;
 | 
						||
 | 
						||
my $source;
 | 
						||
my $fromURL = 0;
 | 
						||
my @extraNixEnvArgs = ();
 | 
						||
my $interactive = 1;
 | 
						||
my $op = "--install";
 | 
						||
 | 
						||
while (scalar @args) {
 | 
						||
    my $arg = shift @args;
 | 
						||
    if ($arg eq "--help") {
 | 
						||
        exec "man nix-install-package" or die;
 | 
						||
    }
 | 
						||
    elsif ($arg eq "--url") {
 | 
						||
        $fromURL = 1;
 | 
						||
    }
 | 
						||
    elsif ($arg eq "--profile" || $arg eq "-p") {
 | 
						||
        my $profile = shift @args;
 | 
						||
        die "$0: ‘--profile’ requires an argument\n" if !defined $profile;
 | 
						||
        push @extraNixEnvArgs, "-p", $profile;
 | 
						||
    }
 | 
						||
    elsif ($arg eq "--set") {
 | 
						||
        $op = "--set";
 | 
						||
    }
 | 
						||
    elsif ($arg eq "--non-interactive") {
 | 
						||
        $interactive = 0;
 | 
						||
    }
 | 
						||
    else {
 | 
						||
        $source = $arg;
 | 
						||
    }
 | 
						||
}
 | 
						||
 | 
						||
die "$0: please specify a .nixpkg file or URL\n" unless defined $source;
 | 
						||
 | 
						||
 | 
						||
# Re-execute in a terminal, if necessary, so that if we're executed
 | 
						||
# from a web browser, the user gets to see us.
 | 
						||
if ($interactive && !defined $ENV{"NIX_HAVE_TERMINAL"}) {
 | 
						||
    $ENV{"NIX_HAVE_TERMINAL"} = "1";
 | 
						||
    $ENV{"LD_LIBRARY_PATH"} = "";
 | 
						||
    foreach my $term ("xterm", "konsole", "gnome-terminal", "xterm") {
 | 
						||
        exec($term, "-e", "$Nix::Config::binDir/nix-install-package", @ARGV);
 | 
						||
    }
 | 
						||
    die "cannot execute ‘xterm’";
 | 
						||
}
 | 
						||
 | 
						||
 | 
						||
my $tmpDir = mkTempDir("nix-install-package");
 | 
						||
 | 
						||
 | 
						||
sub barf {
 | 
						||
    my $msg = shift;
 | 
						||
    print "\nInstallation failed: $msg\n";
 | 
						||
    <STDIN> if $interactive;
 | 
						||
    exit 1;
 | 
						||
}
 | 
						||
 | 
						||
 | 
						||
# Download the package description, if necessary.
 | 
						||
my $pkgFile = $source;
 | 
						||
if ($fromURL) {
 | 
						||
    $pkgFile = "$tmpDir/tmp.nixpkg";
 | 
						||
    system("@curl@", "-L", "--silent", $source, "-o", $pkgFile) == 0
 | 
						||
        or barf "curl failed: $?";
 | 
						||
}
 | 
						||
 | 
						||
 | 
						||
# Read and parse the package file.
 | 
						||
open PKGFILE, "<$pkgFile" or barf "cannot open ‘$pkgFile’: $!";
 | 
						||
my $contents = <PKGFILE>;
 | 
						||
close PKGFILE;
 | 
						||
 | 
						||
my $nameRE = "(?: [A-Za-z0-9\+\-\.\_\?\=]+ )"; # see checkStoreName()
 | 
						||
my $systemRE = "(?: [A-Za-z0-9\+\-\_]+ )";
 | 
						||
my $pathRE = "(?: \/ [\/A-Za-z0-9\+\-\.\_\?\=]* )";
 | 
						||
 | 
						||
# Note: $pathRE doesn't check that whether we're looking at a valid
 | 
						||
# store path.  We'll let nix-env do that.
 | 
						||
 | 
						||
$contents =~
 | 
						||
    / ^ \s* (\S+) \s+ (\S+) \s+ ($nameRE) \s+ ($systemRE) \s+ ($pathRE) \s+ ($pathRE) ( \s+ ($Nix::Utils::urlRE) )?  /x
 | 
						||
    or barf "invalid package contents";
 | 
						||
my $version = $1;
 | 
						||
my $manifestURL = $2;
 | 
						||
my $drvName = $3;
 | 
						||
my $system = $4;
 | 
						||
my $drvPath = $5;
 | 
						||
my $outPath = $6;
 | 
						||
my $binaryCacheURL = $8;
 | 
						||
 | 
						||
barf "invalid package version ‘$version’" unless $version eq "NIXPKG1";
 | 
						||
 | 
						||
 | 
						||
if ($interactive) {
 | 
						||
    # Ask confirmation.
 | 
						||
    print "Do you want to install ‘$drvName’ (Y/N)? ";
 | 
						||
    my $reply = <STDIN>;
 | 
						||
    chomp $reply;
 | 
						||
    exit if $reply ne "y" && $reply ne "Y";
 | 
						||
}
 | 
						||
 | 
						||
 | 
						||
die "$0: package does not supply a binary cache\n" unless defined $binaryCacheURL;
 | 
						||
 | 
						||
push @extraNixEnvArgs, "--option", "extra-binary-caches", $binaryCacheURL;
 | 
						||
 | 
						||
 | 
						||
print "\nInstalling package...\n";
 | 
						||
system("$Nix::Config::binDir/nix-env", $op, $outPath, "--force-name", $drvName, @extraNixEnvArgs) == 0
 | 
						||
    or barf "nix-env failed: $?";
 | 
						||
 | 
						||
 | 
						||
if ($interactive) {
 | 
						||
    print "\nInstallation succeeded! Press Enter to continue.\n";
 | 
						||
    <STDIN>;
 | 
						||
}
 |