diff options
| author | Alexander Neumann <30894796+Neumann-A@users.noreply.github.com> | 2020-09-28 16:51:16 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-09-28 07:51:16 -0700 |
| commit | 0c1c43742dda69f9cc19c15e08592215c219bce9 (patch) | |
| tree | 0b952eb044d2c95c70fe28da0d4c23e6b59d8149 | |
| parent | 8776756e08dddfc47b209eebfec5c927f14c7c74 (diff) | |
| download | vcpkg-0c1c43742dda69f9cc19c15e08592215c219bce9.tar.gz vcpkg-0c1c43742dda69f9cc19c15e08592215c219bce9.zip | |
[vcpkg] add env var VCPKG_OVERLAY_TRIPLETS (#12790)
* [vcpkg] add env var VCPKG_OVERLAY_TRIPLETS
* shorten way to complicated doc
* run clang format
* Apply CR
Co-authored-by: ras0219 <533828+ras0219@users.noreply.github.com>
* Apply CR2
Co-authored-by: nicole mazzuca <mazzucan@outlook.com>
Co-authored-by: ras0219 <533828+ras0219@users.noreply.github.com>
Co-authored-by: nicole mazzuca <mazzucan@outlook.com>
Co-authored-by: Billy Robert O'Neal III <bion@microsoft.com>
Co-authored-by: Robert Schumacher <roschuma@microsoft.com>
| -rw-r--r-- | docs/users/config-environment.md | 6 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/base/strings.h | 2 | ||||
| -rw-r--r-- | toolsrc/include/vcpkg/vcpkgcmdarguments.h | 1 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg/base/files.cpp | 7 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg/base/strings.cpp | 9 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg/vcpkgcmdarguments.cpp | 16 |
6 files changed, 30 insertions, 11 deletions
diff --git a/docs/users/config-environment.md b/docs/users/config-environment.md index 22f7ff84a..9b32816cb 100644 --- a/docs/users/config-environment.md +++ b/docs/users/config-environment.md @@ -46,6 +46,12 @@ the platform dependent PATH seperator (Windows `;` | others `:`) Example (Windows): `C:\custom-ports\boost;C:\custom-ports\sqlite3`
+#### VCPKG_OVERLAY_TRIPLETS
+
+This environment variable allows users to add directories to search for triplets.
+[Example: overlay triplets](../examples/overlay-triplets-linux-dynamic.md).
+List paths to overlays using the platform dependent PATH seperator (Windows `;`, others `:`)
+
#### VCPKG_FORCE_SYSTEM_BINARIES
This environment variable, if set, suppresses the downloading of CMake and Ninja and forces the use of the system binaries.
diff --git a/toolsrc/include/vcpkg/base/strings.h b/toolsrc/include/vcpkg/base/strings.h index 5042dd158..0962d6c1e 100644 --- a/toolsrc/include/vcpkg/base/strings.h +++ b/toolsrc/include/vcpkg/base/strings.h @@ -191,6 +191,8 @@ namespace vcpkg::Strings std::vector<std::string> split(StringView s, const char delimiter); + std::vector<std::string> split_paths(StringView s); + const char* find_first_of(StringView searched, StringView candidates); std::vector<StringView> find_all_enclosed(StringView input, StringView left_delim, StringView right_delim); diff --git a/toolsrc/include/vcpkg/vcpkgcmdarguments.h b/toolsrc/include/vcpkg/vcpkgcmdarguments.h index 626e598be..3901000e3 100644 --- a/toolsrc/include/vcpkg/vcpkgcmdarguments.h +++ b/toolsrc/include/vcpkg/vcpkgcmdarguments.h @@ -134,6 +134,7 @@ namespace vcpkg constexpr static StringLiteral OVERLAY_PORTS_ENV = "VCPKG_OVERLAY_PORTS"; constexpr static StringLiteral OVERLAY_PORTS_ARG = "overlay-ports"; std::vector<std::string> overlay_ports; + constexpr static StringLiteral OVERLAY_TRIPLETS_ENV = "VCPKG_OVERLAY_TRIPLETS"; constexpr static StringLiteral OVERLAY_TRIPLETS_ARG = "overlay-triplets"; std::vector<std::string> overlay_triplets; diff --git a/toolsrc/src/vcpkg/base/files.cpp b/toolsrc/src/vcpkg/base/files.cpp index 916c26bda..b06b625a5 100644 --- a/toolsrc/src/vcpkg/base/files.cpp +++ b/toolsrc/src/vcpkg/base/files.cpp @@ -1174,13 +1174,8 @@ namespace vcpkg::Files virtual std::vector<fs::path> find_from_PATH(const std::string& name) const override { -#if defined(_WIN32) static constexpr StringLiteral EXTS[] = {".cmd", ".exe", ".bat"}; - auto paths = Strings::split(System::get_environment_variable("PATH").value_or_exit(VCPKG_LINE_INFO), ';'); -#else // ^^^ defined(_WIN32) // !defined(_WIN32) vvv - static constexpr StringLiteral EXTS[] = {""}; - auto paths = Strings::split(System::get_environment_variable("PATH").value_or_exit(VCPKG_LINE_INFO), ':'); -#endif // ^^^ !defined(_WIN32) + auto paths = Strings::split_paths(System::get_environment_variable("PATH").value_or_exit(VCPKG_LINE_INFO)); std::vector<fs::path> ret; std::error_code ec; diff --git a/toolsrc/src/vcpkg/base/strings.cpp b/toolsrc/src/vcpkg/base/strings.cpp index 8e1bbdc22..49aaa30bd 100644 --- a/toolsrc/src/vcpkg/base/strings.cpp +++ b/toolsrc/src/vcpkg/base/strings.cpp @@ -180,6 +180,15 @@ std::vector<std::string> Strings::split(StringView s, const char delimiter) } } +std::vector<std::string> Strings::split_paths(StringView s) +{ +#if defined(_WIN32) + return Strings::split(s, ';'); +#else // ^^^ defined(_WIN32) // !defined(_WIN32) vvv + return Strings::split(s, ':'); +#endif +} + const char* Strings::find_first_of(StringView input, StringView chars) { return std::find_first_of(input.begin(), input.end(), chars.begin(), chars.end()); diff --git a/toolsrc/src/vcpkg/vcpkgcmdarguments.cpp b/toolsrc/src/vcpkg/vcpkgcmdarguments.cpp index d56de23a8..bd428e8b3 100644 --- a/toolsrc/src/vcpkg/vcpkgcmdarguments.cpp +++ b/toolsrc/src/vcpkg/vcpkgcmdarguments.cpp @@ -614,6 +614,7 @@ namespace vcpkg table.format(opt(OVERLAY_PORTS_ARG, "=", "<path>"), "Specify directories to be used when searching for ports"); table.format("", "(also: " + format_environment_variable("VCPKG_OVERLAY_PORTS") + ')'); table.format(opt(OVERLAY_TRIPLETS_ARG, "=", "<path>"), "Specify directories containing triplets files"); + table.format("", "(also: " + format_environment_variable("VCPKG_OVERLAY_TRIPLETS") + ')'); table.format(opt(BINARY_SOURCES_ARG, "=", "<path>"), "Add sources for binary caching. See 'vcpkg help binarycaching'"); table.format(opt(DOWNLOADS_ROOT_DIR_ARG, "=", "<path>"), "Specify the downloads root directory"); @@ -652,15 +653,20 @@ namespace vcpkg const auto vcpkg_overlay_ports_env = System::get_environment_variable(OVERLAY_PORTS_ENV); if (const auto unpacked = vcpkg_overlay_ports_env.get()) { -#ifdef WIN32 - auto overlays = Strings::split(*unpacked, ';'); -#else - auto overlays = Strings::split(*unpacked, ':'); -#endif + auto overlays = Strings::split_paths(*unpacked); overlay_ports.insert(std::end(overlay_ports), std::begin(overlays), std::end(overlays)); } } + { + const auto vcpkg_overlay_triplets_env = System::get_environment_variable(OVERLAY_TRIPLETS_ENV); + if (const auto unpacked = vcpkg_overlay_triplets_env.get()) + { + auto triplets = Strings::split_paths(*unpacked); + overlay_triplets.insert(std::end(overlay_triplets), std::begin(triplets), std::end(triplets)); + } + } + if (!vcpkg_root_dir) { const auto vcpkg_root_env = System::get_environment_variable(VCPKG_ROOT_DIR_ENV); |
