From a5619f1dffbf3600dd16b51e84ae3c999edc439c Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Fri, 12 Mar 2004 10:45:08 +0000 Subject: [PATCH] * 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(-) diff --git a/src/libstore/exec.cc b/src/libstore/exec.cc index 01577143d..31a2bae81 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 fc5bd6ac8..892815c5c 100644 --- a/src/libstore/exec.hh +++ b/src/libstore/exec.hh @@ -15,7 +15,7 @@ typedef map 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 5c13f04ec..e287914a1 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++)