From d71ad4800bd5023f1452200af6c29832673892dc Mon Sep 17 00:00:00 2001 From: Don Date: Thu, 28 Mar 2019 14:34:26 -0700 Subject: [PATCH] Allow additional environment variables to be set in a clean environment (#5650) * Allow additional environment variables to be set in a clean environment * Add documentation for VCPKG_KEEP_ENV_VARS --- docs/users/config-environment.md | 7 +++++++ toolsrc/src/vcpkg/base/system.cpp | 13 +++++++++++++ 2 files changed, 20 insertions(+) diff --git a/docs/users/config-environment.md b/docs/users/config-environment.md index f25df89a3a..bffa072780 100644 --- a/docs/users/config-environment.md +++ b/docs/users/config-environment.md @@ -40,3 +40,10 @@ This environment variable can be set to a triplet name which will be used for un #### VCPKG_FORCE_SYSTEM_BINARIES This environment variable, if set, suppresses the downloading of CMake and Ninja and forces the use of the system binaries. + +### VCPKG_KEEP_ENV_VARS + +This environment variable can be set to a list of environment variables, separated by `;`, which will be propagated to +the build environment. + +Example: `FOO_SDK_DIR;BAR_SDK_DIR` diff --git a/toolsrc/src/vcpkg/base/system.cpp b/toolsrc/src/vcpkg/base/system.cpp index 90b9c34b36..6ddf17496e 100644 --- a/toolsrc/src/vcpkg/base/system.cpp +++ b/toolsrc/src/vcpkg/base/system.cpp @@ -178,6 +178,19 @@ namespace vcpkg::System L"ANDROID_NDK_HOME", }; + const Optional keep_vars = System::get_environment_variable("VCPKG_KEEP_ENV_VARS"); + const auto k = keep_vars.get(); + + if (k && !k->empty()) + { + auto vars = Strings::split(*k, ";"); + + for (auto&& var : vars) + { + env_wstrings.push_back(Strings::to_utf16(var.c_str())); + } + } + std::wstring env_cstr; for (auto&& env_wstring : env_wstrings)