diff options
Diffstat (limited to 'toolsrc/src/vcpkg/commands.env.cpp')
| -rw-r--r-- | toolsrc/src/vcpkg/commands.env.cpp | 24 |
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); } } |
