aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libexpr/primops.cc11
-rw-r--r--tests/lang.sh2
-rw-r--r--tests/lang/eval-okay-search-path.nix9
3 files changed, 20 insertions, 2 deletions
diff --git a/src/libexpr/primops.cc b/src/libexpr/primops.cc
index 533ae3768..e492ff683 100644
--- a/src/libexpr/primops.cc
+++ b/src/libexpr/primops.cc
@@ -1352,6 +1352,17 @@ void EvalState::createBaseEnv()
evalFile(path, v);
addConstant("derivation", v);
+ /* Add a value containing the current Nix expression search path. */
+ mkList(v, searchPath.size());
+ int n = 0;
+ for (auto & i : searchPath) {
+ Value * v2 = v.list.elems[n++] = allocValue();
+ mkAttrs(*v2, 2);
+ mkString(*allocAttr(*v2, symbols.create("path")), i.second);
+ mkString(*allocAttr(*v2, symbols.create("prefix")), i.first);
+ }
+ addConstant("nixPath", v);
+
/* Now that we've added all primops, sort the `builtins' set,
because attribute lookups expect it to be sorted. */
baseEnv.values[0]->attrs->sort();
diff --git a/tests/lang.sh b/tests/lang.sh
index bb3b9ca77..7157a68c5 100644
--- a/tests/lang.sh
+++ b/tests/lang.sh
@@ -46,7 +46,7 @@ for i in lang/eval-okay-*.nix; do
if test -e lang/$i.flags; then
flags=$(cat lang/$i.flags)
fi
- if ! NIX_PATH=lang/dir3:lang/dir4_PATH nix-instantiate $flags --eval --strict lang/$i.nix > lang/$i.out; then
+ if ! NIX_PATH=lang/dir3:lang/dir4 nix-instantiate $flags --eval --strict lang/$i.nix > lang/$i.out; then
echo "FAIL: $i should evaluate"
fail=1
elif ! diff lang/$i.out lang/$i.exp; then
diff --git a/tests/lang/eval-okay-search-path.nix b/tests/lang/eval-okay-search-path.nix
index 9b7115023..c9ea768a4 100644
--- a/tests/lang/eval-okay-search-path.nix
+++ b/tests/lang/eval-okay-search-path.nix
@@ -1,3 +1,10 @@
-assert builtins.pathExists <nix/buildenv.nix>;
+with import ./lib.nix;
+with builtins;
+
+assert pathExists <nix/buildenv.nix>;
+
+assert length nixPath == 3;
+assert length (filter (x: x.prefix == "nix") nixPath) == 1;
+assert length (filter (x: baseNameOf x.path == "dir4") nixPath) == 1;
import <a.nix> + import <b.nix> + import <c.nix> + import <dir5/c.nix>