diff options
author | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2014-08-01 19:38:21 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2015-05-11 17:16:22 +0200 |
commit | 42c6246f674ca2d5ea166d1ae676b7087ea1b0d8 (patch) | |
tree | 929070cf092b3894f1a75c452b0c259cde6112b8 | |
parent | b732ffd28ddf50d3150e4f276a0e8488e38eaacb (diff) | |
download | guix-42c6246f674ca2d5ea166d1ae676b7087ea1b0d8.tar.gz |
Remove ugly hack for detecting build environment setup errors
-rw-r--r-- | nix/libstore/build.cc | 23 |
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 */ |