aboutsummaryrefslogtreecommitdiff
path: root/toolsrc/src
diff options
context:
space:
mode:
authorVictor Romero <romerosanchezv@gmail.com>2020-01-17 14:21:19 -0800
committerGitHub <noreply@github.com>2020-01-17 14:21:19 -0800
commitf56645c3fd9a1561c430e90ce00836489b372ef8 (patch)
tree6621f8dd902d8f6a4ad6d3cdff5a3659686c1159 /toolsrc/src
parentbf3e071e53bf46cba8857859f853dcc8898db817 (diff)
downloadvcpkg-f56645c3fd9a1561c430e90ce00836489b372ef8.tar.gz
vcpkg-f56645c3fd9a1561c430e90ce00836489b372ef8.zip
Community Triplets 🤝 (#7976)
* Move untested triplets to Community Triplets * Document community triplets * Load community triplets by default and alert when using one * [triplets] Merge documentation of community triplets * Bump version
Diffstat (limited to 'toolsrc/src')
-rw-r--r--toolsrc/src/vcpkg.cpp23
-rw-r--r--toolsrc/src/vcpkg/build.cpp12
-rw-r--r--toolsrc/src/vcpkg/commands.autocomplete.cpp4
-rw-r--r--toolsrc/src/vcpkg/help.cpp32
-rw-r--r--toolsrc/src/vcpkg/vcpkgpaths.cpp27
5 files changed, 60 insertions, 38 deletions
diff --git a/toolsrc/src/vcpkg.cpp b/toolsrc/src/vcpkg.cpp
index c336d2f63..2dd13f43d 100644
--- a/toolsrc/src/vcpkg.cpp
+++ b/toolsrc/src/vcpkg.cpp
@@ -262,29 +262,6 @@ static void load_config()
}
#if defined(_WIN32)
-static std::string trim_path_from_command_line(const std::string& full_command_line)
-{
- Checks::check_exit(
- VCPKG_LINE_INFO, !full_command_line.empty(), "Internal failure - cannot have empty command line");
-
- if (full_command_line[0] == '"')
- {
- auto it = std::find(full_command_line.cbegin() + 1, full_command_line.cend(), '"');
- if (it != full_command_line.cend()) // Skip over the quote
- ++it;
- while (it != full_command_line.cend() && *it == ' ') // Skip over a space
- ++it;
- return std::string(it, full_command_line.cend());
- }
-
- auto it = std::find(full_command_line.cbegin(), full_command_line.cend(), ' ');
- while (it != full_command_line.cend() && *it == ' ')
- ++it;
- return std::string(it, full_command_line.cend());
-}
-#endif
-
-#if defined(_WIN32)
// note: this prevents a false positive for -Wmissing-prototypes on clang-cl
int wmain(int, const wchar_t* const*);
int wmain(const int argc, const wchar_t* const* const argv)
diff --git a/toolsrc/src/vcpkg/build.cpp b/toolsrc/src/vcpkg/build.cpp
index f13dd2a25..654142696 100644
--- a/toolsrc/src/vcpkg/build.cpp
+++ b/toolsrc/src/vcpkg/build.cpp
@@ -497,6 +497,8 @@ namespace vcpkg::Build
else
{
const auto algo = Hash::Algorithm::Sha1;
+ // TODO: Use file path as part of hash.
+ // REASON: Copying a triplet file without modifying it produces the same hash as the original.
hash = Hash::get_file_hash(VCPKG_LINE_INFO, fs, triplet_file_path, algo);
if (auto p = pre_build_info.external_toolchain_file.get())
@@ -550,10 +552,16 @@ namespace vcpkg::Build
const Triplet& triplet = spec.triplet();
const auto& triplet_file_path = paths.get_triplet_file_path(spec.triplet()).u8string();
- if (!Strings::case_insensitive_ascii_starts_with(triplet_file_path, paths.triplets.u8string()))
+ if (Strings::case_insensitive_ascii_starts_with(triplet_file_path, paths.community_triplets.u8string()))
{
- System::printf("-- Loading triplet configuration from: %s\n", triplet_file_path);
+ System::printf(vcpkg::System::Color::warning, "-- Using community triplet %s. This triplet configuration is not guaranteed to succeed.\n", triplet.canonical_name());
+ System::printf("-- [COMMUNITY] Loading triplet configuration from: %s\n", triplet_file_path);
}
+ else if (!Strings::case_insensitive_ascii_starts_with(triplet_file_path, paths.triplets.u8string()))
+ {
+ System::printf("-- [OVERLAY] Loading triplet configuration from: %s\n", triplet_file_path);
+ }
+
if (!Strings::case_insensitive_ascii_starts_with(config.port_dir.u8string(), paths.ports.u8string()))
{
System::printf("-- Installing port from location: %s\n", config.port_dir.u8string());
diff --git a/toolsrc/src/vcpkg/commands.autocomplete.cpp b/toolsrc/src/vcpkg/commands.autocomplete.cpp
index 8449b7096..d4149ae6d 100644
--- a/toolsrc/src/vcpkg/commands.autocomplete.cpp
+++ b/toolsrc/src/vcpkg/commands.autocomplete.cpp
@@ -97,7 +97,7 @@ namespace vcpkg::Commands::Autocomplete
Checks::exit_success(VCPKG_LINE_INFO);
}
- std::vector<std::string> triplets = paths.get_available_triplets();
+ std::vector<std::string> triplets = paths.get_available_triplets_names();
Util::erase_remove_if(triplets, [&](const std::string& s) {
return !Strings::case_insensitive_ascii_starts_with(s, triplet_prefix);
});
@@ -158,7 +158,7 @@ namespace vcpkg::Commands::Autocomplete
if (command.name == "install" && results.size() == 1 && !is_option)
{
const auto port_at_each_triplet =
- combine_port_with_triplets(results[0], paths.get_available_triplets());
+ combine_port_with_triplets(results[0], paths.get_available_triplets_names());
Util::Vectors::concatenate(&results, port_at_each_triplet);
}
diff --git a/toolsrc/src/vcpkg/help.cpp b/toolsrc/src/vcpkg/help.cpp
index a4908e02e..78bc43539 100644
--- a/toolsrc/src/vcpkg/help.cpp
+++ b/toolsrc/src/vcpkg/help.cpp
@@ -74,10 +74,36 @@ namespace vcpkg::Help
void help_topic_valid_triplet(const VcpkgPaths& paths)
{
- System::print2("Available architecture triplets:\n");
- for (auto&& triplet : paths.get_available_triplets())
+ std::map<std::string, std::vector<const VcpkgPaths::TripletFile*>> triplets_per_location;
+ vcpkg::Util::group_by(paths.get_available_triplets(),
+ &triplets_per_location,
+ [](const VcpkgPaths::TripletFile& triplet_file) -> std::string {
+ return triplet_file.location.u8string();
+ });
+
+ System::print2("Available architecture triplets\n");
+
+ System::print2("VCPKG built-in triplets:\n");
+ for (auto* triplet : triplets_per_location[paths.triplets.u8string()])
+ {
+ System::print2(" ", triplet->name, '\n');
+ }
+ triplets_per_location.erase(paths.triplets.u8string());
+
+ System::print2("\nVCPKG community triplets:\n");
+ for (auto* triplet : triplets_per_location[paths.community_triplets.u8string()])
+ {
+ System::print2(" ", triplet->name, '\n');
+ }
+ triplets_per_location.erase(paths.community_triplets.u8string());
+
+ for (auto&& kv_pair : triplets_per_location)
{
- System::print2(" ", triplet, '\n');
+ System::print2("\nOverlay triplets from ", kv_pair.first, ":\n");
+ for (auto* triplet : kv_pair.second)
+ {
+ System::print2(" ", triplet->name, '\n');
+ }
}
}
diff --git a/toolsrc/src/vcpkg/vcpkgpaths.cpp b/toolsrc/src/vcpkg/vcpkgpaths.cpp
index 078121fcc..692cf1634 100644
--- a/toolsrc/src/vcpkg/vcpkgpaths.cpp
+++ b/toolsrc/src/vcpkg/vcpkgpaths.cpp
@@ -67,6 +67,7 @@ namespace vcpkg
paths.ports = paths.root / "ports";
paths.installed = paths.root / "installed";
paths.triplets = paths.root / "triplets";
+ paths.community_triplets = paths.triplets / "community";
if (auto scripts_dir = vcpkg_scripts_root_dir.get())
{
@@ -110,7 +111,8 @@ namespace vcpkg
paths.triplets_dirs.emplace_back(fs::stdfs::canonical(path));
}
}
- paths.triplets_dirs.emplace_back(fs::stdfs::canonical(paths.root / "triplets"));
+ paths.triplets_dirs.emplace_back(fs::stdfs::canonical(paths.triplets));
+ paths.triplets_dirs.emplace_back(fs::stdfs::canonical(paths.community_triplets));
return paths;
}
@@ -130,23 +132,32 @@ namespace vcpkg
bool VcpkgPaths::is_valid_triplet(const Triplet& t) const
{
const auto it = Util::find_if(this->get_available_triplets(), [&](auto&& available_triplet) {
- return t.canonical_name() == available_triplet;
+ return t.canonical_name() == available_triplet.name;
});
return it != this->get_available_triplets().cend();
}
- const std::vector<std::string>& VcpkgPaths::get_available_triplets() const
+ const std::vector<std::string> VcpkgPaths::get_available_triplets_names() const
{
- return this->available_triplets.get_lazy([this]() -> std::vector<std::string> {
- std::vector<std::string> output;
+ return vcpkg::Util::fmap(this->get_available_triplets(),
+ [](auto&& triplet_file) -> std::string { return triplet_file.name; });
+ }
+
+ const std::vector<VcpkgPaths::TripletFile>& VcpkgPaths::get_available_triplets() const
+ {
+ return this->available_triplets.get_lazy([this]() -> std::vector<TripletFile> {
+ std::vector<TripletFile> output;
+ Files::Filesystem& fs = this->get_filesystem();
for (auto&& triplets_dir : triplets_dirs)
{
- for (auto&& path : this->get_filesystem().get_files_non_recursive(triplets_dir))
+ for (auto&& path : fs.get_files_non_recursive(triplets_dir))
{
- output.push_back(path.stem().filename().string());
+ if (fs::is_regular_file(fs.status(VCPKG_LINE_INFO, path)))
+ {
+ output.emplace_back(TripletFile(path.stem().filename().u8string(), triplets_dir));
+ }
}
}
- Util::sort_unique_erase(output);
return output;
});
}