Embed output name into the context of the *OutPath attributes and extract it for input derivations
Multiple outputs test passes!
This commit is contained in:
parent
46876ff203
commit
3522730316
1 changed files with 9 additions and 2 deletions
|
@ -348,6 +348,7 @@ static void prim_derivationStrict(EvalState & state, Value * * args, Value & v)
|
||||||
foreach (PathSet::iterator, i, context) {
|
foreach (PathSet::iterator, i, context) {
|
||||||
Path path = *i;
|
Path path = *i;
|
||||||
bool explicitlyPassed = false;
|
bool explicitlyPassed = false;
|
||||||
|
string output = "out";
|
||||||
|
|
||||||
/* Paths marked with `=' denote that the path of a derivation
|
/* Paths marked with `=' denote that the path of a derivation
|
||||||
is explicitly passed to the builder. Since that allows the
|
is explicitly passed to the builder. Since that allows the
|
||||||
|
@ -366,6 +367,12 @@ static void prim_derivationStrict(EvalState & state, Value * * args, Value & v)
|
||||||
}
|
}
|
||||||
|
|
||||||
explicitlyPassed = true;
|
explicitlyPassed = true;
|
||||||
|
} else if (path.at(0) == '!') {
|
||||||
|
size_t index;
|
||||||
|
path = string(path, 1);
|
||||||
|
index = path.find("!");
|
||||||
|
output = path.substr(0, index);
|
||||||
|
path = string(path, index + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* See prim_unsafeDiscardOutputDependency. */
|
/* See prim_unsafeDiscardOutputDependency. */
|
||||||
|
@ -382,7 +389,7 @@ static void prim_derivationStrict(EvalState & state, Value * * args, Value & v)
|
||||||
if (explicitlyPassed)
|
if (explicitlyPassed)
|
||||||
drv.inputDrvs[path] = store -> queryDerivationOutputNames(path);
|
drv.inputDrvs[path] = store -> queryDerivationOutputNames(path);
|
||||||
else
|
else
|
||||||
drv.inputDrvs[path] = singleton<StringSet>("out");
|
drv.inputDrvs[path] = singleton<StringSet>(output);
|
||||||
else
|
else
|
||||||
drv.inputSrcs.insert(path);
|
drv.inputSrcs.insert(path);
|
||||||
}
|
}
|
||||||
|
@ -466,7 +473,7 @@ static void prim_derivationStrict(EvalState & state, Value * * args, Value & v)
|
||||||
/* The output path of an output X is ‘<X>Path’,
|
/* The output path of an output X is ‘<X>Path’,
|
||||||
e.g. ‘outPath’. */
|
e.g. ‘outPath’. */
|
||||||
mkString(*state.allocAttr(v, state.symbols.create(i->first + "Path")),
|
mkString(*state.allocAttr(v, state.symbols.create(i->first + "Path")),
|
||||||
i->second.path, singleton<PathSet>(drvPath));
|
i->second.path, singleton<PathSet>("!" + i->first + "!" + drvPath));
|
||||||
}
|
}
|
||||||
v.attrs->sort();
|
v.attrs->sort();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue