aboutsummaryrefslogtreecommitdiff
path: root/toolsrc/src/vcpkg/commands.env.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'toolsrc/src/vcpkg/commands.env.cpp')
-rw-r--r--toolsrc/src/vcpkg/commands.env.cpp24
1 files changed, 17 insertions, 7 deletions
diff --git a/toolsrc/src/vcpkg/commands.env.cpp b/toolsrc/src/vcpkg/commands.env.cpp
index 5b673b965..8d70ac144 100644
--- a/toolsrc/src/vcpkg/commands.env.cpp
+++ b/toolsrc/src/vcpkg/commands.env.cpp
@@ -48,7 +48,7 @@ namespace vcpkg::Commands::Env
const Build::PreBuildInfo pre_build_info(
paths, triplet, var_provider.get_generic_triplet_vars(triplet).value_or_exit(VCPKG_LINE_INFO));
const Toolset& toolset = paths.get_toolset(pre_build_info);
- auto env_cmd = Build::make_build_env_cmd(pre_build_info, toolset);
+ auto build_env_cmd = Build::make_build_env_cmd(pre_build_info, toolset);
std::unordered_map<std::string, std::string> extra_env = {};
const bool add_bin = Util::Sets::contains(options.switches, OPTION_BIN);
@@ -74,12 +74,22 @@ namespace vcpkg::Commands::Env
if (add_python) extra_env.emplace("PYTHONPATH", (paths.installed / triplet.to_string() / "python").u8string());
if (path_vars.size() > 0) extra_env.emplace("PATH", Strings::join(";", path_vars));
- std::string env_cmd_prefix = env_cmd.empty() ? "" : Strings::format("%s && ", env_cmd);
- std::string env_cmd_suffix =
- args.command_arguments.empty() ? "cmd" : Strings::format("cmd /c %s", args.command_arguments.at(0));
+ auto env = [&] {
+ auto clean_env = System::get_modified_clean_environment(extra_env);
+ if (build_env_cmd.empty())
+ return clean_env;
+ else
+ return System::cmd_execute_modify_env(build_env_cmd, clean_env);
+ }();
- const std::string cmd = Strings::format("%s%s", env_cmd_prefix, env_cmd_suffix);
- System::cmd_execute(cmd, System::get_modified_clean_environment(extra_env));
- Checks::exit_success(VCPKG_LINE_INFO);
+ std::string cmd = args.command_arguments.empty() ? "cmd" : args.command_arguments.at(0);
+#ifdef _WIN32
+ System::enter_interactive_subprocess();
+#endif
+ auto rc = System::cmd_execute(cmd, env);
+#ifdef _WIN32
+ System::exit_interactive_subprocess();
+#endif
+ Checks::exit_with_code(VCPKG_LINE_INFO, rc);
}
}