Merge pull request #599 from cgutman/path_env

Fix PATH variable handling on Windows
This commit is contained in:
ReenigneArcher
2022-12-21 11:44:47 -05:00
committed by GitHub
2 changed files with 15 additions and 2 deletions

View File

@@ -279,8 +279,21 @@ std::string parse_env_val(bp::native_environment &env, const std::string_view &v
ss.write(pos, (dollar - pos)); ss.write(pos, (dollar - pos));
auto var_begin = next + 1; auto var_begin = next + 1;
auto var_end = find_match(next, std::end(val_raw)); auto var_end = find_match(next, std::end(val_raw));
auto var_name = std::string { var_begin, var_end };
ss << env[std::string { var_begin, var_end }].to_string(); #ifdef _WIN32
// Windows treats environment variable names in a case-insensitive manner,
// so we look for a case-insensitive match here. This is critical for
// correctly appending to PATH on Windows.
auto itr = std::find_if(env.cbegin(), env.cend(),
[&](const auto &e) { return boost::iequals(e.get_name(), var_name); });
if(itr != env.cend()) {
// Use an existing case-insensitive match
var_name = itr->get_name();
}
#endif
ss << env[var_name].to_string();
pos = var_end + 1; pos = var_end + 1;
next = var_end; next = var_end;

View File

@@ -1,6 +1,6 @@
{ {
"env": { "env": {
"PATH": "$(PATH);C:\\Program Files (x86)\\Steam" "PATH": "$(PATH);$(ProgramFiles(x86))\\Steam"
}, },
"apps": [ "apps": [
{ {