* New primop: builtins.toFile, which writes a string into the store
and returns its path. This can be used to (for instance) write builders inside a Nix expression, e.g., stdenv.mkDerivation { builder = " source $stdenv/setup ... "; ... }
This commit is contained in:
parent
de90fdf908
commit
7974aae81c
|
@ -467,6 +467,9 @@ static Expr primToString(EvalState & state, const ATermVector & args)
|
|||
}
|
||||
|
||||
|
||||
/* Convert the argument (which can be any Nix expression) to an XML
|
||||
representation returned in a string. Not all Nix expressions can
|
||||
be sensibly or completely represented (e.g., functions). */
|
||||
static Expr primToXML(EvalState & state, const ATermVector & args)
|
||||
{
|
||||
ostringstream out;
|
||||
|
@ -475,6 +478,16 @@ static Expr primToXML(EvalState & state, const ATermVector & args)
|
|||
}
|
||||
|
||||
|
||||
/* Store a string in the Nix store as a source file that can be used
|
||||
as an input by derivations. */
|
||||
static Expr primToFile(EvalState & state, const ATermVector & args)
|
||||
{
|
||||
string s = evalString(state, args[0]);
|
||||
Path storePath = addTextToStore("", s, PathSet());
|
||||
return makePath(toATerm(storePath));
|
||||
}
|
||||
|
||||
|
||||
/* Boolean constructors. */
|
||||
static Expr primTrue(EvalState & state, const ATermVector & args)
|
||||
{
|
||||
|
@ -724,6 +737,7 @@ void EvalState::addPrimOps()
|
|||
addPrimOp("dirOf", 1, primDirOf);
|
||||
addPrimOp("toString", 1, primToString);
|
||||
addPrimOp("__toXML", 1, primToXML);
|
||||
addPrimOp("__toFile", 1, primToFile);
|
||||
addPrimOp("isNull", 1, primIsNull);
|
||||
addPrimOp("dependencyClosure", 1, primDependencyClosure);
|
||||
addPrimOp("abort", 1, primAbort);
|
||||
|
|
|
@ -1,7 +1,23 @@
|
|||
derivation {
|
||||
name = "gc-runtime";
|
||||
system = "@system@";
|
||||
builder = "@shell@";
|
||||
args = ["-e" "-x" ./gc-runtime.builder.sh];
|
||||
PATH = "@testPath@";
|
||||
let {
|
||||
|
||||
# Test inline source file definitions.
|
||||
builder = builtins.toFile "
|
||||
mkdir $out
|
||||
|
||||
cat > $out/program <<EOF
|
||||
#! $SHELL
|
||||
sleep 10000
|
||||
EOF
|
||||
|
||||
chmod +x $out/program
|
||||
";
|
||||
|
||||
body = derivation {
|
||||
name = "gc-runtime";
|
||||
system = "@system@";
|
||||
builder = "@shell@";
|
||||
args = ["-e" "-x" builder];
|
||||
PATH = "@testPath@";
|
||||
};
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue