daemon: Always try to execute the builder regardless of the platform.
* nix/libstore/build.cc (runChild): Move platform check after 'execve' call. Check specifically for ENOEXEC.
This commit is contained in:
parent
50dc3b8b2f
commit
7bf2a70a4f
@ -1682,15 +1682,6 @@ void DerivationGoal::startBuilder()
|
|||||||
f.exceptions(boost::io::all_error_bits ^ boost::io::too_many_args_bit);
|
f.exceptions(boost::io::all_error_bits ^ boost::io::too_many_args_bit);
|
||||||
startNest(nest, lvlInfo, f % showPaths(missingPaths) % curRound % nrRounds);
|
startNest(nest, lvlInfo, f % showPaths(missingPaths) % curRound % nrRounds);
|
||||||
|
|
||||||
/* Right platform? */
|
|
||||||
if (!canBuildLocally(drv.platform)) {
|
|
||||||
if (settings.printBuildTrace)
|
|
||||||
printMsg(lvlError, format("@ unsupported-platform %1% %2%") % drvPath % drv.platform);
|
|
||||||
throw Error(
|
|
||||||
format("a `%1%' is required to build `%3%', but I am a `%2%'")
|
|
||||||
% drv.platform % settings.thisSystem % drvPath);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Note: built-in builders are *not* running in a chroot environment so
|
/* Note: built-in builders are *not* running in a chroot environment so
|
||||||
that we can easily implement them in Guile without having it as a
|
that we can easily implement them in Guile without having it as a
|
||||||
derivation input (they are running under a separate build user,
|
derivation input (they are running under a separate build user,
|
||||||
@ -2311,6 +2302,20 @@ void DerivationGoal::runChild()
|
|||||||
|
|
||||||
execve(drv.builder.c_str(), stringsToCharPtrs(args).data(), stringsToCharPtrs(envStrs).data());
|
execve(drv.builder.c_str(), stringsToCharPtrs(args).data(), stringsToCharPtrs(envStrs).data());
|
||||||
|
|
||||||
|
int error = errno;
|
||||||
|
|
||||||
|
/* Right platform? Check this after we've tried 'execve' to allow for
|
||||||
|
transparent emulation of different platforms with binfmt_misc
|
||||||
|
handlers that invoke QEMU. */
|
||||||
|
if (error == ENOEXEC && !canBuildLocally(drv.platform)) {
|
||||||
|
if (settings.printBuildTrace)
|
||||||
|
printMsg(lvlError, format("@ unsupported-platform %1% %2%") % drvPath % drv.platform);
|
||||||
|
throw Error(
|
||||||
|
format("a `%1%' is required to build `%3%', but I am a `%2%'")
|
||||||
|
% drv.platform % settings.thisSystem % drvPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
errno = error;
|
||||||
throw SysError(format("executing `%1%'") % drv.builder);
|
throw SysError(format("executing `%1%'") % drv.builder);
|
||||||
|
|
||||||
} catch (std::exception & e) {
|
} catch (std::exception & e) {
|
||||||
|
Loading…
Reference in New Issue
Block a user