about summary refs log tree commit diff
path: root/src/libexpr
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2014-05-26T14·50+0200
committerEelco Dolstra <eelco.dolstra@logicblox.com>2014-05-26T14·52+0200
commit39d72640c2459dc2fa689bfe8b756ee193f7b98a (patch)
tree2d889185bf06c0446d9b3774054f1264fbf443ff /src/libexpr
parenta8edf185a9e1677088c8c30acc9d281c8350bca7 (diff)
Ensure that -I flags get included in nixPath
Also fixes #261.
Diffstat (limited to 'src/libexpr')
-rw-r--r--src/libexpr/common-opts.cc4
-rw-r--r--src/libexpr/common-opts.hh4
-rw-r--r--src/libexpr/eval.cc7
-rw-r--r--src/libexpr/eval.hh3
-rw-r--r--src/libexpr/parser.y2
5 files changed, 9 insertions, 11 deletions
diff --git a/src/libexpr/common-opts.cc b/src/libexpr/common-opts.cc
index 9b3421f6c4..14a75f7b6f 100644
--- a/src/libexpr/common-opts.cc
+++ b/src/libexpr/common-opts.cc
@@ -35,11 +35,11 @@ bool parseOptionArg(const string & arg, Strings::iterator & i,
 
 
 bool parseSearchPathArg(const string & arg, Strings::iterator & i,
-    const Strings::iterator & argsEnd, EvalState & state)
+    const Strings::iterator & argsEnd, Strings & searchPath)
 {
     if (arg != "-I") return false;
     if (i == argsEnd) throw UsageError(format("`%1%' requires an argument") % arg);;
-    state.addToSearchPath(*i++, true);
+    searchPath.push_back(*i++);
     return true;
 }
 
diff --git a/src/libexpr/common-opts.hh b/src/libexpr/common-opts.hh
index e2e3fe7717..759358950f 100644
--- a/src/libexpr/common-opts.hh
+++ b/src/libexpr/common-opts.hh
@@ -8,9 +8,9 @@ namespace nix {
 bool parseOptionArg(const string & arg, Strings::iterator & i,
     const Strings::iterator & argsEnd, EvalState & state,
     Bindings & autoArgs);
-    
+
 bool parseSearchPathArg(const string & arg, Strings::iterator & i,
-    const Strings::iterator & argsEnd, EvalState & state);
+    const Strings::iterator & argsEnd, Strings & searchPath);
 
 Path lookupFileArg(EvalState & state, string s);
 
diff --git a/src/libexpr/eval.cc b/src/libexpr/eval.cc
index 81abe5b618..b6b69c2bdb 100644
--- a/src/libexpr/eval.cc
+++ b/src/libexpr/eval.cc
@@ -153,7 +153,7 @@ static Symbol getName(const AttrName & name, EvalState & state, Env & env)
 }
 
 
-EvalState::EvalState()
+EvalState::EvalState(const Strings & _searchPath)
     : sWith(symbols.create("<with>"))
     , sOutPath(symbols.create("outPath"))
     , sDrvPath(symbols.create("drvPath"))
@@ -219,11 +219,10 @@ EvalState::EvalState()
 #endif
 
     /* Initialise the Nix expression search path. */
-    searchPathInsertionPoint = searchPath.end();
     Strings paths = tokenizeString<Strings>(getEnv("NIX_PATH", ""), ":");
-    foreach (Strings::iterator, i, paths) addToSearchPath(*i);
+    for (auto & i : _searchPath) addToSearchPath(i);
+    for (auto & i : paths) addToSearchPath(i);
     addToSearchPath("nix=" + settings.nixDataDir + "/nix/corepkgs");
-    searchPathInsertionPoint = searchPath.begin();
 
     createBaseEnv();
 }
diff --git a/src/libexpr/eval.hh b/src/libexpr/eval.hh
index ad4c6a4b5f..200ec75e0f 100644
--- a/src/libexpr/eval.hh
+++ b/src/libexpr/eval.hh
@@ -113,11 +113,10 @@ private:
 
     typedef list<std::pair<string, Path> > SearchPath;
     SearchPath searchPath;
-    SearchPath::iterator searchPathInsertionPoint;
 
 public:
 
-    EvalState();
+    EvalState(const Strings & _searchPath);
     ~EvalState();
 
     void addToSearchPath(const string & s, bool warn = false);
diff --git a/src/libexpr/parser.y b/src/libexpr/parser.y
index 06d6d643f6..698e8ce3ff 100644
--- a/src/libexpr/parser.y
+++ b/src/libexpr/parser.y
@@ -629,7 +629,7 @@ void EvalState::addToSearchPath(const string & s, bool warn)
     path = absPath(path);
     if (pathExists(path)) {
         debug(format("adding path `%1%' to the search path") % path);
-        searchPath.insert(searchPathInsertionPoint, std::pair<string, Path>(prefix, path));
+        searchPath.push_back(std::pair<string, Path>(prefix, path));
     } else if (warn)
         printMsg(lvlError, format("warning: Nix search path entry `%1%' does not exist, ignoring") % path);
 }