summary refs log tree commit diff
path: root/nix
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2014-08-01 19:38:21 +0200
committerLudovic Courtès <ludo@gnu.org>2015-05-11 17:16:22 +0200
commit42c6246f674ca2d5ea166d1ae676b7087ea1b0d8 (patch)
tree929070cf092b3894f1a75c452b0c259cde6112b8 /nix
parentb732ffd28ddf50d3150e4f276a0e8488e38eaacb (diff)
downloadguix-42c6246f674ca2d5ea166d1ae676b7087ea1b0d8.tar.gz
Remove ugly hack for detecting build environment setup errors
Diffstat (limited to 'nix')
-rw-r--r--nix/libstore/build.cc23
1 files changed, 10 insertions, 13 deletions
diff --git a/nix/libstore/build.cc b/nix/libstore/build.cc
index 348b3bdb0f..e6f7c56e77 100644
--- a/nix/libstore/build.cc
+++ b/nix/libstore/build.cc
@@ -771,11 +771,6 @@ private:
        outputs to allow hard links between outputs. */
     InodesSeen inodesSeen;
 
-    /* Magic exit code denoting that setting up the child environment
-       failed.  (It's possible that the child actually returns the
-       exit code, but ah well.) */
-    const static int childSetupFailed = 189;
-
 public:
     DerivationGoal(const Path & drvPath, const StringSet & wantedOutputs, Worker & worker, BuildMode buildMode = bmNormal);
     ~DerivationGoal();
@@ -1420,9 +1415,6 @@ void DerivationGoal::buildDone()
                     if (pathExists(chrootRootDir + *i))
                         rename((chrootRootDir + *i).c_str(), i->c_str());
 
-            if (WIFEXITED(status) && WEXITSTATUS(status) == childSetupFailed)
-                throw Error(format("failed to set up the build environment for `%1%'") % drvPath);
-
             if (diskFull)
                 printMsg(lvlError, "note: build failure may have been caused by lack of free disk space");
 
@@ -1956,10 +1948,15 @@ void DerivationGoal::startBuilder()
     worker.childStarted(shared_from_this(), pid,
         singleton<set<int> >(builderOut.readSide), true, true);
 
+    /* Check if setting up the build environment failed. */
+    string msg = readLine(builderOut.readSide);
+    if (!msg.empty()) throw Error(msg);
+
     if (settings.printBuildTrace) {
         printMsg(lvlError, format("@ build-started %1% - %2% %3%")
             % drvPath % drv.platform % logFile);
     }
+
 }
 
 
@@ -1968,8 +1965,6 @@ void DerivationGoal::initChild()
     /* Warning: in the child we should absolutely not make any SQLite
        calls! */
 
-    bool inSetup = true;
-
     try { /* child */
 
         _writeToStderr = 0;
@@ -2164,15 +2159,17 @@ void DerivationGoal::initChild()
 
         restoreSIGPIPE();
 
+        /* Indicate that we managed to set up the build environment. */
+        writeToStderr("\n");
+
         /* Execute the program.  This should not return. */
-        inSetup = false;
         execve(program.c_str(), (char * *) &args[0], (char * *) envArr);
 
         throw SysError(format("executing `%1%'") % drv.builder);
 
     } catch (std::exception & e) {
-        writeToStderr("build error: " + string(e.what()) + "\n");
-        _exit(inSetup ? childSetupFailed : 1);
+        writeToStderr("while setting up the build environment: " + string(e.what()) + "\n");
+        _exit(1);
     }
 
     abort(); /* never reached */