aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libstore/exec.cc14
-rw-r--r--src/libstore/exec.hh2
-rw-r--r--src/libstore/normalise.cc6
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<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 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++)