about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2012-01-13T23·35+0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2012-01-13T23·35+0000
commit2a3f4110c54a10ebee67403a699cb8f951fca858 (patch)
tree18ea78ef7fa2733d3dbcb406a1029518913eff33
parent7ae763e16b2a2524f50487ea7422e5412a080004 (diff)
* nix-build: put the temporary derivation symlink in a temporary
  directory rather than the current directory.
* nix-build: --drv-link now implies --add-drv-link.

-rw-r--r--doc/manual/manual.xml10
-rw-r--r--doc/manual/nix-build.xml30
-rwxr-xr-xscripts/nix-build.in37
3 files changed, 25 insertions, 52 deletions
diff --git a/doc/manual/manual.xml b/doc/manual/manual.xml
index 090a92ce6b3e..95f80686008d 100644
--- a/doc/manual/manual.xml
+++ b/doc/manual/manual.xml
@@ -21,17 +21,11 @@
     </author>
 
     <copyright>
-      <year>2004</year>
-      <year>2005</year>
-      <year>2006</year>
-      <year>2007</year>
-      <year>2008</year>
-      <year>2009</year>
-      <year>2010</year>
+      <year>2004-2012</year>
       <holder>Eelco Dolstra</holder>
     </copyright>
 
-    <date>August 2010</date>
+    <date>January 2012</date>
     
   </info>
 
diff --git a/doc/manual/nix-build.xml b/doc/manual/nix-build.xml
index 23c0b23041c6..465635f67125 100644
--- a/doc/manual/nix-build.xml
+++ b/doc/manual/nix-build.xml
@@ -28,8 +28,8 @@
       </group>
       <replaceable>attrPath</replaceable>
     </arg>
-    <arg><option>--add-drv-link</option></arg>
     <arg><option>--drv-link </option><replaceable>drvlink</replaceable></arg>
+    <arg><option>--add-drv-link</option></arg>
     <arg><option>--no-out-link</option></arg>
     <arg>
       <group choice='req'>
@@ -83,24 +83,23 @@ except for <option>--arg</option> and <option>--attr</option> /
 
 <variablelist>
 
-  <varlistentry><term><option>--add-drv-link</option></term>
+  <varlistentry><term><option>--drv-link</option> <replaceable>drvlink</replaceable></term>
   
-    <listitem><para>Add a symlink in the current directory to the
-    store derivation produced by <command>nix-instantiate</command>.
-    The symlink is called <filename>derivation</filename> (which is
-    numbered in the case of multiple derivations).  The derivation is
+    <listitem><para>Add a symlink named
+    <replaceable>drvlink</replaceable> to the store derivation
+    produced by <command>nix-instantiate</command>.  The derivation is
     a root of the garbage collector until the symlink is deleted or
-    renamed.</para></listitem>
-    
+    renamed.  If there are multiple derivations, numbers are suffixed
+    to <replaceable>drvlink</replaceable> to distinguish between
+    them.</para></listitem>
+
   </varlistentry>
 
-  <varlistentry><term><option>--drv-link</option> <replaceable>drvlink</replaceable></term>
+  <varlistentry><term><option>--add-drv-link</option></term>
   
-    <listitem><para>Change the name of the symlink to the derivation
-    created when <option>--add-drv-link</option> is used from
-    <filename>derivation</filename> to
-    <replaceable>drvlink</replaceable>.</para></listitem>
-
+    <listitem><para>Shorthand for <option>--drv-link</option>
+    <filename>./derivation</filename>.</para></listitem>
+    
   </varlistentry>
 
   <varlistentry><term><option>--no-out-link</option></term>
@@ -116,8 +115,7 @@ except for <option>--arg</option> and <option>--attr</option> /
   <option>-o</option> <replaceable>outlink</replaceable></term>
   
     <listitem><para>Change the name of the symlink to the output path
-    created unless <option>--no-out-link</option> is used from
-    <filename>result</filename> to
+    created from <filename>result</filename> to
     <replaceable>outlink</replaceable>.</para></listitem>
 
   </varlistentry>
diff --git a/scripts/nix-build.in b/scripts/nix-build.in
index a4615e4bdb72..5cbcd113966f 100755
--- a/scripts/nix-build.in
+++ b/scripts/nix-build.in
@@ -2,14 +2,9 @@
 
 use strict;
 use Nix::Config;
+use File::Temp qw(tempdir);
 
 
-my $addDrvLink = 0;
-my $addOutLink = 1;
-
-my $outLink;
-my $drvLink;
-
 my $dryRun = 0;
 my $verbose = 0;
 
@@ -18,17 +13,14 @@ my @buildArgs = ();
 my @exprs = ();
 
 
-END {
-    foreach my $fn (glob ".nix-build-tmp-*") {
-        unlink $fn;
-    }
-}
+my $tmpDir = tempdir("nix-build.XXXXXX", CLEANUP => 1, TMPDIR => 1)
+    or die "cannot create a temporary directory";
 
-sub intHandler {
-    exit 1;
-}
+my $outLink = "./result";
+my $drvLink = "$tmpDir/derivation";
 
-$SIG{'INT'} = 'intHandler';
+# Ensure that the $tmpDir is deleted.
+$SIG{'INT'} = sub { exit 1 };
 
 
 for (my $n = 0; $n < scalar @ARGV; $n++) {
@@ -56,11 +48,11 @@ EOF
     }
 
     elsif ($arg eq "--add-drv-link") {
-        $addDrvLink = 1;
+        $drvLink = "./derivation";
     }
 
     elsif ($arg eq "--no-out-link" or $arg eq "--no-link") {
-        $addOutLink = 0;
+        $outLink = "$tmpDir/result";
     }
 
     elsif ($arg eq "--drv-link") {
@@ -139,17 +131,6 @@ EOF
 @exprs = ("./default.nix") if scalar @exprs == 0;
 
 
-if (!defined $drvLink) {
-    $drvLink = "derivation";
-    $drvLink = ".nix-build-tmp-" . $drvLink if !$addDrvLink;
-}
-
-if (!defined $outLink) {
-    $outLink = "result";
-    $outLink = ".nix-build-tmp-" . $outLink if !$addOutLink;
-}
-
-
 foreach my $expr (@exprs) {
 
     # Instantiate.