aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Neumann <30894796+Neumann-A@users.noreply.github.com>2020-09-28 16:51:16 +0200
committerGitHub <noreply@github.com>2020-09-28 07:51:16 -0700
commit0c1c43742dda69f9cc19c15e08592215c219bce9 (patch)
tree0b952eb044d2c95c70fe28da0d4c23e6b59d8149
parent8776756e08dddfc47b209eebfec5c927f14c7c74 (diff)
downloadvcpkg-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.md6
-rw-r--r--toolsrc/include/vcpkg/base/strings.h2
-rw-r--r--toolsrc/include/vcpkg/vcpkgcmdarguments.h1
-rw-r--r--toolsrc/src/vcpkg/base/files.cpp7
-rw-r--r--toolsrc/src/vcpkg/base/strings.cpp9
-rw-r--r--toolsrc/src/vcpkg/vcpkgcmdarguments.cpp16
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);