aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build2/bin/guess.cxx17
-rw-r--r--build2/cc/guess.cxx8
-rw-r--r--build2/cli/init.cxx8
-rw-r--r--build2/test/rule.cxx2
-rw-r--r--build2/utility.cxx7
-rw-r--r--build2/utility.hxx11
6 files changed, 42 insertions, 11 deletions
diff --git a/build2/bin/guess.cxx b/build2/bin/guess.cxx
index ab7edf6..913736d 100644
--- a/build2/bin/guess.cxx
+++ b/build2/bin/guess.cxx
@@ -52,7 +52,10 @@ namespace build2
dr << info << "use config.bin.ar to override";
});
- arp = run_search (ar, true, fallback);
+ // Only search in PATH (specifically, omitting the current
+ // executable's directory on Windows).
+ //
+ arp = run_search (ar, true, fallback, true /* path_only */);
}
if (rl != nullptr)
@@ -63,7 +66,7 @@ namespace build2
dr << info << "use config.bin.ranlib to override";
});
- rlp = run_search (*rl, true, fallback);
+ rlp = run_search (*rl, true, fallback, true /* path_only */);
}
// Binutils, LLVM, and FreeBSD ar/ranlib all recognize the --version
@@ -269,7 +272,10 @@ namespace build2
dr << info << "use config.bin.ld to override";
});
- pp = run_search (ld, true, fallback);
+ // Only search in PATH (specifically, omitting the current
+ // executable's directory on Windows).
+ //
+ pp = run_search (ld, true, fallback, true /* path_only */);
}
// Binutils ld recognizes the --version option. Microsoft's link.exe
@@ -397,7 +403,10 @@ namespace build2
dr << info << "use config.bin.rc to override";
});
- pp = run_search (rc, true, fallback);
+ // Only search in PATH (specifically, omitting the current
+ // executable's directory on Windows).
+ //
+ pp = run_search (rc, true, fallback, true /* path_only */);
}
// Binutils windres recognizes the --version option.
diff --git a/build2/cc/guess.cxx b/build2/cc/guess.cxx
index 6ce46a2..919aeab 100644
--- a/build2/cc/guess.cxx
+++ b/build2/cc/guess.cxx
@@ -360,7 +360,13 @@ namespace build2
dr << info << "use config." << xm << " to override";
});
- xp = run_search (xc, false /* init */); // Note: cached.
+ // Only search in PATH (specifically, omitting the current
+ // executable's directory on Windows).
+ //
+ xp = run_search (xc,
+ false /* init */, // Note: result is cached.
+ dir_path () /* fallback */,
+ true /* path_only */);
}
using type = compiler_type;
diff --git a/build2/cli/init.cxx b/build2/cli/init.cxx
index bad2533..d9fec08 100644
--- a/build2/cli/init.cxx
+++ b/build2/cli/init.cxx
@@ -118,7 +118,13 @@ namespace build2
try
{
- pp = process::path_search (cli, true); // Can throw.
+ // Only search in PATH (specifically, omitting the current
+ // executable's directory on Windows).
+ //
+ pp = process::path_search (cli,
+ true /* init */,
+ dir_path () /* fallback */,
+ true /* path_only */);
args[0] = pp.recall_string ();
if (verb >= 3)
diff --git a/build2/test/rule.cxx b/build2/test/rule.cxx
index 0b67d68..ba93378 100644
--- a/build2/test/rule.cxx
+++ b/build2/test/rule.cxx
@@ -765,7 +765,7 @@ namespace build2
args.push_back (nullptr);
}
- process_path pp (run_search (p, true));
+ process_path pp (run_search (p, true /* init */));
args.push_back (pp.recall_string ());
// Do we have options and/or arguments?
diff --git a/build2/utility.cxx b/build2/utility.cxx
index 4da2195..b5f5e29 100644
--- a/build2/utility.cxx
+++ b/build2/utility.cxx
@@ -148,10 +148,10 @@ namespace build2
}
process_path
- run_search (const char*& args0, const location& l)
+ run_search (const char*& args0, bool path_only, const location& l)
try
{
- return process::path_search (args0);
+ return process::path_search (args0, dir_path () /* fallback */, path_only);
}
catch (const process_error& e)
{
@@ -162,10 +162,11 @@ namespace build2
run_search (const path& f,
bool init,
const dir_path& fallback,
+ bool path_only,
const location& l)
try
{
- return process::path_search (f, init, fallback);
+ return process::path_search (f, init, fallback, path_only);
}
catch (const process_error& e)
{
diff --git a/build2/utility.hxx b/build2/utility.hxx
index 6527d3a..8157c02 100644
--- a/build2/utility.hxx
+++ b/build2/utility.hxx
@@ -150,12 +150,21 @@ namespace build2
// case of an error.
//
process_path
- run_search (const char*& args0, const location& = location ());
+ run_search (const char*& args0,
+ bool path_only,
+ const location& = location ());
+
+ inline process_path
+ run_search (const char*& args0, const location& l = location ())
+ {
+ return run_search (args0, false, l);
+ }
process_path
run_search (const path&,
bool init = false,
const dir_path& fallback = dir_path (),
+ bool path_only = false,
const location& = location ());
// Wait for process termination. Issue diagnostics and throw failed in case