about summary refs log tree commit diff
path: root/src/libexpr/eval.hh
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2011-08-06T16·05+0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2011-08-06T16·05+0000
commit1ecc97b6bdb27e56d832ca48cdafd3dbb5185a04 (patch)
tree4de27ee42f04bb50766f33a58d830677bd8fa80b /src/libexpr/eval.hh
parent54945a2950174ded83d58336061b4a9990cdbbfd (diff)
* Add a Nix expression search path feature. Paths between angle
  brackets, e.g.

    import <nixpkgs/pkgs/lib>

  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.

Diffstat (limited to 'src/libexpr/eval.hh')
-rw-r--r--src/libexpr/eval.hh8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/libexpr/eval.hh b/src/libexpr/eval.hh
index e900217fa4..1583665bad 100644
--- a/src/libexpr/eval.hh
+++ b/src/libexpr/eval.hh
@@ -213,11 +213,16 @@ private:
 
     std::map<Path, Expr *> 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);