diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2006-02-08 13:21:16 +0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2006-02-08 13:21:16 +0000 |
commit | 39f50db731bb1924d3c18b153dfe4258208b8812 (patch) | |
tree | b0a4c793d826353580de19e0151cfa6a8096ca3a /src/libexpr/get-drvs.hh | |
parent | 4db4b61380d94c2626b7c4ee2e613b6b6223f803 (diff) |
* Refactoring: move derivation evaluation to libexpr.
Diffstat (limited to 'src/libexpr/get-drvs.hh')
-rw-r--r-- | src/libexpr/get-drvs.hh | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/src/libexpr/get-drvs.hh b/src/libexpr/get-drvs.hh new file mode 100644 index 000000000..bfcff8cca --- /dev/null +++ b/src/libexpr/get-drvs.hh @@ -0,0 +1,64 @@ +#ifndef __GET_DRVS_H +#define __GET_DRVS_H + +#include <string> +#include <map> + +#include "eval.hh" + + +struct DrvInfo +{ +private: + string drvPath; + string outPath; + +public: + string name; + string system; + + ATermMap attrs; + + string queryDrvPath(EvalState & state) const + { + if (drvPath == "") { + Expr a = attrs.get("drvPath"); + (string &) drvPath = a ? evalPath(state, a) : ""; + } + return drvPath; + } + + string queryOutPath(EvalState & state) const + { + if (outPath == "") { + Expr a = attrs.get("outPath"); + if (!a) throw Error("output path missing"); + (string &) outPath = evalPath(state, a); + } + return outPath; + } + + void setDrvPath(const string & s) + { + drvPath = s; + } + + void setOutPath(const string & s) + { + outPath = s; + } +}; + + +typedef list<DrvInfo> DrvInfos; + + +/* Evaluate expression `e'. If it evaluates to a derivation, store + information about the derivation in `drv' and return true. + Otherwise, return false. */ +bool getDerivation(EvalState & state, Expr e, DrvInfo & drv); + +void getDerivations(EvalState & state, Expr e, DrvInfos & drvs); + + +#endif /* !__GET_DRVS_H */ |