diff options
author | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2014-08-01T17·38+0200 |
---|---|---|
committer | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2014-08-01T17·38+0200 |
commit | 51485dcda2052d84048b5df5063d1af814a4aff8 (patch) | |
tree | 8d9e2beceb40b25b40e43d23dfa948fc4266d9b5 /src/libstore | |
parent | 4c4b219c07c08c709c94af6f3fe1f25dea0563a0 (diff) |
Remove ugly hack for detecting build environment setup errors
Diffstat (limited to 'src/libstore')
-rw-r--r-- | src/libstore/build.cc | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/src/libstore/build.cc b/src/libstore/build.cc index 03aea8b8e88d..d73504a35cd1 100644 --- a/src/libstore/build.cc +++ b/src/libstore/build.cc @@ -759,11 +759,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(); @@ -1408,9 +1403,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"); @@ -1944,10 +1936,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); } + } @@ -1956,8 +1953,6 @@ void DerivationGoal::initChild() /* Warning: in the child we should absolutely not make any SQLite calls! */ - bool inSetup = true; - try { /* child */ _writeToStderr = 0; @@ -2152,15 +2147,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 */ |