From aeffa625e55eea41a86a728c14a95d05bc3de0e9 Mon Sep 17 00:00:00 2001 From: Alexander Neumann <30894796+Neumann-A@users.noreply.github.com> Date: Sat, 28 Mar 2020 04:19:53 +0100 Subject: [vcpkg] Add the possibility to load vcvars.bat with external toolchain. (#10399) * Add VCPKG_LOAD_VCVARS_ENV allow loading vcvars.bat if an external toolchain file is used. * add documentation --- toolsrc/include/vcpkg/build.h | 3 +++ toolsrc/src/vcpkg/build.cpp | 21 ++++++++++++++++++++- toolsrc/src/vcpkg/vcpkgpaths.cpp | 2 +- 3 files changed, 24 insertions(+), 2 deletions(-) (limited to 'toolsrc') diff --git a/toolsrc/include/vcpkg/build.h b/toolsrc/include/vcpkg/build.h index d36b64143..892fb2370 100644 --- a/toolsrc/include/vcpkg/build.h +++ b/toolsrc/include/vcpkg/build.h @@ -153,6 +153,7 @@ namespace vcpkg::Build Triplet triplet, const std::unordered_map& cmakevars); + bool load_vcvars_env; std::string triplet_abi_tag; std::string target_architecture; std::string cmake_system_name; @@ -179,6 +180,7 @@ namespace vcpkg::Build BUILD_TYPE, ENV_PASSTHROUGH, PUBLIC_ABI_OVERRIDE, + LOAD_VCVARS_ENV, }; const std::unordered_map VCPKG_OPTIONS = { @@ -191,6 +193,7 @@ namespace vcpkg::Build {"VCPKG_BUILD_TYPE", VcpkgTripletVar::BUILD_TYPE}, {"VCPKG_ENV_PASSTHROUGH", VcpkgTripletVar::ENV_PASSTHROUGH}, {"VCPKG_PUBLIC_ABI_OVERRIDE", VcpkgTripletVar::PUBLIC_ABI_OVERRIDE}, + {"VCPKG_LOAD_VCVARS_ENV", VcpkgTripletVar::LOAD_VCVARS_ENV}, }; struct ExtendedBuildResult diff --git a/toolsrc/src/vcpkg/build.cpp b/toolsrc/src/vcpkg/build.cpp index 81997e79c..c1e91adf9 100644 --- a/toolsrc/src/vcpkg/build.cpp +++ b/toolsrc/src/vcpkg/build.cpp @@ -274,7 +274,7 @@ namespace vcpkg::Build std::string make_build_env_cmd(const PreBuildInfo& pre_build_info, const Toolset& toolset) { - if (pre_build_info.external_toolchain_file.has_value()) return ""; + if (pre_build_info.external_toolchain_file.has_value() && !pre_build_info.load_vcvars_env) return ""; if (!pre_build_info.cmake_system_name.empty() && pre_build_info.cmake_system_name != "WindowsStore") return ""; const char* tonull = " >nul"; @@ -1052,6 +1052,25 @@ namespace vcpkg::Build case VcpkgTripletVar::PUBLIC_ABI_OVERRIDE: public_abi_override = variable_value.empty() ? nullopt : Optional{variable_value}; break; + case VcpkgTripletVar::LOAD_VCVARS_ENV: + if (variable_value.empty()) + { + load_vcvars_env = true; + if(external_toolchain_file) + load_vcvars_env = false; + } + else if (Strings::case_insensitive_ascii_equals(variable_value, "1") || + Strings::case_insensitive_ascii_equals(variable_value, "on") || + Strings::case_insensitive_ascii_equals(variable_value, "true")) + load_vcvars_env = true; + else if (Strings::case_insensitive_ascii_equals(variable_value, "0") || + Strings::case_insensitive_ascii_equals(variable_value, "off") || + Strings::case_insensitive_ascii_equals(variable_value, "false")) + load_vcvars_env = false; + else + Checks::exit_with_message( + VCPKG_LINE_INFO, "Unknown boolean setting for VCPKG_LOAD_VCVARS_ENV: %s", variable_value); + break; } } diff --git a/toolsrc/src/vcpkg/vcpkgpaths.cpp b/toolsrc/src/vcpkg/vcpkgpaths.cpp index 98be491e3..bf16f09f3 100644 --- a/toolsrc/src/vcpkg/vcpkgpaths.cpp +++ b/toolsrc/src/vcpkg/vcpkgpaths.cpp @@ -193,7 +193,7 @@ namespace vcpkg const Toolset& VcpkgPaths::get_toolset(const Build::PreBuildInfo& prebuildinfo) const { - if (prebuildinfo.external_toolchain_file || + if ((prebuildinfo.external_toolchain_file && !prebuildinfo.load_vcvars_env) || (!prebuildinfo.cmake_system_name.empty() && prebuildinfo.cmake_system_name != "WindowsStore")) { static Toolset external_toolset = []() -> Toolset { -- cgit v1.2.3