mirror of
https://github.com/NixOS/nix
synced 2025-06-25 10:41:16 +02:00
Allow dynamic registration of builtin builders
This commit is contained in:
parent
2676ae7ca6
commit
40bbad3be5
5 changed files with 32 additions and 15 deletions
|
@ -1835,6 +1835,9 @@ void setupSeccomp()
|
|||
}
|
||||
|
||||
|
||||
RegisterBuiltinBuilder::BuiltinBuilders * RegisterBuiltinBuilder::builtinBuilders = nullptr;
|
||||
|
||||
|
||||
void DerivationBuilderImpl::runChild()
|
||||
{
|
||||
/* Warning: in the child we should absolutely not make any SQLite
|
||||
|
@ -2293,12 +2296,14 @@ void DerivationBuilderImpl::runChild()
|
|||
|
||||
if (drv.builder == "builtin:fetchurl")
|
||||
builtinFetchurl(drv, outputs, netrcData, caFileData);
|
||||
else if (drv.builder == "builtin:buildenv")
|
||||
builtinBuildenv(drv, outputs);
|
||||
else if (drv.builder == "builtin:unpack-channel")
|
||||
builtinUnpackChannel(drv, outputs);
|
||||
else
|
||||
throw Error("unsupported builtin builder '%1%'", drv.builder.substr(8));
|
||||
else {
|
||||
std::string builtinName = drv.builder.substr(8);
|
||||
assert(RegisterBuiltinBuilder::builtinBuilders);
|
||||
if (auto builtin = get(*RegisterBuiltinBuilder::builtinBuilders, builtinName))
|
||||
(*builtin)(drv, outputs);
|
||||
else
|
||||
throw Error("unsupported builtin builder '%1%'", builtinName);
|
||||
}
|
||||
_exit(0);
|
||||
} catch (std::exception & e) {
|
||||
writeFull(STDERR_FILENO, e.what() + std::string("\n"));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue