diff options
| author | Victor Romero <romerosanchezv@gmail.com> | 2020-01-17 14:21:19 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-01-17 14:21:19 -0800 |
| commit | f56645c3fd9a1561c430e90ce00836489b372ef8 (patch) | |
| tree | 6621f8dd902d8f6a4ad6d3cdff5a3659686c1159 /toolsrc/src | |
| parent | bf3e071e53bf46cba8857859f853dcc8898db817 (diff) | |
| download | vcpkg-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.cpp | 23 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg/build.cpp | 12 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg/commands.autocomplete.cpp | 4 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg/help.cpp | 32 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg/vcpkgpaths.cpp | 27 |
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; }); } |
