aboutsummaryrefslogtreecommitdiff
path: root/src/libexpr
diff options
context:
space:
mode:
Diffstat (limited to 'src/libexpr')
-rw-r--r--src/libexpr/eval.cc1
-rw-r--r--src/libexpr/eval.hh2
-rw-r--r--src/libexpr/get-drvs.cc11
-rw-r--r--src/libexpr/get-drvs.hh2
4 files changed, 15 insertions, 1 deletions
diff --git a/src/libexpr/eval.cc b/src/libexpr/eval.cc
index b176bbc82..31aaad548 100644
--- a/src/libexpr/eval.cc
+++ b/src/libexpr/eval.cc
@@ -138,6 +138,7 @@ EvalState::EvalState()
, sName(symbols.create("name"))
, sSystem(symbols.create("system"))
, sOverrides(symbols.create("__overrides"))
+ , sOutputName(symbols.create("outputName"))
, baseEnv(allocEnv(128))
, baseEnvDispl(0)
, staticBaseEnv(false, 0)
diff --git a/src/libexpr/eval.hh b/src/libexpr/eval.hh
index a3c55a388..432a0bad1 100644
--- a/src/libexpr/eval.hh
+++ b/src/libexpr/eval.hh
@@ -93,7 +93,7 @@ public:
SymbolTable symbols;
const Symbol sWith, sOutPath, sDrvPath, sType, sMeta, sName,
- sSystem, sOverrides;
+ sSystem, sOverrides, sOutputName;
/* If set, force copying files to the Nix store even if they
already exist there. */
diff --git a/src/libexpr/get-drvs.cc b/src/libexpr/get-drvs.cc
index f9e7dc6db..2ee55bdca 100644
--- a/src/libexpr/get-drvs.cc
+++ b/src/libexpr/get-drvs.cc
@@ -28,6 +28,17 @@ string DrvInfo::queryOutPath(EvalState & state) const
}
+string DrvInfo::queryOutputName(EvalState & state) const
+{
+ if (outputName == "" && attrs) {
+ Bindings::iterator i = attrs->find(state.sOutputName);
+ PathSet context;
+ (string &) outputName = i != attrs->end() ? state.coerceToString(*i->value, context) : "";
+ }
+ return outputName;
+}
+
+
MetaInfo DrvInfo::queryMetaInfo(EvalState & state) const
{
if (metaInfoRead) return meta;
diff --git a/src/libexpr/get-drvs.hh b/src/libexpr/get-drvs.hh
index 8159417a0..f84636a1a 100644
--- a/src/libexpr/get-drvs.hh
+++ b/src/libexpr/get-drvs.hh
@@ -28,6 +28,7 @@ struct DrvInfo
private:
string drvPath;
string outPath;
+ string outputName;
bool metaInfoRead;
MetaInfo meta;
@@ -46,6 +47,7 @@ public:
string queryDrvPath(EvalState & state) const;
string queryOutPath(EvalState & state) const;
+ string queryOutputName(EvalState & state) const;
MetaInfo queryMetaInfo(EvalState & state) const;
MetaValue queryMetaInfo(EvalState & state, const string & name) const;