parent
a8edf185a9
commit
39d72640c2
|
@ -35,11 +35,11 @@ bool parseOptionArg(const string & arg, Strings::iterator & i,
|
||||||
|
|
||||||
|
|
||||||
bool parseSearchPathArg(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 (arg != "-I") return false;
|
||||||
if (i == argsEnd) throw UsageError(format("`%1%' requires an argument") % arg);;
|
if (i == argsEnd) throw UsageError(format("`%1%' requires an argument") % arg);;
|
||||||
state.addToSearchPath(*i++, true);
|
searchPath.push_back(*i++);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,9 +8,9 @@ namespace nix {
|
||||||
bool parseOptionArg(const string & arg, Strings::iterator & i,
|
bool parseOptionArg(const string & arg, Strings::iterator & i,
|
||||||
const Strings::iterator & argsEnd, EvalState & state,
|
const Strings::iterator & argsEnd, EvalState & state,
|
||||||
Bindings & autoArgs);
|
Bindings & autoArgs);
|
||||||
|
|
||||||
bool parseSearchPathArg(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);
|
||||||
|
|
||||||
Path lookupFileArg(EvalState & state, string s);
|
Path lookupFileArg(EvalState & state, string s);
|
||||||
|
|
||||||
|
|
|
@ -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>"))
|
: sWith(symbols.create("<with>"))
|
||||||
, sOutPath(symbols.create("outPath"))
|
, sOutPath(symbols.create("outPath"))
|
||||||
, sDrvPath(symbols.create("drvPath"))
|
, sDrvPath(symbols.create("drvPath"))
|
||||||
|
@ -219,11 +219,10 @@ EvalState::EvalState()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Initialise the Nix expression search path. */
|
/* Initialise the Nix expression search path. */
|
||||||
searchPathInsertionPoint = searchPath.end();
|
|
||||||
Strings paths = tokenizeString<Strings>(getEnv("NIX_PATH", ""), ":");
|
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");
|
addToSearchPath("nix=" + settings.nixDataDir + "/nix/corepkgs");
|
||||||
searchPathInsertionPoint = searchPath.begin();
|
|
||||||
|
|
||||||
createBaseEnv();
|
createBaseEnv();
|
||||||
}
|
}
|
||||||
|
|
|
@ -113,11 +113,10 @@ private:
|
||||||
|
|
||||||
typedef list<std::pair<string, Path> > SearchPath;
|
typedef list<std::pair<string, Path> > SearchPath;
|
||||||
SearchPath searchPath;
|
SearchPath searchPath;
|
||||||
SearchPath::iterator searchPathInsertionPoint;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
EvalState();
|
EvalState(const Strings & _searchPath);
|
||||||
~EvalState();
|
~EvalState();
|
||||||
|
|
||||||
void addToSearchPath(const string & s, bool warn = false);
|
void addToSearchPath(const string & s, bool warn = false);
|
||||||
|
|
|
@ -629,7 +629,7 @@ void EvalState::addToSearchPath(const string & s, bool warn)
|
||||||
path = absPath(path);
|
path = absPath(path);
|
||||||
if (pathExists(path)) {
|
if (pathExists(path)) {
|
||||||
debug(format("adding path `%1%' to the search path") % 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)
|
} else if (warn)
|
||||||
printMsg(lvlError, format("warning: Nix search path entry `%1%' does not exist, ignoring") % path);
|
printMsg(lvlError, format("warning: Nix search path entry `%1%' does not exist, ignoring") % path);
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,6 +58,7 @@ struct Globals
|
||||||
bool removeAll;
|
bool removeAll;
|
||||||
string forceName;
|
string forceName;
|
||||||
bool prebuiltOnly;
|
bool prebuiltOnly;
|
||||||
|
Globals(const Strings & searchPath) : state(searchPath) { }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -1351,7 +1352,17 @@ void run(Strings args)
|
||||||
Strings opFlags, opArgs, remaining;
|
Strings opFlags, opArgs, remaining;
|
||||||
Operation op = 0;
|
Operation op = 0;
|
||||||
|
|
||||||
Globals globals;
|
/* FIXME: hack. */
|
||||||
|
Strings searchPath;
|
||||||
|
Strings args2;
|
||||||
|
for (Strings::iterator i = args.begin(); i != args.end(); ) {
|
||||||
|
string arg = *i++;
|
||||||
|
if (!parseSearchPathArg(arg, i, args.end(), searchPath))
|
||||||
|
args2.push_back(arg);
|
||||||
|
}
|
||||||
|
args = args2;
|
||||||
|
|
||||||
|
Globals globals(searchPath);
|
||||||
|
|
||||||
globals.instSource.type = srcUnknown;
|
globals.instSource.type = srcUnknown;
|
||||||
globals.instSource.nixExprPath = getDefNixExprPath();
|
globals.instSource.nixExprPath = getDefNixExprPath();
|
||||||
|
@ -1372,8 +1383,6 @@ void run(Strings args)
|
||||||
else if (parseOptionArg(arg, i, args.end(),
|
else if (parseOptionArg(arg, i, args.end(),
|
||||||
globals.state, globals.instSource.autoArgs))
|
globals.state, globals.instSource.autoArgs))
|
||||||
;
|
;
|
||||||
else if (parseSearchPathArg(arg, i, args.end(), globals.state))
|
|
||||||
;
|
|
||||||
else if (arg == "--force-name") // undocumented flag for nix-install-package
|
else if (arg == "--force-name") // undocumented flag for nix-install-package
|
||||||
globals.forceName = needArg(i, args, arg);
|
globals.forceName = needArg(i, args, arg);
|
||||||
else if (arg == "--uninstall" || arg == "-e")
|
else if (arg == "--uninstall" || arg == "-e")
|
||||||
|
|
|
@ -91,7 +91,17 @@ void processExpr(EvalState & state, const Strings & attrPaths,
|
||||||
|
|
||||||
void run(Strings args)
|
void run(Strings args)
|
||||||
{
|
{
|
||||||
EvalState state;
|
/* FIXME: hack. */
|
||||||
|
Strings searchPath;
|
||||||
|
Strings args2;
|
||||||
|
for (Strings::iterator i = args.begin(); i != args.end(); ) {
|
||||||
|
string arg = *i++;
|
||||||
|
if (!parseSearchPathArg(arg, i, args.end(), searchPath))
|
||||||
|
args2.push_back(arg);
|
||||||
|
}
|
||||||
|
args = args2;
|
||||||
|
|
||||||
|
EvalState state(searchPath);
|
||||||
Strings files;
|
Strings files;
|
||||||
bool readStdin = false;
|
bool readStdin = false;
|
||||||
bool fromArgs = false;
|
bool fromArgs = false;
|
||||||
|
@ -127,8 +137,6 @@ void run(Strings args)
|
||||||
}
|
}
|
||||||
else if (parseOptionArg(arg, i, args.end(), state, autoArgs))
|
else if (parseOptionArg(arg, i, args.end(), state, autoArgs))
|
||||||
;
|
;
|
||||||
else if (parseSearchPathArg(arg, i, args.end(), state))
|
|
||||||
;
|
|
||||||
else if (arg == "--add-root") {
|
else if (arg == "--add-root") {
|
||||||
if (i == args.end())
|
if (i == args.end())
|
||||||
throw UsageError("`--add-root' requires an argument");
|
throw UsageError("`--add-root' requires an argument");
|
||||||
|
|
|
@ -3,7 +3,7 @@ with builtins;
|
||||||
|
|
||||||
assert pathExists <nix/buildenv.nix>;
|
assert pathExists <nix/buildenv.nix>;
|
||||||
|
|
||||||
assert length nixPath == 3;
|
assert length nixPath == 6;
|
||||||
assert length (filter (x: x.prefix == "nix") nixPath) == 1;
|
assert length (filter (x: x.prefix == "nix") nixPath) == 1;
|
||||||
assert length (filter (x: baseNameOf x.path == "dir4") nixPath) == 1;
|
assert length (filter (x: baseNameOf x.path == "dir4") nixPath) == 1;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue