From a5619f1dffbf3600dd16b51e84ae3c999edc439c Mon Sep 17 00:00:00 2001
From: Eelco Dolstra <e.dolstra@tudelft.nl>
Date: Fri, 12 Mar 2004 10:45:08 +0000
Subject: * Set the NIX_STORE and NIX_BUILD_TOP environment variables in  
 builders to point to the store and the temporary build directory,  
 respectively.  Useful for purity checking. * Also set TEMPDIR, TMPDIR, TEMP,
 and TEMP to NIX_BUILD_TOP to make   sure that tools in the builder store
 temporary files in the right   location.

---
 src/libstore/exec.cc      | 14 ++++++++++++--
 src/libstore/exec.hh      |  2 +-
 src/libstore/normalise.cc |  6 ++++++
 3 files changed, 19 insertions(+), 3 deletions(-)

(limited to 'src')

diff --git a/src/libstore/exec.cc b/src/libstore/exec.cc
index 01577143dc..31a2bae81a 100644
--- a/src/libstore/exec.cc
+++ b/src/libstore/exec.cc
@@ -17,7 +17,7 @@ static string pathNullDevice = "/dev/null";
 
 /* Run a program. */
 void runProgram(const string & program, 
-    const Strings & args, const Environment & env,
+    const Strings & args, Environment env,
     const string & logFileName)
 {
     /* Create a log file. */
@@ -32,10 +32,20 @@ void runProgram(const string & program,
 
     /* Create a temporary directory where the build will take
        place. */
-    string tmpDir = createTempDir();
+    Path tmpDir = createTempDir();
 
     AutoDelete delTmpDir(tmpDir);
 
+    /* For convenience, set an environment pointing to the top build
+       directory. */
+    env["NIX_BUILD_TOP"] = tmpDir;
+
+    /* Also set TMPDIR and variants to point to this directory. */
+    env["TMPDIR"] = tmpDir;
+    env["TEMPDIR"] = tmpDir;
+    env["TMP"] = tmpDir;
+    env["TEMP"] = tmpDir;
+
     /* Fork a child to build the package. */
     pid_t pid;
     switch (pid = fork()) {
diff --git a/src/libstore/exec.hh b/src/libstore/exec.hh
index fc5bd6ac8d..892815c5c1 100644
--- a/src/libstore/exec.hh
+++ b/src/libstore/exec.hh
@@ -15,7 +15,7 @@ typedef map<string, string> Environment;
 
 /* Run a program. */
 void runProgram(const string & program, 
-    const Strings & args, const Environment & env,
+    const Strings & args, Environment env,
     const string & logFileName);
 
 
diff --git a/src/libstore/normalise.cc b/src/libstore/normalise.cc
index 5c13f04ecb..e287914a10 100644
--- a/src/libstore/normalise.cc
+++ b/src/libstore/normalise.cc
@@ -124,6 +124,12 @@ Path normaliseStoreExpr(const Path & _nePath, PathSet pending)
        non-existing path. */
     env["HOME"] = "/homeless-shelter";
 
+    /* Tell the builder where the Nix store is.  Usually they
+       shouldn't care, but this is useful for purity checking (e.g.,
+       the compiler or linker might only want to accept paths to files
+       in the store or in the build directory). */
+    env["NIX_STORE"] = nixStore;
+
     /* Build the environment. */
     for (StringPairs::iterator i = ne.derivation.env.begin();
          i != ne.derivation.env.end(); i++)
-- 
cgit 1.4.1