From 1ecc97b6bdb27e56d832ca48cdafd3dbb5185a04 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Sat, 6 Aug 2011 16:05:24 +0000 Subject: * Add a Nix expression search path feature. Paths between angle brackets, e.g. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit import are resolved by looking them up relative to the elements listed in the search path. This allows us to get rid of hacks like import "${builtins.getEnv "NIXPKGS_ALL"}/pkgs/lib" The search path can be specified through the ‘-I’ command-line flag and through the colon-separated ‘NIX_PATH’ environment variable, e.g., $ nix-build -I /etc/nixos ... If a file is not found in the search path, an error message is lazily thrown. --- src/libexpr/eval.hh | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'src/libexpr/eval.hh') diff --git a/src/libexpr/eval.hh b/src/libexpr/eval.hh index e900217fa457..1583665bad19 100644 --- a/src/libexpr/eval.hh +++ b/src/libexpr/eval.hh @@ -213,11 +213,16 @@ private: std::map parseTrees; + Paths searchPath; + Paths::iterator searchPathInsertionPoint; + public: EvalState(); ~EvalState(); + void addToSearchPath(const string & s); + /* Parse a Nix expression from the specified file. If `path' refers to a directory, then "/default.nix" is appended. */ Expr * parseExprFromFile(Path path); @@ -229,6 +234,9 @@ public: form. */ void evalFile(const Path & path, Value & v); + /* Look up a file in the search path. */ + Path findFile(const string & path); + /* Evaluate an expression to normal form, storing the result in value `v'. */ void eval(Expr * e, Value & v); -- cgit 1.4.1