From e9855e6458939a98c927da14278e21dfa6a79701 Mon Sep 17 00:00:00 2001 From: Victor Romero Date: Tue, 20 Oct 2020 02:32:28 -0700 Subject: [PATCH 01/42] WIP: Get versions from database files --- toolsrc/include/vcpkg/portfileprovider.h | 18 +++++ toolsrc/include/vcpkg/versions.h | 72 ++++++++++++++++++ toolsrc/src/vcpkg/portfileprovider.cpp | 94 ++++++++++++++++++++++++ toolsrc/windows-bootstrap/vcpkg.vcxproj | 1 + 4 files changed, 185 insertions(+) create mode 100644 toolsrc/include/vcpkg/versions.h diff --git a/toolsrc/include/vcpkg/portfileprovider.h b/toolsrc/include/vcpkg/portfileprovider.h index c127aed40ad77a..4e3f6a35ce3bf3 100644 --- a/toolsrc/include/vcpkg/portfileprovider.h +++ b/toolsrc/include/vcpkg/portfileprovider.h @@ -6,6 +6,7 @@ #include #include +#include namespace vcpkg::PortFileProvider { @@ -36,4 +37,21 @@ namespace vcpkg::PortFileProvider std::vector overlay_ports; mutable std::unordered_map cache; }; + + struct VersionedPortfileProvider + { + explicit VersionedPortfileProvider(const vcpkg::VcpkgPaths& paths); + + const std::vector& get_port_versions(const std::string& port_spec) const; + + // ExpectedS get_control_file( + // const vcpkg::Versions::VersionSpec& version_spec) const; + + private: + const vcpkg::VcpkgPaths& paths; + // mutable std::unordered_map control_cache; + mutable std::unordered_map> versions_cache; + mutable std::unordered_map git_tree_cache; + }; + } diff --git a/toolsrc/include/vcpkg/versions.h b/toolsrc/include/vcpkg/versions.h new file mode 100644 index 00000000000000..e3e14f8d7aef19 --- /dev/null +++ b/toolsrc/include/vcpkg/versions.h @@ -0,0 +1,72 @@ +#pragma once + +#include + +namespace vcpkg::Versions +{ + enum class Scheme + { + Relaxed, + Semver, + Date, + String + }; + + struct VersionSpec + { + const std::string package_spec; + const VersionT version; + const Scheme scheme; + + VersionSpec(const std::string& package_spec, const VersionT& version, Scheme scheme) + : package_spec(package_spec), version(version), scheme(scheme) + { + } + + VersionSpec(const std::string& package_spec, const std::string& version_string, int port_version, Scheme scheme) + : package_spec(package_spec), version(version_string, port_version), scheme(scheme) + { + } + + friend bool operator==(const VersionSpec& lhs, const VersionSpec& rhs) + { + return std::tie(lhs.package_spec, lhs.version, lhs.scheme) == + std::tie(rhs.package_spec, rhs.version, rhs.scheme); + } + + friend bool operator!=(const VersionSpec& lhs, const VersionSpec& rhs) { return !(lhs == rhs); } + }; + + struct VersionSpecHasher + { + std::size_t operator()(const VersionSpec& key) const + { + using std::hash; + using std::size_t; + using std::string; + + return ((hash()(key.package_spec) ^ (hash()(key.version.to_string()) << 1)) >> 1) ^ + (hash()(static_cast(key.scheme)) << 1); + } + }; + + struct Constraint + { + enum class Type + { + None, + Minimum, + Exact + }; + + const VersionSpec version_spec; + const Type type; + + Constraint(const std::string& package_spec, const VersionT& version, Scheme scheme, Type type) + : version_spec(package_spec, version, scheme), type(type) + { + } + + Constraint(const VersionSpec& version_spec, Type type) : version_spec(version_spec), type(type) { } + }; +} \ No newline at end of file diff --git a/toolsrc/src/vcpkg/portfileprovider.cpp b/toolsrc/src/vcpkg/portfileprovider.cpp index 0e065eff703378..c48bd8f4e94ee3 100644 --- a/toolsrc/src/vcpkg/portfileprovider.cpp +++ b/toolsrc/src/vcpkg/portfileprovider.cpp @@ -5,6 +5,7 @@ #include #include #include +#include namespace vcpkg::PortFileProvider { @@ -215,4 +216,97 @@ namespace vcpkg::PortFileProvider return ret; } + + VersionedPortfileProvider::VersionedPortfileProvider(const vcpkg::VcpkgPaths& paths) : paths(paths) { } + + vcpkg::Versions::VersionSpec extract_version_spec(const std::string& package_spec, const Json::Object& version_obj) + { + static const std::map version_schemes{ + {Versions::Scheme::Relaxed, "version"}, + {Versions::Scheme::Semver, "version-semver"}, + {Versions::Scheme::Date, "version-date"}, + {Versions::Scheme::String, "version-string"}}; + + const auto port_version = static_cast(version_obj.get("port-version")->integer()); + + for (auto&& kv_pair : version_schemes) + { + if (const auto version_string = version_obj.get(kv_pair.second)) + { + return Versions::VersionSpec( + package_spec, version_string->string().to_string(), port_version, kv_pair.first); + } + } + + Checks::unreachable(VCPKG_LINE_INFO); + } + + const std::vector& VersionedPortfileProvider::get_port_versions( + const std::string& package_spec) const + { + auto cache_hit = versions_cache.find(package_spec); + if (cache_hit != versions_cache.end()) + { + return cache_hit->second; + } + + auto db_path = paths.root / "port_versions" / Strings::concat(package_spec, ".db.json"); + auto& fs = paths.get_filesystem(); + if (!fs.exists(db_path)) + { + // TODO: Handle db version not existing + Checks::exit_fail(VCPKG_LINE_INFO); + } + + auto versions_json = Json::parse_file(VCPKG_LINE_INFO, paths.get_filesystem(), db_path); + + // NOTE: A dictionary would be the best way to store this, for now we use a vector + if (versions_json.first.is_object()) + { + auto versions_object = std::move(versions_json.first.object()); + auto maybe_versions_array = versions_object.get("versions"); + + if (maybe_versions_array && maybe_versions_array->is_array()) + { + auto versions_array = std::move(maybe_versions_array->array()); + for (auto&& version : versions_array) + { + auto version_obj = std::move(version.object()); + Versions::VersionSpec spec = extract_version_spec(package_spec, version_obj); + + auto& package_versions = versions_cache[spec.package_spec]; + package_versions.push_back(spec); + + auto&& git_tree = version_obj.get("git-tree")->string().to_string(); + git_tree_cache.emplace(std::move(spec), git_tree); + } + } + } + + return versions_cache.at(package_spec); + } + + //ExpectedS VersionedPortfileProvider::get_control_file( + // const vcpkg::Versions::VersionSpec& version_spec) const + //{ + // auto cache_hit = control_cache.find(version_spec); + // if (cache_hit != control_cache.end()) + // { + // return cache_hit->second; + // } + + // // 1. Load database for port + // auto git_tree_cache_hit = git_tree_cache.find(version_spec); + // if (git_tree_cache_hit == git_tree_cache.end()) + // { + // // TODO: Try to load port from database + // Checks::exit_fail(VCPKG_LINE_INFO); + // } + + // const std::string git_tree = git_tree_cache_hit->second; + + // // 2. Checkout port version + // // 3. Try load port + // // 4. Return + //} } diff --git a/toolsrc/windows-bootstrap/vcpkg.vcxproj b/toolsrc/windows-bootstrap/vcpkg.vcxproj index 259d1a3302eef7..5f897bc6730375 100644 --- a/toolsrc/windows-bootstrap/vcpkg.vcxproj +++ b/toolsrc/windows-bootstrap/vcpkg.vcxproj @@ -267,6 +267,7 @@ + From da07a3b163bbe9ee19d2ed091632ae3459384b0b Mon Sep 17 00:00:00 2001 From: Victor Romero Date: Tue, 20 Oct 2020 10:42:35 -0700 Subject: [PATCH 02/42] Fix formatting --- toolsrc/include/vcpkg/portfileprovider.h | 3 +- toolsrc/include/vcpkg/versions.h | 40 ++++++---------------- toolsrc/src/vcpkg/portfileprovider.cpp | 20 +++++------ toolsrc/src/vcpkg/versions.cpp | 42 ++++++++++++++++++++++++ toolsrc/windows-bootstrap/vcpkg.vcxproj | 1 + 5 files changed, 65 insertions(+), 41 deletions(-) create mode 100644 toolsrc/src/vcpkg/versions.cpp diff --git a/toolsrc/include/vcpkg/portfileprovider.h b/toolsrc/include/vcpkg/portfileprovider.h index 4e3f6a35ce3bf3..123733f20f7528 100644 --- a/toolsrc/include/vcpkg/portfileprovider.h +++ b/toolsrc/include/vcpkg/portfileprovider.h @@ -49,7 +49,8 @@ namespace vcpkg::PortFileProvider private: const vcpkg::VcpkgPaths& paths; - // mutable std::unordered_map control_cache; + // mutable std::unordered_map + // control_cache; mutable std::unordered_map> versions_cache; mutable std::unordered_map git_tree_cache; }; diff --git a/toolsrc/include/vcpkg/versions.h b/toolsrc/include/vcpkg/versions.h index e3e14f8d7aef19..0c1844962252db 100644 --- a/toolsrc/include/vcpkg/versions.h +++ b/toolsrc/include/vcpkg/versions.h @@ -18,36 +18,20 @@ namespace vcpkg::Versions const VersionT version; const Scheme scheme; - VersionSpec(const std::string& package_spec, const VersionT& version, Scheme scheme) - : package_spec(package_spec), version(version), scheme(scheme) - { - } - - VersionSpec(const std::string& package_spec, const std::string& version_string, int port_version, Scheme scheme) - : package_spec(package_spec), version(version_string, port_version), scheme(scheme) - { - } + VersionSpec(const std::string& package_spec, const VersionT& version, Scheme scheme); - friend bool operator==(const VersionSpec& lhs, const VersionSpec& rhs) - { - return std::tie(lhs.package_spec, lhs.version, lhs.scheme) == - std::tie(rhs.package_spec, rhs.version, rhs.scheme); - } + VersionSpec(const std::string& package_spec, + const std::string& version_string, + int port_version, + Scheme scheme); - friend bool operator!=(const VersionSpec& lhs, const VersionSpec& rhs) { return !(lhs == rhs); } + friend bool operator==(const VersionSpec& lhs, const VersionSpec& rhs); + friend bool operator!=(const VersionSpec& lhs, const VersionSpec& rhs); }; struct VersionSpecHasher { - std::size_t operator()(const VersionSpec& key) const - { - using std::hash; - using std::size_t; - using std::string; - - return ((hash()(key.package_spec) ^ (hash()(key.version.to_string()) << 1)) >> 1) ^ - (hash()(static_cast(key.scheme)) << 1); - } + std::size_t operator()(const VersionSpec& key) const; }; struct Constraint @@ -62,11 +46,7 @@ namespace vcpkg::Versions const VersionSpec version_spec; const Type type; - Constraint(const std::string& package_spec, const VersionT& version, Scheme scheme, Type type) - : version_spec(package_spec, version, scheme), type(type) - { - } - - Constraint(const VersionSpec& version_spec, Type type) : version_spec(version_spec), type(type) { } + Constraint(const VersionSpec& version_spec, Type type); + Constraint(const std::string& package_spec, const VersionT& version, Scheme scheme, Type type); }; } \ No newline at end of file diff --git a/toolsrc/src/vcpkg/portfileprovider.cpp b/toolsrc/src/vcpkg/portfileprovider.cpp index c48bd8f4e94ee3..4d9f39deaae0b4 100644 --- a/toolsrc/src/vcpkg/portfileprovider.cpp +++ b/toolsrc/src/vcpkg/portfileprovider.cpp @@ -244,10 +244,10 @@ namespace vcpkg::PortFileProvider const std::vector& VersionedPortfileProvider::get_port_versions( const std::string& package_spec) const { - auto cache_hit = versions_cache.find(package_spec); - if (cache_hit != versions_cache.end()) + auto cache_it = versions_cache.find(package_spec); + if (cache_it != versions_cache.end()) { - return cache_hit->second; + return cache_it->second; } auto db_path = paths.root / "port_versions" / Strings::concat(package_spec, ".db.json"); @@ -286,24 +286,24 @@ namespace vcpkg::PortFileProvider return versions_cache.at(package_spec); } - //ExpectedS VersionedPortfileProvider::get_control_file( + // ExpectedS VersionedPortfileProvider::get_control_file( // const vcpkg::Versions::VersionSpec& version_spec) const //{ - // auto cache_hit = control_cache.find(version_spec); - // if (cache_hit != control_cache.end()) + // auto cache_it = control_cache.find(version_spec); + // if (cache_it != control_cache.end()) // { - // return cache_hit->second; + // return cache_it->second; // } // // 1. Load database for port - // auto git_tree_cache_hit = git_tree_cache.find(version_spec); - // if (git_tree_cache_hit == git_tree_cache.end()) + // auto git_tree_cache_it = git_tree_cache.find(version_spec); + // if (git_tree_cache_it == git_tree_cache.end()) // { // // TODO: Try to load port from database // Checks::exit_fail(VCPKG_LINE_INFO); // } - // const std::string git_tree = git_tree_cache_hit->second; + // const std::string git_tree = git_tree_cache_it->second; // // 2. Checkout port version // // 3. Try load port diff --git a/toolsrc/src/vcpkg/versions.cpp b/toolsrc/src/vcpkg/versions.cpp new file mode 100644 index 00000000000000..33e400521afa37 --- /dev/null +++ b/toolsrc/src/vcpkg/versions.cpp @@ -0,0 +1,42 @@ +#include + +namespace vcpkg::Versions +{ + VersionSpec::VersionSpec(const std::string& package_spec, const VersionT& version, Scheme scheme) + : package_spec(package_spec), version(version), scheme(scheme) + { + } + + VersionSpec::VersionSpec(const std::string& package_spec, + const std::string& version_string, + int port_version, + Scheme scheme) + : package_spec(package_spec), version(version_string, port_version), scheme(scheme) + { + } + + bool operator==(const VersionSpec& lhs, const VersionSpec& rhs) + { + return std::tie(lhs.package_spec, lhs.version, lhs.scheme) == + std::tie(rhs.package_spec, rhs.version, rhs.scheme); + } + + bool operator!=(const VersionSpec& lhs, const VersionSpec& rhs) { return !(lhs == rhs); } + + std::size_t VersionSpecHasher::operator()(const VersionSpec& key) const + { + using std::hash; + using std::size_t; + using std::string; + + return ((hash()(key.package_spec) ^ (hash()(key.version.to_string()) << 1)) >> 1) ^ + (hash()(static_cast(key.scheme)) << 1); + } + + Constraint::Constraint(const std::string& package_spec, const VersionT& version, Scheme scheme, Type type) + : version_spec(package_spec, version, scheme), type(type) + { + } + + Constraint::Constraint(const VersionSpec& version_spec, Type type) : version_spec(version_spec), type(type) { } +} \ No newline at end of file diff --git a/toolsrc/windows-bootstrap/vcpkg.vcxproj b/toolsrc/windows-bootstrap/vcpkg.vcxproj index 5f897bc6730375..7c8b33d5ac6a27 100644 --- a/toolsrc/windows-bootstrap/vcpkg.vcxproj +++ b/toolsrc/windows-bootstrap/vcpkg.vcxproj @@ -355,6 +355,7 @@ + From f3b82ecf86fcd92a15bac0bc93b47953aef2119e Mon Sep 17 00:00:00 2001 From: Victor Romero Date: Tue, 20 Oct 2020 11:59:45 -0700 Subject: [PATCH 03/42] Provider inherits ResourceBase --- toolsrc/include/vcpkg/portfileprovider.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/toolsrc/include/vcpkg/portfileprovider.h b/toolsrc/include/vcpkg/portfileprovider.h index 123733f20f7528..2f3eebba92f90f 100644 --- a/toolsrc/include/vcpkg/portfileprovider.h +++ b/toolsrc/include/vcpkg/portfileprovider.h @@ -38,7 +38,7 @@ namespace vcpkg::PortFileProvider mutable std::unordered_map cache; }; - struct VersionedPortfileProvider + struct VersionedPortfileProvider : Util::ResourceBase { explicit VersionedPortfileProvider(const vcpkg::VcpkgPaths& paths); @@ -54,5 +54,4 @@ namespace vcpkg::PortFileProvider mutable std::unordered_map> versions_cache; mutable std::unordered_map git_tree_cache; }; - } From 75d5239962cd52c25aa5526aefe15a98ca747bee Mon Sep 17 00:00:00 2001 From: Victor Romero Date: Tue, 20 Oct 2020 23:25:49 -0700 Subject: [PATCH 04/42] Correct versions JSON file location --- toolsrc/src/vcpkg/portfileprovider.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/toolsrc/src/vcpkg/portfileprovider.cpp b/toolsrc/src/vcpkg/portfileprovider.cpp index 4d9f39deaae0b4..c44b73116b4b5f 100644 --- a/toolsrc/src/vcpkg/portfileprovider.cpp +++ b/toolsrc/src/vcpkg/portfileprovider.cpp @@ -250,7 +250,7 @@ namespace vcpkg::PortFileProvider return cache_it->second; } - auto db_path = paths.root / "port_versions" / Strings::concat(package_spec, ".db.json"); + auto db_path = paths.root / "port_versions" / package_spec.substr(0, 1) / Strings::concat(package_spec, ".json"); auto& fs = paths.get_filesystem(); if (!fs.exists(db_path)) { From e9f7bbda5f69bae3c6a90efe8806a3e516a21072 Mon Sep 17 00:00:00 2001 From: Victor Romero Date: Wed, 21 Oct 2020 09:50:12 -0700 Subject: [PATCH 05/42] Fix formatting --- toolsrc/include/vcpkg/portfileprovider.h | 8 ++++---- toolsrc/src/vcpkg/portfileprovider.cpp | 6 +++++- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/toolsrc/include/vcpkg/portfileprovider.h b/toolsrc/include/vcpkg/portfileprovider.h index 2f3eebba92f90f..ab8739e823982c 100644 --- a/toolsrc/include/vcpkg/portfileprovider.h +++ b/toolsrc/include/vcpkg/portfileprovider.h @@ -44,13 +44,13 @@ namespace vcpkg::PortFileProvider const std::vector& get_port_versions(const std::string& port_spec) const; - // ExpectedS get_control_file( - // const vcpkg::Versions::VersionSpec& version_spec) const; + /*ExpectedS get_control_file( + const vcpkg::Versions::VersionSpec& version_spec) const;*/ private: const vcpkg::VcpkgPaths& paths; - // mutable std::unordered_map - // control_cache; + /*mutable std::unordered_map + control_cache;*/ mutable std::unordered_map> versions_cache; mutable std::unordered_map git_tree_cache; }; diff --git a/toolsrc/src/vcpkg/portfileprovider.cpp b/toolsrc/src/vcpkg/portfileprovider.cpp index c44b73116b4b5f..c72ab84cc8214f 100644 --- a/toolsrc/src/vcpkg/portfileprovider.cpp +++ b/toolsrc/src/vcpkg/portfileprovider.cpp @@ -250,7 +250,8 @@ namespace vcpkg::PortFileProvider return cache_it->second; } - auto db_path = paths.root / "port_versions" / package_spec.substr(0, 1) / Strings::concat(package_spec, ".json"); + auto db_path = + paths.root / "port_versions" / package_spec.substr(0, 1) / Strings::concat(package_spec, ".json"); auto& fs = paths.get_filesystem(); if (!fs.exists(db_path)) { @@ -306,7 +307,10 @@ namespace vcpkg::PortFileProvider // const std::string git_tree = git_tree_cache_it->second; // // 2. Checkout port version + // // paths.checkout_port_object(version_spec.package_spec, git_tree); // // 3. Try load port // // 4. Return + + // return std::string("Not yet implemented"); //} } From f542bd186833cb793c71ddb21c1b2b7b43f441d3 Mon Sep 17 00:00:00 2001 From: Victor Romero Date: Wed, 21 Oct 2020 14:56:26 -0700 Subject: [PATCH 06/42] Fix formatting --- toolsrc/src/vcpkg/portfileprovider.cpp | 28 +++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/toolsrc/src/vcpkg/portfileprovider.cpp b/toolsrc/src/vcpkg/portfileprovider.cpp index c72ab84cc8214f..503b9754ddfb95 100644 --- a/toolsrc/src/vcpkg/portfileprovider.cpp +++ b/toolsrc/src/vcpkg/portfileprovider.cpp @@ -241,6 +241,25 @@ namespace vcpkg::PortFileProvider Checks::unreachable(VCPKG_LINE_INFO); } + namespace + { + Optional get_versions_json_path(const VcpkgPaths& paths, const std::string& port_name) + { + // TODO: Get correct `port_versions` path for the registry the port belongs to, pseudocode below: + // auto registry = paths.get_registry_for_port(port_name); + // auto port_versions_dir_path = registry.get_port_versions_path(); + const auto port_versions_dir_path = paths.root / "port_versions"; + const auto subpath = Strings::concat(port_name[0], "-/", port_name, ".json"); + const auto json_path = port_versions_dir_path / subpath; + if (paths.get_filesystem().exists(json_path)) + { + return json_path; + } + return nullopt; + } + + } + const std::vector& VersionedPortfileProvider::get_port_versions( const std::string& package_spec) const { @@ -250,16 +269,15 @@ namespace vcpkg::PortFileProvider return cache_it->second; } - auto db_path = - paths.root / "port_versions" / package_spec.substr(0, 1) / Strings::concat(package_spec, ".json"); - auto& fs = paths.get_filesystem(); - if (!fs.exists(db_path)) + auto maybe_versions_json_path = get_versions_json_path(paths, package_spec); + if (!maybe_versions_json_path.has_value()) { // TODO: Handle db version not existing Checks::exit_fail(VCPKG_LINE_INFO); } + auto versions_json_path = maybe_versions_json_path.value_or_exit(VCPKG_LINE_INFO); - auto versions_json = Json::parse_file(VCPKG_LINE_INFO, paths.get_filesystem(), db_path); + auto versions_json = Json::parse_file(VCPKG_LINE_INFO, paths.get_filesystem(), versions_json_path); // NOTE: A dictionary would be the best way to store this, for now we use a vector if (versions_json.first.is_object()) From 3e89145f171c89c0aab5488d04ebcdda5b00d322 Mon Sep 17 00:00:00 2001 From: Victor Romero Date: Tue, 3 Nov 2020 09:46:21 -0800 Subject: [PATCH 07/42] Fix include in versions.h --- toolsrc/include/vcpkg/versions.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/toolsrc/include/vcpkg/versions.h b/toolsrc/include/vcpkg/versions.h index e0949e612d41cd..0c1844962252db 100644 --- a/toolsrc/include/vcpkg/versions.h +++ b/toolsrc/include/vcpkg/versions.h @@ -1,13 +1,15 @@ #pragma once +#include + namespace vcpkg::Versions { enum class Scheme { - String, Relaxed, Semver, Date, + String }; struct VersionSpec From 7a5f7f8d734860f4b4b30b434482bdf4cb6ac7dc Mon Sep 17 00:00:00 2001 From: Victor Romero Date: Tue, 10 Nov 2020 20:34:06 +0000 Subject: [PATCH 08/42] Fetch port versions using git tree object --- .gitignore | 2 + scripts/generatePortVersionsDb.py | 2 +- toolsrc/include/vcpkg/portfileprovider.h | 20 +- toolsrc/src/vcpkg/commands.porthistory.cpp | 9 + toolsrc/src/vcpkg/portfileprovider.cpp | 227 +++++++++++++++------ 5 files changed, 188 insertions(+), 72 deletions(-) diff --git a/.gitignore b/.gitignore index ed388f4a1c7a48..d12fd1363f3bab 100644 --- a/.gitignore +++ b/.gitignore @@ -295,6 +295,8 @@ __pycache__/ /toolsrc/windows-bootstrap/msbuild.x86.release/ /toolsrc/windows-bootstrap/msbuild.x64.debug/ /toolsrc/windows-bootstrap/msbuild.x64.release/ +#ignore db +/port_versions/ #ignore custom triplets /triplets/* #add vcpkg-designed triplets back in diff --git a/scripts/generatePortVersionsDb.py b/scripts/generatePortVersionsDb.py index cefd61e1c9e912..028f7f387b9caf 100644 --- a/scripts/generatePortVersionsDb.py +++ b/scripts/generatePortVersionsDb.py @@ -14,7 +14,7 @@ def get_current_git_ref(): - output = subprocess.run(['git.exe', '-C', SCRIPT_DIRECTORY, 'rev-parse', '--verify', 'HEAD'], + output = subprocess.run(['git', '-C', SCRIPT_DIRECTORY, 'rev-parse', '--verify', 'HEAD'], capture_output=True, encoding='utf-8') if output.returncode == 0: diff --git a/toolsrc/include/vcpkg/portfileprovider.h b/toolsrc/include/vcpkg/portfileprovider.h index ab8739e823982c..3aaef5d0737060 100644 --- a/toolsrc/include/vcpkg/portfileprovider.h +++ b/toolsrc/include/vcpkg/portfileprovider.h @@ -44,14 +44,26 @@ namespace vcpkg::PortFileProvider const std::vector& get_port_versions(const std::string& port_spec) const; - /*ExpectedS get_control_file( - const vcpkg::Versions::VersionSpec& version_spec) const;*/ + ExpectedS get_control_file( + const vcpkg::Versions::VersionSpec& version_spec) const; private: const vcpkg::VcpkgPaths& paths; - /*mutable std::unordered_map - control_cache;*/ + mutable std::unordered_map + control_cache; mutable std::unordered_map> versions_cache; mutable std::unordered_map git_tree_cache; }; + + // struct BaselineProvider : Util::ResourceBase + // { + // explicit BaselineProvider(const vcpkg::VcpkgPaths& paths); + + // vcpkg::Versions::VersionSpec get_baseline_version(const std::string& baseline, + // const std::string& port_name) const; + + // private: + // const vcpkg::VcpkgPaths& paths; + // mutable std::map baseline_versions; + // }; } diff --git a/toolsrc/src/vcpkg/commands.porthistory.cpp b/toolsrc/src/vcpkg/commands.porthistory.cpp index 045562136bc9b9..0237e4203ac2a3 100644 --- a/toolsrc/src/vcpkg/commands.porthistory.cpp +++ b/toolsrc/src/vcpkg/commands.porthistory.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -220,6 +221,14 @@ namespace vcpkg::Commands::PortHistory { const ParsedArguments options = args.parse_arguments(COMMAND_STRUCTURE); + vcpkg::PortFileProvider::VersionedPortfileProvider provider(paths); + auto port_versions = provider.get_port_versions("rapidjson"); + if (!port_versions.empty()) + { + Versions::VersionSpec version = port_versions.front(); + auto maybe_scf = provider.get_control_file(version); + } + std::string port_name = args.command_arguments.at(0); std::vector versions = read_versions_from_log(paths, port_name); diff --git a/toolsrc/src/vcpkg/portfileprovider.cpp b/toolsrc/src/vcpkg/portfileprovider.cpp index 886b0ae71b3a26..ef0d89d7e19d59 100644 --- a/toolsrc/src/vcpkg/portfileprovider.cpp +++ b/toolsrc/src/vcpkg/portfileprovider.cpp @@ -1,13 +1,117 @@ #include +#include #include #include #include #include #include +#include #include #include +using namespace vcpkg; + +namespace +{ + const System::ExitCodeAndOutput run_git_command(const VcpkgPaths& paths, + const fs::path& dot_git_directory, + const fs::path& working_directory, + const std::string& cmd) + { + const fs::path& git_exe = paths.get_tool_exe(Tools::GIT); + + System::CmdLineBuilder builder; + builder.path_arg(git_exe) + .string_arg(Strings::concat("--git-dir=", fs::u8string(dot_git_directory))) + .string_arg(Strings::concat("--work-tree=", fs::u8string(working_directory))); + const std::string full_cmd = Strings::concat(builder.extract(), " ", cmd); + + const auto output = System::cmd_execute_and_capture_output(full_cmd); + return output; + } + + fs::path fetch_port(const VcpkgPaths& paths, const std::string& port_name, const std::string& git_tree) + { + (void)port_name; + const auto local_repo = paths.root; + const auto dot_git_dir = paths.buildtrees / "versioning_tmp" / ".git"; + const auto working_dir = paths.buildtrees / "versioning_tmp" / "versions" / git_tree; + + auto& fs = paths.get_filesystem(); + + if (!fs.exists(working_dir / "CONTROL") && !fs.exists(working_dir / "vcpkg.json")) + { + if (fs.exists(working_dir)) + { + fs.remove_all(working_dir, VCPKG_LINE_INFO); + } + + if (fs.exists(dot_git_dir)) + { + fs.remove_all(dot_git_dir, VCPKG_LINE_INFO); + } + + // git --git-dir={dot_git_dir} --work-tree={working_dir} clone --no-checkout --local {vcpkg_root} + // {dot_git_dir} {working_dir} + System::CmdLineBuilder clone_cmd_builder; + clone_cmd_builder.string_arg("clone") + .string_arg("--no-checkout") + .string_arg("--local") + .path_arg(local_repo) + .path_arg(dot_git_dir); + const auto output = run_git_command(paths, dot_git_dir, working_dir, clone_cmd_builder.extract()); + Checks::check_exit(VCPKG_LINE_INFO, output.exit_code == 0, "Failed to clone temporary vcpkg instance"); + + // git checkout {tree_object} . + System::CmdLineBuilder checkout_cmd_builder; + checkout_cmd_builder.string_arg("checkout").string_arg(git_tree).string_arg("."); + const auto git_cmd = checkout_cmd_builder.extract(); + const auto checkout_output = run_git_command(paths, dot_git_dir, working_dir, git_cmd); + Checks::check_exit( + VCPKG_LINE_INFO, checkout_output.exit_code == 0, "Failed to checkout %s:%s", port_name, git_tree); + } + return working_dir; + } + + vcpkg::Versions::VersionSpec extract_version_spec(const std::string& package_spec, const Json::Object& version_obj) + { + static const std::map version_schemes{ + {Versions::Scheme::Relaxed, "version"}, + {Versions::Scheme::Semver, "version-semver"}, + {Versions::Scheme::Date, "version-date"}, + {Versions::Scheme::String, "version-string"}}; + + const auto port_version = static_cast(version_obj.get("port-version")->integer()); + + for (auto&& kv_pair : version_schemes) + { + if (const auto version_string = version_obj.get(kv_pair.second)) + { + return Versions::VersionSpec( + package_spec, version_string->string().to_string(), port_version, kv_pair.first); + } + } + + Checks::unreachable(VCPKG_LINE_INFO); + } + + Optional get_versions_json_path(const VcpkgPaths& paths, const std::string& port_name) + { + // TODO: Get correct `port_versions` path for the registry the port belongs to, pseudocode below: + // auto registry = paths.get_registry_for_port(port_name); + // auto port_versions_dir_path = registry.get_port_versions_path(); + const auto port_versions_dir_path = paths.root / "port_versions"; + const auto subpath = Strings::concat(port_name[0], "-/", port_name, ".json"); + const auto json_path = port_versions_dir_path / subpath; + if (paths.get_filesystem().exists(json_path)) + { + return json_path; + } + return nullopt; + } +} + namespace vcpkg::PortFileProvider { MapPortFileProvider::MapPortFileProvider(const std::unordered_map& map) @@ -246,47 +350,6 @@ namespace vcpkg::PortFileProvider VersionedPortfileProvider::VersionedPortfileProvider(const vcpkg::VcpkgPaths& paths) : paths(paths) { } - vcpkg::Versions::VersionSpec extract_version_spec(const std::string& package_spec, const Json::Object& version_obj) - { - static const std::map version_schemes{ - {Versions::Scheme::Relaxed, "version"}, - {Versions::Scheme::Semver, "version-semver"}, - {Versions::Scheme::Date, "version-date"}, - {Versions::Scheme::String, "version-string"}}; - - const auto port_version = static_cast(version_obj.get("port-version")->integer()); - - for (auto&& kv_pair : version_schemes) - { - if (const auto version_string = version_obj.get(kv_pair.second)) - { - return Versions::VersionSpec( - package_spec, version_string->string().to_string(), port_version, kv_pair.first); - } - } - - Checks::unreachable(VCPKG_LINE_INFO); - } - - namespace - { - Optional get_versions_json_path(const VcpkgPaths& paths, const std::string& port_name) - { - // TODO: Get correct `port_versions` path for the registry the port belongs to, pseudocode below: - // auto registry = paths.get_registry_for_port(port_name); - // auto port_versions_dir_path = registry.get_port_versions_path(); - const auto port_versions_dir_path = paths.root / "port_versions"; - const auto subpath = Strings::concat(port_name[0], "-/", port_name, ".json"); - const auto json_path = port_versions_dir_path / subpath; - if (paths.get_filesystem().exists(json_path)) - { - return json_path; - } - return nullopt; - } - - } - const std::vector& VersionedPortfileProvider::get_port_versions( const std::string& package_spec) const { @@ -332,30 +395,60 @@ namespace vcpkg::PortFileProvider return versions_cache.at(package_spec); } - // ExpectedS VersionedPortfileProvider::get_control_file( - // const vcpkg::Versions::VersionSpec& version_spec) const - //{ - // auto cache_it = control_cache.find(version_spec); - // if (cache_it != control_cache.end()) - // { - // return cache_it->second; - // } - - // // 1. Load database for port - // auto git_tree_cache_it = git_tree_cache.find(version_spec); - // if (git_tree_cache_it == git_tree_cache.end()) - // { - // // TODO: Try to load port from database - // Checks::exit_fail(VCPKG_LINE_INFO); - // } - - // const std::string git_tree = git_tree_cache_it->second; - - // // 2. Checkout port version - // // paths.checkout_port_object(version_spec.package_spec, git_tree); - // // 3. Try load port - // // 4. Return - - // return std::string("Not yet implemented"); - //} + ExpectedS VersionedPortfileProvider::get_control_file( + const vcpkg::Versions::VersionSpec& version_spec) const + { + auto cache_it = control_cache.find(version_spec); + if (cache_it != control_cache.end()) + { + return cache_it->second; + } + + // 1. Load database for port + auto git_tree_cache_it = git_tree_cache.find(version_spec); + if (git_tree_cache_it == git_tree_cache.end()) + { + // TODO: Try to load port from database + Checks::exit_fail(VCPKG_LINE_INFO); + } + + const std::string git_tree = git_tree_cache_it->second; + const auto port_directory = fetch_port(paths, version_spec.package_spec, git_tree); + + auto maybe_control_file = Paragraphs::try_load_port(paths.get_filesystem(), port_directory); + if (auto scf = maybe_control_file.get()) + { + if (scf->get()->core_paragraph->name == version_spec.package_spec) + { + return SourceControlFileLocation{std::move(*scf), std::move(port_directory)}; + } + Checks::exit_with_message(VCPKG_LINE_INFO, + "Error: Failed to load port from %s: names did not match: '%s' != '%s'", + fs::u8string(port_directory), + version_spec.package_spec, + scf->get()->core_paragraph->name); + } + + vcpkg::print_error_message(maybe_control_file.error()); + Checks::exit_with_message(VCPKG_LINE_INFO, + "Error: Failed to load port %s from %s", + version_spec.package_spec, + fs::u8string(port_directory)); + } + + // BaselineProvider::BaselineProvider(const VcpkgPaths& paths) : paths(paths) { } + + // Versions::VersionSpec BaselineProvider::get_baseline_version(const std::string& baseline, + // const std::string& port_name) const + // { + // const auto key = Strings::concat(port_name, "@", baseline); + // auto it = baseline_versions.find(key); + // if (it != baseline_versions.end()) + // { + // return it->second; + // } + + // // Search in DB + // auto fetch_baseline_file = [](const std::string& baseline) -> fs::path { paths.checkout_file() }; + // } } From ea6639ea8024756dbd3ae3051edaf614d76c8a50 Mon Sep 17 00:00:00 2001 From: Victor Romero Date: Tue, 10 Nov 2020 20:40:23 +0000 Subject: [PATCH 09/42] Undo changes to x-history --- toolsrc/src/vcpkg/commands.porthistory.cpp | 9 --------- 1 file changed, 9 deletions(-) diff --git a/toolsrc/src/vcpkg/commands.porthistory.cpp b/toolsrc/src/vcpkg/commands.porthistory.cpp index 0237e4203ac2a3..045562136bc9b9 100644 --- a/toolsrc/src/vcpkg/commands.porthistory.cpp +++ b/toolsrc/src/vcpkg/commands.porthistory.cpp @@ -6,7 +6,6 @@ #include #include #include -#include #include #include #include @@ -221,14 +220,6 @@ namespace vcpkg::Commands::PortHistory { const ParsedArguments options = args.parse_arguments(COMMAND_STRUCTURE); - vcpkg::PortFileProvider::VersionedPortfileProvider provider(paths); - auto port_versions = provider.get_port_versions("rapidjson"); - if (!port_versions.empty()) - { - Versions::VersionSpec version = port_versions.front(); - auto maybe_scf = provider.get_control_file(version); - } - std::string port_name = args.command_arguments.at(0); std::vector versions = read_versions_from_log(paths, port_name); From f52125b3db333430e9b4a2b3e7b88a7e351a5c44 Mon Sep 17 00:00:00 2001 From: Victor Romero Date: Tue, 10 Nov 2020 12:42:26 -0800 Subject: [PATCH 10/42] Remove unnecesary moves Co-authored-by: nicole mazzuca --- toolsrc/src/vcpkg/portfileprovider.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/toolsrc/src/vcpkg/portfileprovider.cpp b/toolsrc/src/vcpkg/portfileprovider.cpp index ef0d89d7e19d59..c729ce65b6f7db 100644 --- a/toolsrc/src/vcpkg/portfileprovider.cpp +++ b/toolsrc/src/vcpkg/portfileprovider.cpp @@ -372,21 +372,21 @@ namespace vcpkg::PortFileProvider // NOTE: A dictionary would be the best way to store this, for now we use a vector if (versions_json.first.is_object()) { - auto versions_object = std::move(versions_json.first.object()); + const auto& versions_object = versions_json.first.object(); auto maybe_versions_array = versions_object.get("versions"); if (maybe_versions_array && maybe_versions_array->is_array()) { - auto versions_array = std::move(maybe_versions_array->array()); - for (auto&& version : versions_array) + const auto& versions_array = maybe_versions_array->array(); + for (const auto& version : versions_array) { - auto version_obj = std::move(version.object()); + const auto& version_obj = version.object(); Versions::VersionSpec spec = extract_version_spec(package_spec, version_obj); auto& package_versions = versions_cache[spec.package_spec]; package_versions.push_back(spec); - auto&& git_tree = version_obj.get("git-tree")->string().to_string(); + auto git_tree = version_obj.get("git-tree")->string().to_string(); git_tree_cache.emplace(std::move(spec), git_tree); } } From ba655a2cf58306660fd7018200ef21ba33622783 Mon Sep 17 00:00:00 2001 From: Victor Romero Date: Thu, 12 Nov 2020 20:25:22 +0000 Subject: [PATCH 11/42] Extract Git manipulation code --- toolsrc/include/vcpkg/fwd/system.process.h | 6 ++ toolsrc/include/vcpkg/vcpkgpaths.h | 8 +++ toolsrc/src/vcpkg/portfileprovider.cpp | 66 ++-------------------- toolsrc/src/vcpkg/vcpkgpaths.cpp | 64 +++++++++++++++++++++ 4 files changed, 82 insertions(+), 62 deletions(-) create mode 100644 toolsrc/include/vcpkg/fwd/system.process.h diff --git a/toolsrc/include/vcpkg/fwd/system.process.h b/toolsrc/include/vcpkg/fwd/system.process.h new file mode 100644 index 00000000000000..6d8363d6b4fc28 --- /dev/null +++ b/toolsrc/include/vcpkg/fwd/system.process.h @@ -0,0 +1,6 @@ +#pragma once + +namespace vcpkg::System +{ + struct ExitCodeAndOutput; +} \ No newline at end of file diff --git a/toolsrc/include/vcpkg/vcpkgpaths.h b/toolsrc/include/vcpkg/vcpkgpaths.h index def874e7c33ea0..addefd6f4f5cc6 100644 --- a/toolsrc/include/vcpkg/vcpkgpaths.h +++ b/toolsrc/include/vcpkg/vcpkgpaths.h @@ -4,6 +4,7 @@ #include #include +#include #include #include @@ -107,6 +108,9 @@ namespace vcpkg const fs::path& get_tool_exe(const std::string& tool) const; const std::string& get_tool_version(const std::string& tool) const; + // Git manipulation + fs::path git_checkout_port(const std::string& port_name, const std::string& git_tree) const; + Optional get_manifest() const; Optional get_manifest_path() const; const Configuration& get_configuration() const; @@ -133,5 +137,9 @@ namespace vcpkg private: std::unique_ptr m_pimpl; + + System::ExitCodeAndOutput run_git_command(const std::string& dot_git_dir, + const std::string& work_tree, + const std::string& cmd_line) const; }; } diff --git a/toolsrc/src/vcpkg/portfileprovider.cpp b/toolsrc/src/vcpkg/portfileprovider.cpp index 4aadc014b64c53..7764f762a8a1f6 100644 --- a/toolsrc/src/vcpkg/portfileprovider.cpp +++ b/toolsrc/src/vcpkg/portfileprovider.cpp @@ -14,66 +14,6 @@ using namespace vcpkg; namespace { - const System::ExitCodeAndOutput run_git_command(const VcpkgPaths& paths, - const fs::path& dot_git_directory, - const fs::path& working_directory, - const std::string& cmd) - { - const fs::path& git_exe = paths.get_tool_exe(Tools::GIT); - - System::CmdLineBuilder builder; - builder.path_arg(git_exe) - .string_arg(Strings::concat("--git-dir=", fs::u8string(dot_git_directory))) - .string_arg(Strings::concat("--work-tree=", fs::u8string(working_directory))); - const std::string full_cmd = Strings::concat(builder.extract(), " ", cmd); - - const auto output = System::cmd_execute_and_capture_output(full_cmd); - return output; - } - - fs::path fetch_port(const VcpkgPaths& paths, const std::string& port_name, const std::string& git_tree) - { - (void)port_name; - const auto local_repo = paths.root; - const auto dot_git_dir = paths.buildtrees / "versioning_tmp" / ".git"; - const auto working_dir = paths.buildtrees / "versioning_tmp" / "versions" / git_tree; - - auto& fs = paths.get_filesystem(); - - if (!fs.exists(working_dir / "CONTROL") && !fs.exists(working_dir / "vcpkg.json")) - { - if (fs.exists(working_dir)) - { - fs.remove_all(working_dir, VCPKG_LINE_INFO); - } - - if (fs.exists(dot_git_dir)) - { - fs.remove_all(dot_git_dir, VCPKG_LINE_INFO); - } - - // git --git-dir={dot_git_dir} --work-tree={working_dir} clone --no-checkout --local {vcpkg_root} - // {dot_git_dir} {working_dir} - System::CmdLineBuilder clone_cmd_builder; - clone_cmd_builder.string_arg("clone") - .string_arg("--no-checkout") - .string_arg("--local") - .path_arg(local_repo) - .path_arg(dot_git_dir); - const auto output = run_git_command(paths, dot_git_dir, working_dir, clone_cmd_builder.extract()); - Checks::check_exit(VCPKG_LINE_INFO, output.exit_code == 0, "Failed to clone temporary vcpkg instance"); - - // git checkout {tree_object} . - System::CmdLineBuilder checkout_cmd_builder; - checkout_cmd_builder.string_arg("checkout").string_arg(git_tree).string_arg("."); - const auto git_cmd = checkout_cmd_builder.extract(); - const auto checkout_output = run_git_command(paths, dot_git_dir, working_dir, git_cmd); - Checks::check_exit( - VCPKG_LINE_INFO, checkout_output.exit_code == 0, "Failed to checkout %s:%s", port_name, git_tree); - } - return working_dir; - } - vcpkg::Versions::VersionSpec extract_version_spec(const std::string& package_spec, const Json::Object& version_obj) { static const std::map version_schemes{ @@ -424,7 +364,9 @@ namespace vcpkg::PortFileProvider return cache_it->second; } - // 1. Load database for port + // Pre-populate cache. + get_port_versions(version_spec.package_spec); + auto git_tree_cache_it = git_tree_cache.find(version_spec); if (git_tree_cache_it == git_tree_cache.end()) { @@ -433,7 +375,7 @@ namespace vcpkg::PortFileProvider } const std::string git_tree = git_tree_cache_it->second; - const auto port_directory = fetch_port(paths, version_spec.package_spec, git_tree); + const auto port_directory = paths.git_checkout_port(version_spec.package_spec, git_tree); auto maybe_control_file = Paragraphs::try_load_port(paths.get_filesystem(), port_directory); if (auto scf = maybe_control_file.get()) diff --git a/toolsrc/src/vcpkg/vcpkgpaths.cpp b/toolsrc/src/vcpkg/vcpkgpaths.cpp index cd438fef3beef4..b5c502e45567d7 100644 --- a/toolsrc/src/vcpkg/vcpkgpaths.cpp +++ b/toolsrc/src/vcpkg/vcpkgpaths.cpp @@ -451,6 +451,70 @@ If you wish to silence this error and use classic mode, you can: return m_pimpl->m_tool_cache->get_tool_version(*this, tool); } + System::ExitCodeAndOutput VcpkgPaths::run_git_command(const std::string& dot_git_dir, + const std::string& work_tree, + const std::string& cmd_line) const + { + const fs::path& git_exe = get_tool_exe(Tools::GIT); + + System::CmdLineBuilder builder; + builder.path_arg(git_exe) + .string_arg(Strings::concat("--git-dir=", fs::u8string(dot_git_dir))) + .string_arg(Strings::concat("--work-tree=", fs::u8string(work_tree))); + const std::string full_cmd = Strings::concat(builder.extract(), " ", cmd_line); + return System::cmd_execute_and_capture_output(full_cmd); + } + + fs::path VcpkgPaths::git_checkout_port(const std::string& port_name, const std::string& git_tree) const + { + /* Clone a new vcpkg repository instance using the local instance as base. + * + * The `--git-dir` directory will store all the Git files, + * and the `--work-tree` is the directory where checked out files will be stored. + * + * Since we are checking a git tree object, all files will be checked out to the root of `work-tree`. + * Because of that, it makes sense to use the git hash as the name for the directory. + */ + const auto local_repo = this->root; + // TODO: Decide final location for these two + const auto dot_git_dir = this->buildtrees / "versioning_tmp" / ".git"; + const auto working_dir = this->buildtrees / "versioning_tmp" / "versions" / port_name / git_tree; + + auto& fs = get_filesystem(); + if (!fs.exists(working_dir / "CONTROL") && !fs.exists(working_dir / "vcpkg.json")) + { + if (fs.exists(working_dir)) + { + fs.remove_all(working_dir, VCPKG_LINE_INFO); + } + + if (fs.exists(dot_git_dir)) + { + fs.remove_all(dot_git_dir, VCPKG_LINE_INFO); + } + + // All git commands are run with: --git-dir={dot_git_dir} --work-tree={working_dir} + // git clone --no-checkout --local {vcpkg_root} {dot_git_dir} + System::CmdLineBuilder clone_cmd_builder; + clone_cmd_builder.string_arg("clone") + .string_arg("--no-checkout") + .string_arg("--local") + .path_arg(local_repo) + .path_arg(dot_git_dir); + const auto output = run_git_command(dot_git_dir, working_dir, clone_cmd_builder.extract()); + Checks::check_exit(VCPKG_LINE_INFO, output.exit_code == 0, "Failed to clone temporary vcpkg instance"); + + // git checkout {tree_object} . + System::CmdLineBuilder checkout_cmd_builder; + checkout_cmd_builder.string_arg("checkout").string_arg(git_tree).string_arg("."); + const auto git_cmd = checkout_cmd_builder.extract(); + const auto checkout_output = run_git_command(dot_git_dir, working_dir, git_cmd); + Checks::check_exit( + VCPKG_LINE_INFO, checkout_output.exit_code == 0, "Failed to checkout %s:%s", port_name, git_tree); + } + return working_dir; + } + Optional VcpkgPaths::get_manifest() const { if (auto p = m_pimpl->m_manifest_doc.get()) From 964b95972bd6d70c1bb36d441f889fc5084934a1 Mon Sep 17 00:00:00 2001 From: Victor Romero Date: Mon, 16 Nov 2020 18:27:38 +0000 Subject: [PATCH 12/42] [WIP] Review comments --- toolsrc/include/vcpkg/fwd/system.process.h | 6 -- toolsrc/include/vcpkg/portfileprovider.h | 33 ++++++-- toolsrc/include/vcpkg/vcpkgpaths.h | 5 -- toolsrc/src/vcpkg/portfileprovider.cpp | 16 ++-- toolsrc/src/vcpkg/vcpkgpaths.cpp | 91 ++++++++++++---------- 5 files changed, 83 insertions(+), 68 deletions(-) delete mode 100644 toolsrc/include/vcpkg/fwd/system.process.h diff --git a/toolsrc/include/vcpkg/fwd/system.process.h b/toolsrc/include/vcpkg/fwd/system.process.h deleted file mode 100644 index 6d8363d6b4fc28..00000000000000 --- a/toolsrc/include/vcpkg/fwd/system.process.h +++ /dev/null @@ -1,6 +0,0 @@ -#pragma once - -namespace vcpkg::System -{ - struct ExitCodeAndOutput; -} \ No newline at end of file diff --git a/toolsrc/include/vcpkg/portfileprovider.h b/toolsrc/include/vcpkg/portfileprovider.h index 3aaef5d0737060..e43a1df0d4ecba 100644 --- a/toolsrc/include/vcpkg/portfileprovider.h +++ b/toolsrc/include/vcpkg/portfileprovider.h @@ -38,14 +38,28 @@ namespace vcpkg::PortFileProvider mutable std::unordered_map cache; }; - struct VersionedPortfileProvider : Util::ResourceBase + struct IVersionedPortfileProvider + { + virtual const std::vector& get_port_versions( + const std::string& port_spec) const = 0; + + virtual ExpectedS get_control_file( + const vcpkg::Versions::VersionSpec& version_spec) const = 0; + }; + + struct IBaselineProvider + { + virtual Optional get_baseline_version(const std::string& port_name) const = 0; + }; + + struct VersionedPortfileProvider : IVersionedPortfileProvider, Util::ResourceBase { explicit VersionedPortfileProvider(const vcpkg::VcpkgPaths& paths); - const std::vector& get_port_versions(const std::string& port_spec) const; + const std::vector& get_port_versions(const std::string& port_spec) const override; ExpectedS get_control_file( - const vcpkg::Versions::VersionSpec& version_spec) const; + const vcpkg::Versions::VersionSpec& version_spec) const override; private: const vcpkg::VcpkgPaths& paths; @@ -55,15 +69,18 @@ namespace vcpkg::PortFileProvider mutable std::unordered_map git_tree_cache; }; - // struct BaselineProvider : Util::ResourceBase + // struct BaselineProvider : IBaselineProvider, Util::ResourceBase // { - // explicit BaselineProvider(const vcpkg::VcpkgPaths& paths); + // explicit BaselineProvider(const vcpkg::VcpkgPaths& paths, const std::string& baseline); - // vcpkg::Versions::VersionSpec get_baseline_version(const std::string& baseline, - // const std::string& port_name) const; + // Optional get_baseline_version(const std::string& port_name) const override; // private: + // void load_baseline_file() const; + // const vcpkg::VcpkgPaths& paths; - // mutable std::map baseline_versions; + // const std::string& baseline; + + // mutable std::map baseline_versions; // }; } diff --git a/toolsrc/include/vcpkg/vcpkgpaths.h b/toolsrc/include/vcpkg/vcpkgpaths.h index addefd6f4f5cc6..2fd04b911750fe 100644 --- a/toolsrc/include/vcpkg/vcpkgpaths.h +++ b/toolsrc/include/vcpkg/vcpkgpaths.h @@ -4,7 +4,6 @@ #include #include -#include #include #include @@ -137,9 +136,5 @@ namespace vcpkg private: std::unique_ptr m_pimpl; - - System::ExitCodeAndOutput run_git_command(const std::string& dot_git_dir, - const std::string& work_tree, - const std::string& cmd_line) const; }; } diff --git a/toolsrc/src/vcpkg/portfileprovider.cpp b/toolsrc/src/vcpkg/portfileprovider.cpp index 61d83db5caa686..ca62f6a6f765c5 100644 --- a/toolsrc/src/vcpkg/portfileprovider.cpp +++ b/toolsrc/src/vcpkg/portfileprovider.cpp @@ -398,19 +398,21 @@ namespace vcpkg::PortFileProvider fs::u8string(port_directory)); } - // BaselineProvider::BaselineProvider(const VcpkgPaths& paths) : paths(paths) { } + // BaselineProvider::BaselineProvider(const VcpkgPaths& paths, const std::string& baseline) + // : paths(paths), baseline(baseline) + // { + // } - // Versions::VersionSpec BaselineProvider::get_baseline_version(const std::string& baseline, - // const std::string& port_name) const + // Optional BaselineProvider::get_baseline_version(const std::string& port_name) const // { - // const auto key = Strings::concat(port_name, "@", baseline); - // auto it = baseline_versions.find(key); + // auto it = baseline_versions.find(port_name); // if (it != baseline_versions.end()) // { // return it->second; // } + // } - // // Search in DB - // auto fetch_baseline_file = [](const std::string& baseline) -> fs::path { paths.checkout_file() }; + // void BaselineProvider::load_baseline_file() const + // { // } } diff --git a/toolsrc/src/vcpkg/vcpkgpaths.cpp b/toolsrc/src/vcpkg/vcpkgpaths.cpp index 2777ab92c7a30d..1e491ab33c211a 100644 --- a/toolsrc/src/vcpkg/vcpkgpaths.cpp +++ b/toolsrc/src/vcpkg/vcpkgpaths.cpp @@ -71,6 +71,15 @@ namespace return result; } + System::CmdLineBuilder git_cmd_builder(const VcpkgPaths& paths, + const fs::path& dot_git_dir, + const fs::path& work_tree) + { + return System::CmdLineBuilder() + .path_arg(paths.get_tool_exe(Tools::GIT)) + .string_arg(Strings::concat("--git-dir=", fs::u8string(dot_git_dir))) + .string_arg(Strings::concat("--work-tree=", fs::u8string(work_tree))); + } } // unnamed namespace namespace vcpkg @@ -456,20 +465,6 @@ If you wish to silence this error and use classic mode, you can: return m_pimpl->m_tool_cache->get_tool_version(*this, tool); } - System::ExitCodeAndOutput VcpkgPaths::run_git_command(const std::string& dot_git_dir, - const std::string& work_tree, - const std::string& cmd_line) const - { - const fs::path& git_exe = get_tool_exe(Tools::GIT); - - System::CmdLineBuilder builder; - builder.path_arg(git_exe) - .string_arg(Strings::concat("--git-dir=", fs::u8string(dot_git_dir))) - .string_arg(Strings::concat("--work-tree=", fs::u8string(work_tree))); - const std::string full_cmd = Strings::concat(builder.extract(), " ", cmd_line); - return System::cmd_execute_and_capture_output(full_cmd); - } - fs::path VcpkgPaths::git_checkout_port(const std::string& port_name, const std::string& git_tree) const { /* Clone a new vcpkg repository instance using the local instance as base. @@ -480,44 +475,56 @@ If you wish to silence this error and use classic mode, you can: * Since we are checking a git tree object, all files will be checked out to the root of `work-tree`. * Because of that, it makes sense to use the git hash as the name for the directory. */ - const auto local_repo = this->root; + const fs::path local_repo = this->root; // TODO: Decide final location for these two - const auto dot_git_dir = this->buildtrees / "versioning_tmp" / ".git"; - const auto working_dir = this->buildtrees / "versioning_tmp" / "versions" / port_name / git_tree; + const fs::path dot_git_dir = this->buildtrees / "versioning_tmp" / ".git"; + const fs::path work_tree_prefix = this->buildtrees / "versioning_tmp" / "versions" / port_name; + const fs::path work_tree_temp = work_tree_prefix / git_tree; + const fs::path work_tree_done = work_tree_prefix / Strings::concat(git_tree, ".done"); - auto& fs = get_filesystem(); - if (!fs.exists(working_dir / "CONTROL") && !fs.exists(working_dir / "vcpkg.json")) + Files::Filesystem& fs = get_filesystem(); + if (!fs.exists(work_tree_done / "CONTROL") && !fs.exists(work_tree_done / "vcpkg.json")) { - if (fs.exists(working_dir)) - { - fs.remove_all(working_dir, VCPKG_LINE_INFO); - } - - if (fs.exists(dot_git_dir)) - { - fs.remove_all(dot_git_dir, VCPKG_LINE_INFO); - } + fs.remove_all(work_tree_temp, VCPKG_LINE_INFO); + fs.remove_all(dot_git_dir, VCPKG_LINE_INFO); - // All git commands are run with: --git-dir={dot_git_dir} --work-tree={working_dir} + // All git commands are run with: --git-dir={dot_git_dir} --work-tree={work_tree_temp} // git clone --no-checkout --local {vcpkg_root} {dot_git_dir} - System::CmdLineBuilder clone_cmd_builder; - clone_cmd_builder.string_arg("clone") - .string_arg("--no-checkout") - .string_arg("--local") - .path_arg(local_repo) - .path_arg(dot_git_dir); - const auto output = run_git_command(dot_git_dir, working_dir, clone_cmd_builder.extract()); - Checks::check_exit(VCPKG_LINE_INFO, output.exit_code == 0, "Failed to clone temporary vcpkg instance"); + System::CmdLineBuilder clone_cmd_builder = git_cmd_builder(*this, dot_git_dir, work_tree_temp) + .string_arg("clone") + .string_arg("--no-checkout") + .string_arg("--local") + .path_arg(local_repo) + .path_arg(dot_git_dir); + const auto clone_output = System::cmd_execute_and_capture_output(clone_cmd_builder.extract()); + Checks::check_exit( + VCPKG_LINE_INFO, clone_output.exit_code == 0, "Failed to clone temporary vcpkg instance"); // git checkout {tree_object} . - System::CmdLineBuilder checkout_cmd_builder; - checkout_cmd_builder.string_arg("checkout").string_arg(git_tree).string_arg("."); - const auto git_cmd = checkout_cmd_builder.extract(); - const auto checkout_output = run_git_command(dot_git_dir, working_dir, git_cmd); + System::CmdLineBuilder checkout_cmd_builder = git_cmd_builder(*this, dot_git_dir, work_tree_temp) + .string_arg("checkout") + .string_arg(git_tree) + .string_arg("."); + const auto checkout_output = System::cmd_execute_and_capture_output(checkout_cmd_builder.extract()); Checks::check_exit( VCPKG_LINE_INFO, checkout_output.exit_code == 0, "Failed to checkout %s:%s", port_name, git_tree); + + // Post-checkout cleanup + std::error_code ec; + fs.rename_or_copy(work_tree_temp, work_tree_done, ".tmp", ec); + fs.remove_all(work_tree_temp, VCPKG_LINE_INFO); + fs.remove_all(dot_git_dir, VCPKG_LINE_INFO); + if (ec) + { + System::printf(System::Color::error, + "Failed to move portfiles for %s:%s\n%s\n", + port_name, + git_tree, + ec.message()); + Checks::exit_fail(VCPKG_LINE_INFO); + } } - return working_dir; + return work_tree_done; } Optional VcpkgPaths::get_manifest() const From 0093995f3bcf8cbe03024e810575012f7ec75af6 Mon Sep 17 00:00:00 2001 From: Victor Romero Date: Mon, 16 Nov 2020 19:00:35 +0000 Subject: [PATCH 13/42] [WIP] Review comments pt. 2 --- toolsrc/include/vcpkg/versions.h | 22 +++-------------- toolsrc/src/vcpkg/portfileprovider.cpp | 34 ++++++++++++++------------ toolsrc/src/vcpkg/versions.cpp | 21 ++++++---------- 3 files changed, 29 insertions(+), 48 deletions(-) diff --git a/toolsrc/include/vcpkg/versions.h b/toolsrc/include/vcpkg/versions.h index 0c1844962252db..a1ad5a156e3468 100644 --- a/toolsrc/include/vcpkg/versions.h +++ b/toolsrc/include/vcpkg/versions.h @@ -14,13 +14,13 @@ namespace vcpkg::Versions struct VersionSpec { - const std::string package_spec; + const std::string port_name; const VersionT version; const Scheme scheme; - VersionSpec(const std::string& package_spec, const VersionT& version, Scheme scheme); + VersionSpec(const std::string& port_name, const VersionT& version, Scheme scheme); - VersionSpec(const std::string& package_spec, + VersionSpec(const std::string& port_name, const std::string& version_string, int port_version, Scheme scheme); @@ -33,20 +33,4 @@ namespace vcpkg::Versions { std::size_t operator()(const VersionSpec& key) const; }; - - struct Constraint - { - enum class Type - { - None, - Minimum, - Exact - }; - - const VersionSpec version_spec; - const Type type; - - Constraint(const VersionSpec& version_spec, Type type); - Constraint(const std::string& package_spec, const VersionT& version, Scheme scheme, Type type); - }; } \ No newline at end of file diff --git a/toolsrc/src/vcpkg/portfileprovider.cpp b/toolsrc/src/vcpkg/portfileprovider.cpp index ca62f6a6f765c5..c44fafcd5501a2 100644 --- a/toolsrc/src/vcpkg/portfileprovider.cpp +++ b/toolsrc/src/vcpkg/portfileprovider.cpp @@ -1,12 +1,10 @@ #include -#include #include #include #include #include #include -#include #include #include @@ -14,7 +12,7 @@ using namespace vcpkg; namespace { - vcpkg::Versions::VersionSpec extract_version_spec(const std::string& package_spec, const Json::Object& version_obj) + vcpkg::Versions::VersionSpec extract_version_spec(const std::string& port_name, const Json::Object& version_obj) { static const std::map version_schemes{ {Versions::Scheme::Relaxed, "version"}, @@ -29,7 +27,7 @@ namespace if (const auto version_string = version_obj.get(kv_pair.second)) { return Versions::VersionSpec( - package_spec, version_string->string().to_string(), port_version, kv_pair.first); + port_name, version_string->string().to_string(), port_version, kv_pair.first); } } @@ -311,15 +309,15 @@ namespace vcpkg::PortFileProvider VersionedPortfileProvider::VersionedPortfileProvider(const vcpkg::VcpkgPaths& paths) : paths(paths) { } const std::vector& VersionedPortfileProvider::get_port_versions( - const std::string& package_spec) const + const std::string& port_name) const { - auto cache_it = versions_cache.find(package_spec); + auto cache_it = versions_cache.find(port_name); if (cache_it != versions_cache.end()) { return cache_it->second; } - auto maybe_versions_json_path = get_versions_json_path(paths, package_spec); + auto maybe_versions_json_path = get_versions_json_path(paths, port_name); if (!maybe_versions_json_path.has_value()) { // TODO: Handle db version not existing @@ -341,18 +339,24 @@ namespace vcpkg::PortFileProvider for (const auto& version : versions_array) { const auto& version_obj = version.object(); - Versions::VersionSpec spec = extract_version_spec(package_spec, version_obj); + Versions::VersionSpec spec = extract_version_spec(port_name, version_obj); - auto& package_versions = versions_cache[spec.package_spec]; + auto& package_versions = versions_cache[spec.port_name]; package_versions.push_back(spec); auto git_tree = version_obj.get("git-tree")->string().to_string(); git_tree_cache.emplace(std::move(spec), git_tree); } } + else + { + // TODO: Message error + Checks::exit_fail(VCPKG_LINE_INFO); + } + } - return versions_cache.at(package_spec); + return versions_cache.at(port_name); } ExpectedS VersionedPortfileProvider::get_control_file( @@ -365,7 +369,7 @@ namespace vcpkg::PortFileProvider } // Pre-populate cache. - get_port_versions(version_spec.package_spec); + get_port_versions(version_spec.port_name); auto git_tree_cache_it = git_tree_cache.find(version_spec); if (git_tree_cache_it == git_tree_cache.end()) @@ -375,26 +379,26 @@ namespace vcpkg::PortFileProvider } const std::string git_tree = git_tree_cache_it->second; - const auto port_directory = paths.git_checkout_port(version_spec.package_spec, git_tree); + const auto port_directory = paths.git_checkout_port(version_spec.port_name, git_tree); auto maybe_control_file = Paragraphs::try_load_port(paths.get_filesystem(), port_directory); if (auto scf = maybe_control_file.get()) { - if (scf->get()->core_paragraph->name == version_spec.package_spec) + if (scf->get()->core_paragraph->name == version_spec.port_name) { return SourceControlFileLocation{std::move(*scf), std::move(port_directory)}; } Checks::exit_with_message(VCPKG_LINE_INFO, "Error: Failed to load port from %s: names did not match: '%s' != '%s'", fs::u8string(port_directory), - version_spec.package_spec, + version_spec.port_name, scf->get()->core_paragraph->name); } vcpkg::print_error_message(maybe_control_file.error()); Checks::exit_with_message(VCPKG_LINE_INFO, "Error: Failed to load port %s from %s", - version_spec.package_spec, + version_spec.port_name, fs::u8string(port_directory)); } diff --git a/toolsrc/src/vcpkg/versions.cpp b/toolsrc/src/vcpkg/versions.cpp index 33e400521afa37..f84d0d2bd3d87b 100644 --- a/toolsrc/src/vcpkg/versions.cpp +++ b/toolsrc/src/vcpkg/versions.cpp @@ -2,23 +2,23 @@ namespace vcpkg::Versions { - VersionSpec::VersionSpec(const std::string& package_spec, const VersionT& version, Scheme scheme) - : package_spec(package_spec), version(version), scheme(scheme) + VersionSpec::VersionSpec(const std::string& port_name, const VersionT& version, Scheme scheme) + : port_name(port_name), version(version), scheme(scheme) { } - VersionSpec::VersionSpec(const std::string& package_spec, + VersionSpec::VersionSpec(const std::string& port_name, const std::string& version_string, int port_version, Scheme scheme) - : package_spec(package_spec), version(version_string, port_version), scheme(scheme) + : port_name(port_name), version(version_string, port_version), scheme(scheme) { } bool operator==(const VersionSpec& lhs, const VersionSpec& rhs) { - return std::tie(lhs.package_spec, lhs.version, lhs.scheme) == - std::tie(rhs.package_spec, rhs.version, rhs.scheme); + return std::tie(lhs.port_name, lhs.version, lhs.scheme) == + std::tie(rhs.port_name, rhs.version, rhs.scheme); } bool operator!=(const VersionSpec& lhs, const VersionSpec& rhs) { return !(lhs == rhs); } @@ -29,14 +29,7 @@ namespace vcpkg::Versions using std::size_t; using std::string; - return ((hash()(key.package_spec) ^ (hash()(key.version.to_string()) << 1)) >> 1) ^ + return ((hash()(key.port_name) ^ (hash()(key.version.to_string()) << 1)) >> 1) ^ (hash()(static_cast(key.scheme)) << 1); } - - Constraint::Constraint(const std::string& package_spec, const VersionT& version, Scheme scheme, Type type) - : version_spec(package_spec, version, scheme), type(type) - { - } - - Constraint::Constraint(const VersionSpec& version_spec, Type type) : version_spec(version_spec), type(type) { } } \ No newline at end of file From d73fdd02447dd0d1fa08fc886bf602d746e8f7bf Mon Sep 17 00:00:00 2001 From: Victor Romero Date: Mon, 16 Nov 2020 22:32:50 +0000 Subject: [PATCH 14/42] [WIP] Review comments / fix formatting --- toolsrc/include/vcpkg/versions.h | 7 ++----- toolsrc/src/vcpkg/versions.cpp | 3 +-- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/toolsrc/include/vcpkg/versions.h b/toolsrc/include/vcpkg/versions.h index c88610261b04b3..7c37fe2d35889c 100644 --- a/toolsrc/include/vcpkg/versions.h +++ b/toolsrc/include/vcpkg/versions.h @@ -20,10 +20,7 @@ namespace vcpkg::Versions VersionSpec(const std::string& port_name, const VersionT& version, Scheme scheme); - VersionSpec(const std::string& port_name, - const std::string& version_string, - int port_version, - Scheme scheme); + VersionSpec(const std::string& port_name, const std::string& version_string, int port_version, Scheme scheme); friend bool operator==(const VersionSpec& lhs, const VersionSpec& rhs); friend bool operator!=(const VersionSpec& lhs, const VersionSpec& rhs); @@ -33,7 +30,7 @@ namespace vcpkg::Versions { std::size_t operator()(const VersionSpec& key) const; }; - + struct Constraint { enum class Type diff --git a/toolsrc/src/vcpkg/versions.cpp b/toolsrc/src/vcpkg/versions.cpp index f84d0d2bd3d87b..ac1829712c6f1c 100644 --- a/toolsrc/src/vcpkg/versions.cpp +++ b/toolsrc/src/vcpkg/versions.cpp @@ -17,8 +17,7 @@ namespace vcpkg::Versions bool operator==(const VersionSpec& lhs, const VersionSpec& rhs) { - return std::tie(lhs.port_name, lhs.version, lhs.scheme) == - std::tie(rhs.port_name, rhs.version, rhs.scheme); + return std::tie(lhs.port_name, lhs.version, lhs.scheme) == std::tie(rhs.port_name, rhs.version, rhs.scheme); } bool operator!=(const VersionSpec& lhs, const VersionSpec& rhs) { return !(lhs == rhs); } From 377c0f9d5bc5bd934f52ee32057869957b37f27e Mon Sep 17 00:00:00 2001 From: Victor Romero Date: Tue, 17 Nov 2020 13:04:22 -0800 Subject: [PATCH 15/42] Generate baseline.json --- scripts/generatePortVersionsDb.py | 70 ++++++++++++++++++++++++------- 1 file changed, 56 insertions(+), 14 deletions(-) diff --git a/scripts/generatePortVersionsDb.py b/scripts/generatePortVersionsDb.py index 028f7f387b9caf..cf05352a6669c4 100644 --- a/scripts/generatePortVersionsDb.py +++ b/scripts/generatePortVersionsDb.py @@ -4,6 +4,7 @@ import subprocess import json import time +import shutil from subprocess import CalledProcessError from json.decoder import JSONDecodeError @@ -14,9 +15,9 @@ def get_current_git_ref(): - output = subprocess.run(['git', '-C', SCRIPT_DIRECTORY, 'rev-parse', '--verify', 'HEAD'], - capture_output=True, - encoding='utf-8') + output = subprocess.run(['git', '-C', SCRIPT_DIRECTORY, 'rev-parse', '--verify', 'HEAD'], + capture_output=True, + encoding='utf-8') if output.returncode == 0: return output.stdout.strip() print(f"Failed to get git ref:", output.stderr.strip(), file=sys.stderr) @@ -25,47 +26,88 @@ def get_current_git_ref(): def generate_port_versions_db(ports_path, db_path, revision): start_time = time.time() - port_names = [item for item in os.listdir(ports_path) if os.path.isdir(os.path.join(ports_path, item))] + + # Assume each directory in ${VCPKG_ROOT}/ports is a different port + port_names = [item for item in os.listdir( + ports_path) if os.path.isdir(os.path.join(ports_path, item))] + port_names.sort() total_count = len(port_names) + + # Dictionary to collect the latest version of each port as baseline + baseline_objects = {} + baseline_objects['default'] = {} + for counter, port_name in enumerate(port_names): containing_dir = os.path.join(db_path, f'{port_name[0]}-') os.makedirs(containing_dir, exist_ok=True) + output_filepath = os.path.join(containing_dir, f'{port_name}.json') - if not os.path.exists(output_filepath): + if not os.path.exists(output_filepath): output = subprocess.run( - [os.path.join(SCRIPT_DIRECTORY, '../vcpkg'), 'x-history', port_name, '--x-json'], + [os.path.join(SCRIPT_DIRECTORY, '../vcpkg'), + 'x-history', port_name, '--x-json'], capture_output=True, encoding='utf-8') + if output.returncode == 0: try: versions_object = json.loads(output.stdout) + + # Put latest version in baseline dictionary + latest_version = versions_object["versions"][0] + baseline_objects['default'][port_name] = { + "version-string": latest_version["version-string"], + "port-version": latest_version["port-version"] + } with open(output_filepath, 'w') as output_file: json.dump(versions_object, output_file) except JSONDecodeError: - print(f'Maformed JSON from vcpkg x-history {port_name}: ', output.stdout.strip(), file=sys.stderr) + print( + f'Malformed JSON from vcpkg x-history {port_name}: ', output.stdout.strip(), file=sys.stderr) else: - print(f'x-history {port_name} failed: ', output.stdout.strip(), file=sys.stderr) + print(f'x-history {port_name} failed: ', + output.stdout.strip(), file=sys.stderr) + # This should be replaced by a progress bar if counter > 0 and counter % 100 == 0: elapsed_time = time.time() - start_time - print(f'Processed {counter} out of {total_count}. Elapsed time: {elapsed_time:.2f} seconds') + print( + f'Processed {counter} out of {total_count}. Elapsed time: {elapsed_time:.2f} seconds') + + # Generate baseline.json + baseline_file_path = os.path.join(db_path, 'baseline.json') + with open(baseline_file_path, 'w') as baseline_output_file: + json.dump(baseline_objects, baseline_output_file) + + # Generate timestamp rev_file = os.path.join(db_path, revision) Path(rev_file).touch() + elapsed_time = time.time() - start_time - print(f'Processed {total_count} total ports. Elapsed time: {elapsed_time:.2f} seconds') - + print( + f'Processed {total_count} total ports. Elapsed time: {elapsed_time:.2f} seconds') + def main(ports_path, db_path): revision = get_current_git_ref() if not revision: print('Couldn\'t fetch current Git revision', file=sys.stderr) sys.exit(1) + rev_file = os.path.join(db_path, revision) if os.path.exists(rev_file): print(f'Database files already exist for commit {revision}') sys.exit(0) - generate_port_versions_db(ports_path=ports_path, db_path=db_path, revision=revision) + if (os.path.exists(db_path)): + try: + shutil.rmtree(db_path) + except OSError as e: + print(f'Could not delete folder: {db_path}.\nError: {e.strerror}') + + generate_port_versions_db(ports_path=ports_path, + db_path=db_path, + revision=revision) if __name__ == "__main__": - main(ports_path=os.path.join(SCRIPT_DIRECTORY, '../ports'), - db_path=os.path.join(SCRIPT_DIRECTORY, '../port_versions')) + main(ports_path=os.path.join(SCRIPT_DIRECTORY, '../ports'), + db_path=os.path.join(SCRIPT_DIRECTORY, '../port_versions')) From 2c4b35dd92c89c6b0bf8348cdcf137e76fe4843f Mon Sep 17 00:00:00 2001 From: Victor Romero Date: Tue, 17 Nov 2020 15:21:05 -0800 Subject: [PATCH 16/42] Extract deserializers from registries source file --- toolsrc/include/vcpkg/versiondeserializers.h | 58 ++++++++++++++++++++ toolsrc/src/vcpkg/registries.cpp | 51 +---------------- toolsrc/src/vcpkg/versiondeserializers.cpp | 8 +++ toolsrc/windows-bootstrap/vcpkg.vcxproj | 2 + 4 files changed, 69 insertions(+), 50 deletions(-) create mode 100644 toolsrc/include/vcpkg/versiondeserializers.h create mode 100644 toolsrc/src/vcpkg/versiondeserializers.cpp diff --git a/toolsrc/include/vcpkg/versiondeserializers.h b/toolsrc/include/vcpkg/versiondeserializers.h new file mode 100644 index 00000000000000..24d79ced7ff63b --- /dev/null +++ b/toolsrc/include/vcpkg/versiondeserializers.h @@ -0,0 +1,58 @@ +#pragma once + +#include + +#include +#include + +#include + +namespace vcpkg +{ + struct VersionTDeserializer final : Json::IDeserializer + { + StringView type_name() const override { return "a version object"; } + View valid_fields() const override + { + static const StringView t[] = {"version-string", "port-version"}; + return t; + } + + Optional visit_object(Json::Reader& r, const Json::Object& obj) override + { + std::string version; + int port_version = 0; + + r.required_object_field(type_name(), obj, "version-string", version, version_deserializer); + r.optional_object_field(obj, "port-version", port_version, Json::NaturalNumberDeserializer::instance); + + return VersionT{std::move(version), port_version}; + } + + static Json::StringDeserializer version_deserializer; + static VersionTDeserializer instance; + }; + + struct BaselineDeserializer final : Json::IDeserializer>> + { + StringView type_name() const override { return "a baseline object"; } + + Optional visit_object(Json::Reader& r, const Json::Object& obj) override + { + std::map> result; + + for (auto pr : obj) + { + const auto& version_value = pr.second; + VersionT version; + r.visit_in_key(version_value, pr.first, version, VersionTDeserializer::instance); + + result.emplace(pr.first.to_string(), std::move(version)); + } + + return std::move(result); + } + + static BaselineDeserializer instance; + }; +} \ No newline at end of file diff --git a/toolsrc/src/vcpkg/registries.cpp b/toolsrc/src/vcpkg/registries.cpp index e481685d932252..8b496f33c82c14 100644 --- a/toolsrc/src/vcpkg/registries.cpp +++ b/toolsrc/src/vcpkg/registries.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #include #include @@ -70,32 +71,6 @@ namespace } }; - struct VersionTDeserializer final : Json::IDeserializer - { - StringView type_name() const override { return "a version object"; } - View valid_fields() const override - { - static const StringView t[] = {"version-string", "port-version"}; - return t; - } - - Optional visit_object(Json::Reader& r, const Json::Object& obj) override - { - std::string version; - int port_version = 0; - - r.required_object_field(type_name(), obj, "version-string", version, version_deserializer); - r.optional_object_field(obj, "port-version", port_version, Json::NaturalNumberDeserializer::instance); - - return VersionT{std::move(version), port_version}; - } - - static Json::StringDeserializer version_deserializer; - static VersionTDeserializer instance; - }; - Json::StringDeserializer VersionTDeserializer::version_deserializer{"version"}; - VersionTDeserializer VersionTDeserializer::instance; - struct FilesystemVersionEntryDeserializer final : Json::IDeserializer> { StringView type_name() const override { return "a version entry object"; } @@ -162,30 +137,6 @@ namespace const fs::path& registry_root; }; - struct BaselineDeserializer final : Json::IDeserializer>> - { - StringView type_name() const override { return "a baseline object"; } - - Optional visit_object(Json::Reader& r, const Json::Object& obj) override - { - std::map> result; - - for (auto pr : obj) - { - const auto& version_value = pr.second; - VersionT version; - r.visit_in_key(version_value, pr.first, version, VersionTDeserializer::instance); - - result.emplace(pr.first.to_string(), std::move(version)); - } - - return std::move(result); - } - - static BaselineDeserializer instance; - }; - BaselineDeserializer BaselineDeserializer::instance; - struct FilesystemRegistry final : RegistryImpl { std::unique_ptr get_port_entry(const VcpkgPaths& paths, StringView port_name) const override diff --git a/toolsrc/src/vcpkg/versiondeserializers.cpp b/toolsrc/src/vcpkg/versiondeserializers.cpp new file mode 100644 index 00000000000000..248ae928030554 --- /dev/null +++ b/toolsrc/src/vcpkg/versiondeserializers.cpp @@ -0,0 +1,8 @@ +#include + +using namespace vcpkg; + +VersionTDeserializer VersionTDeserializer::instance; +BaselineDeserializer BaselineDeserializer::instance; + +Json::StringDeserializer VersionTDeserializer::version_deserializer{"version"}; diff --git a/toolsrc/windows-bootstrap/vcpkg.vcxproj b/toolsrc/windows-bootstrap/vcpkg.vcxproj index 7c8b33d5ac6a27..16de6e9c45179f 100644 --- a/toolsrc/windows-bootstrap/vcpkg.vcxproj +++ b/toolsrc/windows-bootstrap/vcpkg.vcxproj @@ -267,6 +267,7 @@ + @@ -355,6 +356,7 @@ + From 0699cf3a8f1d097a49a69ab62e8e7cfe23afaab2 Mon Sep 17 00:00:00 2001 From: Victor Romero Date: Tue, 17 Nov 2020 15:22:02 -0800 Subject: [PATCH 17/42] BaselineProvider initial implementation --- toolsrc/include/vcpkg/portfileprovider.h | 20 +++--- toolsrc/src/vcpkg/portfileprovider.cpp | 81 ++++++++++++++++++------ 2 files changed, 73 insertions(+), 28 deletions(-) diff --git a/toolsrc/include/vcpkg/portfileprovider.h b/toolsrc/include/vcpkg/portfileprovider.h index e43a1df0d4ecba..1d4e512837859f 100644 --- a/toolsrc/include/vcpkg/portfileprovider.h +++ b/toolsrc/include/vcpkg/portfileprovider.h @@ -69,18 +69,18 @@ namespace vcpkg::PortFileProvider mutable std::unordered_map git_tree_cache; }; - // struct BaselineProvider : IBaselineProvider, Util::ResourceBase - // { - // explicit BaselineProvider(const vcpkg::VcpkgPaths& paths, const std::string& baseline); + struct BaselineProvider : IBaselineProvider, Util::ResourceBase + { + explicit BaselineProvider(const vcpkg::VcpkgPaths& paths, const std::string& baseline); - // Optional get_baseline_version(const std::string& port_name) const override; + Optional get_baseline_version(const std::string& port_name) const override; - // private: - // void load_baseline_file() const; + private: + void load_baseline_file() const; - // const vcpkg::VcpkgPaths& paths; - // const std::string& baseline; + const vcpkg::VcpkgPaths& paths; + const std::string& baseline; - // mutable std::map baseline_versions; - // }; + mutable std::map baselines_cache; + }; } diff --git a/toolsrc/src/vcpkg/portfileprovider.cpp b/toolsrc/src/vcpkg/portfileprovider.cpp index 1fef41752d2a3c..ad49ac749be344 100644 --- a/toolsrc/src/vcpkg/portfileprovider.cpp +++ b/toolsrc/src/vcpkg/portfileprovider.cpp @@ -1,3 +1,4 @@ +#include #include #include @@ -7,6 +8,7 @@ #include #include #include +#include using namespace vcpkg; @@ -39,6 +41,7 @@ namespace // TODO: Get correct `port_versions` path for the registry the port belongs to, pseudocode below: // auto registry = paths.get_registry_for_port(port_name); // auto port_versions_dir_path = registry.get_port_versions_path(); + const auto port_versions_dir_path = paths.root / "port_versions"; const auto subpath = Strings::concat(port_name[0], "-/", port_name, ".json"); const auto json_path = port_versions_dir_path / subpath; @@ -48,6 +51,12 @@ namespace } return nullopt; } + + Optional get_baseline_json_path(const VcpkgPaths& paths) + { + const auto baseline_json_path = paths.root / "port_versions" / "baseline.json"; + return paths.get_filesystem().exists(baseline_json_path) ? vcpkg::make_optional(baseline_json_path) : nullopt; + } } namespace vcpkg::PortFileProvider @@ -347,7 +356,6 @@ namespace vcpkg::PortFileProvider // TODO: Message error Checks::exit_fail(VCPKG_LINE_INFO); } - } return versions_cache.at(port_name); @@ -396,21 +404,58 @@ namespace vcpkg::PortFileProvider fs::u8string(port_directory)); } - // BaselineProvider::BaselineProvider(const VcpkgPaths& paths, const std::string& baseline) - // : paths(paths), baseline(baseline) - // { - // } - - // Optional BaselineProvider::get_baseline_version(const std::string& port_name) const - // { - // auto it = baseline_versions.find(port_name); - // if (it != baseline_versions.end()) - // { - // return it->second; - // } - // } - - // void BaselineProvider::load_baseline_file() const - // { - // } + BaselineProvider::BaselineProvider(const VcpkgPaths& paths, const std::string& baseline) + : paths(paths), baseline(baseline) + { + load_baseline_file(); + } + + Optional BaselineProvider::get_baseline_version(const std::string& port_name) const + { + auto it = baselines_cache.find(port_name); + if (it != baselines_cache.end()) + { + return it->second; + } + return nullopt; + } + + void BaselineProvider::load_baseline_file() const + { + auto maybe_baseline_file = get_baseline_json_path(paths); + Checks::check_exit(VCPKG_LINE_INFO, maybe_baseline_file.has_value(), "Couldn't find baseline.json"); + auto baseline_file = maybe_baseline_file.value_or_exit(VCPKG_LINE_INFO); + + auto value = Json::parse_file(VCPKG_LINE_INFO, paths.get_filesystem(), baseline_file); + if (!value.first.is_object()) + { + Checks::exit_with_message(VCPKG_LINE_INFO, "Error: `baseline.json` does not have a top-level object."); + } + + const auto& obj = value.first.object(); + auto baseline_value = obj.get("default"); + if (!baseline_value) + { + Checks::exit_with_message( + VCPKG_LINE_INFO, "Error: `baseline.json` does not contain the baseline \"%s\"", "default"); + } + + Json::Reader r; + std::map> result; + r.visit_in_key(*baseline_value, "default", result, BaselineDeserializer::instance); + + if (r.errors().empty()) + { + for (auto&& kv_pair : result) + { + baselines_cache.emplace(kv_pair.first, + Versions::VersionSpec(kv_pair.first, kv_pair.second, Versions::Scheme::String)); + } + } + else + { + Checks::exit_with_message( + VCPKG_LINE_INFO, "Error: failed to parse `baseline.json`:\n%s", Strings::join("\n", r.errors())); + } + } } From 5040d826f08b32e1181735a4060c0f12ffc30417 Mon Sep 17 00:00:00 2001 From: Victor Romero Date: Tue, 17 Nov 2020 15:45:39 -0800 Subject: [PATCH 18/42] Modify gitignore --- .gitignore | 2 +- port_versions/baseline.json | 1540 +++++++++++++++++++++++++ port_versions/c-/cpprestsdk.json | 1 + port_versions/o-/openssl-unix.json | 1 + port_versions/o-/openssl-uwp.json | 1 + port_versions/o-/openssl-windows.json | 1 + port_versions/o-/openssl.json | 1 + port_versions/r-/rapidjson.json | 1 + port_versions/z-/zlib.json | 1 + 9 files changed, 1548 insertions(+), 1 deletion(-) create mode 100644 port_versions/baseline.json create mode 100644 port_versions/c-/cpprestsdk.json create mode 100644 port_versions/o-/openssl-unix.json create mode 100644 port_versions/o-/openssl-uwp.json create mode 100644 port_versions/o-/openssl-windows.json create mode 100644 port_versions/o-/openssl.json create mode 100644 port_versions/r-/rapidjson.json create mode 100644 port_versions/z-/zlib.json diff --git a/.gitignore b/.gitignore index d12fd1363f3bab..837fb32614f875 100644 --- a/.gitignore +++ b/.gitignore @@ -296,7 +296,7 @@ __pycache__/ /toolsrc/windows-bootstrap/msbuild.x64.debug/ /toolsrc/windows-bootstrap/msbuild.x64.release/ #ignore db -/port_versions/ +# /port_versions/ #ignore custom triplets /triplets/* #add vcpkg-designed triplets back in diff --git a/port_versions/baseline.json b/port_versions/baseline.json new file mode 100644 index 00000000000000..0995fb716d8e4d --- /dev/null +++ b/port_versions/baseline.json @@ -0,0 +1,1540 @@ +{ + "default": { + "3fd": { "version-string": "2.6.3", "port-version": 0 }, + "7zip": { "version-string": "19.00", "port-version": 2 }, + "abseil": { "version-string": "2020-09-23", "port-version": 0 }, + "absent": { "version-string": "0.3.1", "port-version": 0 }, + "ace": { "version-string": "6.5.12", "port-version": 0 }, + "activemq-cpp": { "version-string": "3.9.5", "port-version": 3 }, + "ade": { "version-string": "0.1.1f", "port-version": 0 }, + "aixlog": { "version-string": "1.4.0", "port-version": 0 }, + "akali": { "version-string": "1.42", "port-version": 1 }, + "alac": { "version-string": "2017-11-03-c38887c5", "port-version": 1 }, + "alac-decoder": { "version-string": "0.2", "port-version": 4 }, + "alembic": { "version-string": "1.7.16", "port-version": 0 }, + "aliyun-oss-c-sdk": { "version-string": "3.10.0", "port-version": 0 }, + "allegro5": { "version-string": "5.2.6.0", "port-version": 0 }, + "ampl-asl": { "version-string": "2020-11-11", "port-version": 0 }, + "ampl-mp": { "version-string": "2020-11-11", "port-version": 0 }, + "amqpcpp": { "version-string": "4.1.7", "port-version": 0 }, + "anax": { "version-string": "2.1.0", "port-version": 6 }, + "angelscript": { "version-string": "2.34.0", "port-version": 0 }, + "angle": { "version-string": "2020-05-15", "port-version": 1 }, + "antlr4": { "version-string": "4.8", "port-version": 0 }, + "any-lite": { "version-string": "0.2.0", "port-version": 0 }, + "anyrpc": { "version-string": "2020-01-13", "port-version": 1 }, + "apr": { "version-string": "1.7.0", "port-version": 3 }, + "apr-util": { "version-string": "1.6.1", "port-version": 3 }, + "arb": { "version-string": "2.18.1", "port-version": 0 }, + "argagg": { "version-string": "0.4.6", "port-version": 0 }, + "argh": { "version-string": "2018-12-18", "port-version": 2 }, + "argparse": { "version-string": "2.1", "port-version": 0 }, + "args": { "version-string": "2020-09-14", "port-version": 0 }, + "argtable2": { "version-string": "2.13", "port-version": 8 }, + "argtable3": { "version-string": "3.1.5", "port-version": 0 }, + "argumentum": { "version-string": "0.3.1", "port-version": 0 }, + "armadillo": { "version-string": "10.1.0", "port-version": 0 }, + "arrow": { "version-string": "1.0.1", "port-version": 2 }, + "ashes": { "version-string": "2020-10-21", "port-version": 0 }, + "asio": { "version-string": "1.18.0", "port-version": 0 }, + "asiosdk": { "version-string": "2.3.3", "port-version": 1 }, + "asmjit": { "version-string": "2020-09-14", "port-version": 0 }, + "assimp": { "version-string": "5.0.1", "port-version": 4 }, + "asynch": { "version-string": "2019-09-21", "port-version": 1 }, + "asyncplusplus": { "version-string": "1.1", "port-version": 0 }, + "atk": { "version-string": "2.24.0", "port-version": 5 }, + "atkmm": { "version-string": "2.24.2", "port-version": 3 }, + "atlmfc": { "version-string": "0", "port-version": 0 }, + "aubio": { "version-string": "0.4.9", "port-version": 3 }, + "audiofile": { "version-string": "1.0.7", "port-version": 0 }, + "aurora": { "version-string": "2017-06-21-c75699d2a8caa726260c29b6d7a0fd35f8f28933", "port-version": 0 }, + "autobahn": { "version-string": "20.8.1", "port-version": 0 }, + "avisynthplus": { "version-string": "3.6.0", "port-version": 1 }, + "avro-c": { "version-string": "1.9.2", "port-version": 1 }, + "avro-cpp": { "version-string": "1.9.2", "port-version": 0 }, + "aws-c-common": { "version-string": "0.4.56", "port-version": 0 }, + "aws-c-event-stream": { "version-string": "0.1.6", "port-version": 0 }, + "aws-checksums": { "version-string": "0.1.9", "port-version": 0 }, + "aws-lambda-cpp": { "version-string": "0.2.6", "port-version": 0 }, + "aws-sdk-cpp": { "version-string": "1.8.83", "port-version": 1 }, + "azmq": { "version-string": "2020-03-03", "port-version": 0 }, + "azure-c-shared-utility": { "version-string": "2020-07-19", "port-version": 0 }, + "azure-iot-sdk-c": { "version-string": "2020-07-19", "port-version": 1 }, + "azure-kinect-sensor-sdk": { "version-string": "1.4.0-alpha.0", "port-version": 6 }, + "azure-macro-utils-c": { "version-string": "2020-06-17", "port-version": 2 }, + "azure-storage-cpp": { "version-string": "7.5.0", "port-version": 0 }, + "azure-uamqp-c": { "version-string": "2020-07-19", "port-version": 0 }, + "azure-uhttp-c": { "version-string": "2020-07-19", "port-version": 0 }, + "azure-umqtt-c": { "version-string": "2020-07-19", "port-version": 0 }, + "basisu": { "version-string": "1.11", "port-version": 4 }, + "bde": { "version-string": "3.2.0.0", "port-version": 2 }, + "bdwgc": { "version-string": "8.0.4", "port-version": 1 }, + "beast": { "version-string": "0", "port-version": 0 }, + "behaviortree-cpp": { "version-string": "3.5.1", "port-version": 2 }, + "benchmark": { "version-string": "1.5.2", "port-version": 0 }, + "bento4": { "version-string": "1.5.1", "port-version": 628 }, + "berkeleydb": { "version-string": "4.8.30", "port-version": 5 }, + "bfgroup-lyra": { "version-string": "1.5", "port-version": 0 }, + "bigint": { "version-string": "2010.04.30", "port-version": 6 }, + "binn": { "version-string": "3.0", "port-version": 0 }, + "bitmagic": { "version-string": "6.4.0", "port-version": 0 }, + "bitserializer": { "version-string": "0.10", "port-version": 0 }, + "bitserializer-cpprestjson": { "version-string": "alias", "port-version": 0 }, + "bitserializer-pugixml": { "version-string": "alias", "port-version": 0 }, + "bitserializer-rapidjson": { "version-string": "alias", "port-version": 0 }, + "bitserializer-rapidyaml": { "version-string": "alias", "port-version": 0 }, + "bitsery": { "version-string": "5.1.0", "port-version": 0 }, + "blaze": { "version-string": "3.8", "port-version": 1 }, + "blend2d": { "version-string": "beta_2020-08-24", "port-version": 0 }, + "blitz": { "version-string": "2020-03-25", "port-version": 0 }, + "blosc": { "version-string": "1.18.1", "port-version": 1 }, + "bond": { "version-string": "9.0.3", "port-version": 0 }, + "boolinq": { "version-string": "2019-07-22", "port-version": 0 }, + "boost": { "version-string": "1.74.0", "port-version": 0 }, + "boost-accumulators": { "version-string": "1.74.0", "port-version": 0 }, + "boost-algorithm": { "version-string": "1.74.0", "port-version": 0 }, + "boost-align": { "version-string": "1.74.0", "port-version": 0 }, + "boost-any": { "version-string": "1.74.0", "port-version": 0 }, + "boost-array": { "version-string": "1.74.0", "port-version": 0 }, + "boost-asio": { "version-string": "1.74.0", "port-version": 0 }, + "boost-assert": { "version-string": "1.74.0", "port-version": 0 }, + "boost-assign": { "version-string": "1.74.0", "port-version": 0 }, + "boost-atomic": { "version-string": "1.74.0", "port-version": 0 }, + "boost-beast": { "version-string": "1.74.0", "port-version": 0 }, + "boost-bimap": { "version-string": "1.74.0", "port-version": 0 }, + "boost-bind": { "version-string": "1.74.0", "port-version": 0 }, + "boost-build": { "version-string": "1.74.0", "port-version": 0 }, + "boost-callable-traits": { "version-string": "1.74.0", "port-version": 0 }, + "boost-chrono": { "version-string": "1.74.0", "port-version": 0 }, + "boost-circular-buffer": { "version-string": "1.74.0", "port-version": 0 }, + "boost-compatibility": { "version-string": "1.74.0", "port-version": 0 }, + "boost-compute": { "version-string": "1.74.0", "port-version": 0 }, + "boost-concept-check": { "version-string": "1.74.0", "port-version": 0 }, + "boost-config": { "version-string": "1.74.0", "port-version": 0 }, + "boost-container": { "version-string": "1.74.0", "port-version": 0 }, + "boost-container-hash": { "version-string": "1.74.0", "port-version": 0 }, + "boost-context": { "version-string": "1.74.0", "port-version": 0 }, + "boost-contract": { "version-string": "1.74.0", "port-version": 0 }, + "boost-conversion": { "version-string": "1.74.0", "port-version": 0 }, + "boost-convert": { "version-string": "1.74.0", "port-version": 0 }, + "boost-core": { "version-string": "1.74.0", "port-version": 0 }, + "boost-coroutine": { "version-string": "1.74.0", "port-version": 0 }, + "boost-coroutine2": { "version-string": "1.74.0", "port-version": 0 }, + "boost-crc": { "version-string": "1.74.0", "port-version": 0 }, + "boost-date-time": { "version-string": "1.74.0", "port-version": 0 }, + "boost-detail": { "version-string": "1.74.0", "port-version": 0 }, + "boost-di": { "version-string": "1.1.0", "port-version": 1 }, + "boost-dll": { "version-string": "1.74.0", "port-version": 0 }, + "boost-dynamic-bitset": { "version-string": "1.74.0", "port-version": 0 }, + "boost-endian": { "version-string": "1.74.0", "port-version": 0 }, + "boost-exception": { "version-string": "1.74.0", "port-version": 0 }, + "boost-fiber": { "version-string": "1.74.0", "port-version": 0 }, + "boost-filesystem": { "version-string": "1.74.0", "port-version": 0 }, + "boost-flyweight": { "version-string": "1.74.0", "port-version": 0 }, + "boost-foreach": { "version-string": "1.74.0", "port-version": 0 }, + "boost-format": { "version-string": "1.74.0", "port-version": 0 }, + "boost-function": { "version-string": "1.74.0", "port-version": 0 }, + "boost-function-types": { "version-string": "1.74.0", "port-version": 0 }, + "boost-functional": { "version-string": "1.74.0", "port-version": 0 }, + "boost-fusion": { "version-string": "1.74.0", "port-version": 0 }, + "boost-geometry": { "version-string": "1.74.0", "port-version": 0 }, + "boost-gil": { "version-string": "1.74.0", "port-version": 0 }, + "boost-graph": { "version-string": "1.74.0", "port-version": 0 }, + "boost-graph-parallel": { "version-string": "1.74.0", "port-version": 0 }, + "boost-hana": { "version-string": "1.74.0", "port-version": 0 }, + "boost-heap": { "version-string": "1.74.0", "port-version": 0 }, + "boost-histogram": { "version-string": "1.74.0", "port-version": 0 }, + "boost-hof": { "version-string": "1.74.0", "port-version": 0 }, + "boost-icl": { "version-string": "1.74.0", "port-version": 0 }, + "boost-integer": { "version-string": "1.74.0", "port-version": 0 }, + "boost-interprocess": { "version-string": "1.74.0", "port-version": 0 }, + "boost-interval": { "version-string": "1.74.0", "port-version": 0 }, + "boost-intrusive": { "version-string": "1.74.0", "port-version": 0 }, + "boost-io": { "version-string": "1.74.0", "port-version": 0 }, + "boost-iostreams": { "version-string": "1.74.0", "port-version": 0 }, + "boost-iterator": { "version-string": "1.74.0", "port-version": 0 }, + "boost-lambda": { "version-string": "1.74.0", "port-version": 0 }, + "boost-lexical-cast": { "version-string": "1.74.0", "port-version": 0 }, + "boost-local-function": { "version-string": "1.74.0", "port-version": 0 }, + "boost-locale": { "version-string": "1.74.0", "port-version": 0 }, + "boost-lockfree": { "version-string": "1.74.0", "port-version": 0 }, + "boost-log": { "version-string": "1.74.0", "port-version": 0 }, + "boost-logic": { "version-string": "1.74.0", "port-version": 0 }, + "boost-math": { "version-string": "1.74.0", "port-version": 0 }, + "boost-metaparse": { "version-string": "1.74.0", "port-version": 0 }, + "boost-modular-build-helper": { "version-string": "1.74.0", "port-version": 1 }, + "boost-move": { "version-string": "1.74.0", "port-version": 0 }, + "boost-mp11": { "version-string": "1.74.0", "port-version": 0 }, + "boost-mpi": { "version-string": "1.74.0", "port-version": 0 }, + "boost-mpl": { "version-string": "1.74.0", "port-version": 0 }, + "boost-msm": { "version-string": "1.74.0", "port-version": 0 }, + "boost-multi-array": { "version-string": "1.74.0", "port-version": 0 }, + "boost-multi-index": { "version-string": "1.74.0", "port-version": 0 }, + "boost-multiprecision": { "version-string": "1.74.0", "port-version": 0 }, + "boost-nowide": { "version-string": "1.74.0", "port-version": 0 }, + "boost-numeric-conversion": { "version-string": "1.74.0", "port-version": 0 }, + "boost-odeint": { "version-string": "1.74.0", "port-version": 0 }, + "boost-optional": { "version-string": "1.74.0", "port-version": 0 }, + "boost-outcome": { "version-string": "1.74.0", "port-version": 0 }, + "boost-parameter": { "version-string": "1.74.0", "port-version": 0 }, + "boost-parameter-python": { "version-string": "1.74.0", "port-version": 0 }, + "boost-phoenix": { "version-string": "1.74.0", "port-version": 0 }, + "boost-poly-collection": { "version-string": "1.74.0", "port-version": 0 }, + "boost-polygon": { "version-string": "1.74.0", "port-version": 0 }, + "boost-pool": { "version-string": "1.74.0", "port-version": 0 }, + "boost-predef": { "version-string": "1.74.0", "port-version": 0 }, + "boost-preprocessor": { "version-string": "1.74.0", "port-version": 0 }, + "boost-process": { "version-string": "1.74.0", "port-version": 0 }, + "boost-program-options": { "version-string": "1.74.0", "port-version": 0 }, + "boost-property-map": { "version-string": "1.74.0", "port-version": 0 }, + "boost-property-tree": { "version-string": "1.74.0", "port-version": 0 }, + "boost-proto": { "version-string": "1.74.0", "port-version": 0 }, + "boost-ptr-container": { "version-string": "1.74.0", "port-version": 0 }, + "boost-python": { "version-string": "1.74.0", "port-version": 0 }, + "boost-qvm": { "version-string": "1.74.0", "port-version": 0 }, + "boost-random": { "version-string": "1.74.0", "port-version": 0 }, + "boost-range": { "version-string": "1.74.0", "port-version": 0 }, + "boost-ratio": { "version-string": "1.74.0", "port-version": 0 }, + "boost-rational": { "version-string": "1.74.0", "port-version": 0 }, + "boost-regex": { "version-string": "1.74.0", "port-version": 0 }, + "boost-safe-numerics": { "version-string": "1.74.0", "port-version": 0 }, + "boost-scope-exit": { "version-string": "1.74.0", "port-version": 0 }, + "boost-serialization": { "version-string": "1.74.0", "port-version": 0 }, + "boost-signals": { "version-string": "1.68.0", "port-version": 1 }, + "boost-signals2": { "version-string": "1.74.0", "port-version": 0 }, + "boost-smart-ptr": { "version-string": "1.74.0", "port-version": 0 }, + "boost-sort": { "version-string": "1.74.0", "port-version": 0 }, + "boost-spirit": { "version-string": "1.74.0", "port-version": 0 }, + "boost-stacktrace": { "version-string": "1.74.0", "port-version": 0 }, + "boost-statechart": { "version-string": "1.74.0", "port-version": 0 }, + "boost-static-assert": { "version-string": "1.74.0", "port-version": 0 }, + "boost-static-string": { "version-string": "1.74.0", "port-version": 0 }, + "boost-stl-interfaces": { "version-string": "1.74.0", "port-version": 0 }, + "boost-system": { "version-string": "1.74.0", "port-version": 0 }, + "boost-test": { "version-string": "1.74.0", "port-version": 0 }, + "boost-thread": { "version-string": "1.74.0", "port-version": 0 }, + "boost-throw-exception": { "version-string": "1.74.0", "port-version": 0 }, + "boost-timer": { "version-string": "1.74.0", "port-version": 0 }, + "boost-tokenizer": { "version-string": "1.74.0", "port-version": 0 }, + "boost-tti": { "version-string": "1.74.0", "port-version": 0 }, + "boost-tuple": { "version-string": "1.74.0", "port-version": 0 }, + "boost-type-erasure": { "version-string": "1.74.0", "port-version": 0 }, + "boost-type-index": { "version-string": "1.74.0", "port-version": 0 }, + "boost-type-traits": { "version-string": "1.74.0", "port-version": 0 }, + "boost-typeof": { "version-string": "1.74.0", "port-version": 0 }, + "boost-ublas": { "version-string": "1.74.0", "port-version": 0 }, + "boost-uninstall": { "version-string": "1.74.0", "port-version": 0 }, + "boost-units": { "version-string": "1.74.0", "port-version": 0 }, + "boost-unordered": { "version-string": "1.74.0", "port-version": 0 }, + "boost-utility": { "version-string": "1.74.0", "port-version": 0 }, + "boost-uuid": { "version-string": "1.74.0", "port-version": 0 }, + "boost-variant": { "version-string": "1.74.0", "port-version": 0 }, + "boost-variant2": { "version-string": "1.74.0", "port-version": 0 }, + "boost-vcpkg-helpers": { "version-string": "7", "port-version": 2 }, + "boost-vmd": { "version-string": "1.74.0", "port-version": 0 }, + "boost-wave": { "version-string": "1.74.0", "port-version": 0 }, + "boost-winapi": { "version-string": "1.74.0", "port-version": 0 }, + "boost-xpressive": { "version-string": "1.74.0", "port-version": 0 }, + "boost-yap": { "version-string": "1.74.0", "port-version": 0 }, + "boringssl": { "version-string": "2020-04-07", "port-version": 2 }, + "botan": { "version-string": "2.16.0", "port-version": 0 }, + "box2d": { "version-string": "2.4.0", "port-version": 0 }, + "breakpad": { "version-string": "2020-09-14", "port-version": 0 }, + "brigand": { "version-string": "1.3.0", "port-version": 0 }, + "brotli": { "version-string": "1.0.9", "port-version": 0 }, + "brpc": { "version-string": "0.9.7", "port-version": 0 }, + "brunocodutra-metal": { "version-string": "2.1.1", "port-version": 0 }, + "brynet": { "version-string": "1.0.7", "port-version": 0 }, + "bullet3": { "version-string": "2.89", "port-version": 1 }, + "bustache": { "version-string": "1.1.0", "port-version": 0 }, + "butteraugli": { "version-string": "2019-05-08", "port-version": 1 }, + "byte-lite": { "version-string": "0.2.0", "port-version": 0 }, + "bzip2": { "version-string": "1.0.8", "port-version": 1 }, + "c-ares": { "version-string": "2019-5-2", "port-version": 1 }, + "c4core": { "version-string": "2020-04-12", "port-version": 0 }, + "caf": { "version-string": "0.17.6", "port-version": 1 }, + "caffe2": { "version-string": "0.8.1", "port-version": 3 }, + "cairo": { "version-string": "1.16.0", "port-version": 8 }, + "cairomm": { "version-string": "1.15.3", "port-version": 5 }, + "capnproto": { "version-string": "0.8.0", "port-version": 0 }, + "capstone": { "version-string": "4.0.2", "port-version": 1 }, + "cartographer": { "version-string": "1.0.0", "port-version": 3 }, + "casclib": { "version-string": "1.50b", "port-version": 1 }, + "catch": { "version-string": "alias", "port-version": 0 }, + "catch-classic": { "version-string": "1.12.2", "port-version": 0 }, + "catch2": { "version-string": "2.13.1", "port-version": 0 }, + "cccapstone": { "version-string": "9b4128ee1153e78288a1b5433e2c06a0d47a4c4e", "port-version": 1 }, + "ccd": { "version-string": "2.1", "port-version": 4 }, + "ccfits": { "version-string": "2.5", "port-version": 6 }, + "cctz": { "version-string": "2.3", "port-version": 2 }, + "celero": { "version-string": "2.6.0", "port-version": 1 }, + "cello": { "version-string": "2019-07-23", "port-version": 0 }, + "cereal": { "version-string": "1.3.0", "port-version": 0 }, + "ceres": { "version-string": "1.14.0", "port-version": 10 }, + "cfitsio": { "version-string": "3.49", "port-version": 0 }, + "cgal": { "version-string": "5.1", "port-version": 0 }, + "cgicc": { "version-string": "3.2.19", "port-version": 4 }, + "cgl": { "version-string": "0.60.2", "port-version": 2 }, + "cgltf": { "version-string": "1.8", "port-version": 0 }, + "cgns": { "version-string": "3.4.0", "port-version": 1 }, + "chaiscript": { "version-string": "6.1.0", "port-version": 1 }, + "chakracore": { "version-string": "1.11.22", "port-version": 1 }, + "charls": { "version-string": "2.1.0", "port-version": 1 }, + "chartdir": { "version-string": "6.3.1", "port-version": 1 }, + "check": { "version-string": "0.15.2", "port-version": 0 }, + "chipmunk": { "version-string": "7.0.3", "port-version": 0 }, + "chmlib": { "version-string": "0.40", "port-version": 4 }, + "chromium-base": { "version-string": "86.0.4199.1", "port-version": 1 }, + "cimg": { "version-string": "2.6.2", "port-version": 0 }, + "cityhash": { "version-string": "2013-01-08", "port-version": 0 }, + "civetweb": { "version-string": "1.13", "port-version": 0 }, + "cjson": { "version-string": "2019-11-30", "port-version": 1 }, + "clapack": { "version-string": "3.2.1", "port-version": 15 }, + "clara": { "version-string": "1.1.5", "port-version": 0 }, + "clblas": { "version-string": "2.12", "port-version": 4 }, + "clblast": { "version-string": "1.5.1", "port-version": 0 }, + "clfft": { "version-string": "2.12.2", "port-version": 2 }, + "cli": { "version-string": "1.2.1", "port-version": 0 }, + "cli11": { "version-string": "1.9.1", "port-version": 0 }, + "clickhouse-cpp": { "version-string": "2019-05-22", "port-version": 0 }, + "clipp": { "version-string": "2019-04-30", "port-version": 0 }, + "clockutils": { "version-string": "1.1.1-3651f232c27074c4ceead169e223edf5f00247c5", "port-version": 3 }, + "clp": { "version-string": "1.17.6", "port-version": 0 }, + "clue": { "version-string": "1.0.0-alpha.7", "port-version": 0 }, + "cmark": { "version-string": "0.29.0", "port-version": 0 }, + "cmcstl2": { "version-string": "2019-07-20", "port-version": 0 }, + "cmocka": { "version-string": "2020-08-01", "port-version": 0 }, + "cnl": { "version-string": "2019-06-23", "port-version": 0 }, + "coin": { "version-string": "4.0.0", "port-version": 1 }, + "coinutils": { "version-string": "2.11.4", "port-version": 0 }, + "collada-dom": { "version-string": "2.5.0", "port-version": 3 }, + "colmap": { "version-string": "3.6", "port-version": 0 }, + "comms": { "version-string": "3.1.2", "port-version": 0 }, + "comms-ublox": { "version-string": "0.19.1", "port-version": 0 }, + "commsdsl": { "version-string": "3.5.3", "port-version": 0 }, + "concurrentqueue": { "version-string": "1.0.2", "port-version": 0 }, + "console-bridge": { "version-string": "1.0.1", "port-version": 1 }, + "constexpr": { "version-string": "1.0", "port-version": 1 }, + "constexpr-contracts": { "version-string": "2020-08-09", "port-version": 0 }, + "coolprop": { "version-string": "6.4.1", "port-version": 0 }, + "coroutine": { "version-string": "1.5.0", "port-version": 1 }, + "corrade": { "version-string": "2020.06", "port-version": 0 }, + "cpp-base64": { "version-string": "2019-06-19", "port-version": 0 }, + "cpp-httplib": { "version-string": "0.7.0", "port-version": 0 }, + "cpp-netlib": { "version-string": "0.13.0", "port-version": 4 }, + "cpp-peglib": { "version-string": "0.1.0", "port-version": 0 }, + "cpp-redis": { "version-string": "4.3.1", "port-version": 2 }, + "cpp-taskflow": { "version-string": "2.6.0", "port-version": 0 }, + "cppad": { "version-string": "20200000.3", "port-version": 0 }, + "cppcms": { "version-string": "1.2.1", "port-version": 1 }, + "cppcodec": { "version-string": "0.2", "port-version": 0 }, + "cppcoro": { "version-string": "2020-2-28", "port-version": 1 }, + "cppfs": { "version-string": "1.3.0", "port-version": 0 }, + "cppgraphqlgen": { "version-string": "3.2.4", "port-version": 0 }, + "cppitertools": { "version-string": "2.0", "port-version": 0 }, + "cppkafka": { "version-string": "0.3.1", "port-version": 2 }, + "cppmicroservices": { "version-string": "3.4.0", "port-version": 1 }, + "cpprestsdk": { "version-string": "2.10.16", "port-version": 3 }, + "cpptoml": { "version-string": "v0.1.1", "port-version": 0 }, + "cppunit": { "version-string": "1.14.0", "port-version": 1 }, + "cpputest": { "version-string": "2019-9-16", "port-version": 1 }, + "cppwinrt": { "version-string": "windows-sdk", "port-version": 0 }, + "cppzmq": { "version-string": "4.7.1", "port-version": 0 }, + "cpr": { "version-string": "1.5.2", "port-version": 0 }, + "cpu-features": { "version-string": "0.4.1", "port-version": 0 }, + "cpuid": { "version-string": "0.4.1", "port-version": 1 }, + "cpuinfo": { "version-string": "2019-07-28", "port-version": 1 }, + "cr": { "version-string": "2020-04-26", "port-version": 0 }, + "crashpad": { "version-string": "2020-03-18", "port-version": 0 }, + "crashrpt": { "version-string": "1.4.3", "port-version": 0 }, + "crc32c": { "version-string": "1.1.1", "port-version": 0 }, + "crfsuite": { "version-string": "2019-07-21", "port-version": 0 }, + "croncpp": { "version-string": "2020-09-04", "port-version": 1 }, + "crossguid": { "version-string": "0.2.2-2018-06-16", "port-version": 1 }, + "crow": { "version-string": "0.1", "port-version": 1 }, + "cryptopp": { "version-string": "8.2.0", "port-version": 2 }, + "cspice": { "version-string": "66", "port-version": 3 }, + "ctbignum": { "version-string": "2019-08-02", "port-version": 0 }, + "ctemplate": { "version-string": "2020-09-14", "port-version": 0 }, + "ctp": { "version-string": "6.3.15_20190220_se", "port-version": 0 }, + "ctre": { "version-string": "2.10", "port-version": 0 }, + "cub": { "version-string": "1.8.0", "port-version": 1 }, + "cuda": { "version-string": "10.1", "port-version": 4 }, + "cudnn": { "version-string": "7.6", "port-version": 2 }, + "cunit": { "version-string": "2.1.3", "port-version": 6 }, + "curl": { "version-string": "7.73.0", "port-version": 2 }, + "curlpp": { "version-string": "2018-06-15", "port-version": 3 }, + "cute-headers": { "version-string": "2019-09-20", "port-version": 0 }, + "cutelyst2": { "version-string": "2.12.0", "port-version": 0 }, + "cxxopts": { "version-string": "2.2.1", "port-version": 0 }, + "czmq": { "version-string": "2019-06-10", "port-version": 4 }, + "d3dx12": { "version-string": "may2020", "port-version": 0 }, + "darknet": { "version-string": "2020-08-30", "port-version": 1 }, + "darts-clone": { "version-string": "1767ab87cffe", "port-version": 1 }, + "dartsim": { "version-string": "6.9.4", "port-version": 0 }, + "dataframe": { "version-string": "1.12.0", "port-version": 0 }, + "date": { "version-string": "3.0.0", "port-version": 1 }, + "dbg-macro": { "version-string": "2019-07-11", "port-version": 0 }, + "dbghelp": { "version-string": "0.0", "port-version": 0 }, + "dbow2": { "version-string": "2019-08-05", "port-version": 0 }, + "dbow3": { "version-string": "1.0.0", "port-version": 0 }, + "dcmtk": { "version-string": "3.6.5+_20191213", "port-version": 0 }, + "decimal-for-cpp": { "version-string": "1.16", "port-version": 1 }, + "detours": { "version-string": "4.0.1", "port-version": 1 }, + "devicenameresolver": { "version-string": "2016-06-26-0850d88fa6", "port-version": 1 }, + "devil": { "version-string": "1.8.0", "port-version": 6 }, + "dimcli": { "version-string": "5.0.2", "port-version": 0 }, + "directxmesh": { "version-string": "aug2020", "port-version": 1 }, + "directxsdk": { "version-string": "jun10", "port-version": 0 }, + "directxtex": { "version-string": "sept2020", "port-version": 2 }, + "directxtk": { "version-string": "sept2020", "port-version": 1 }, + "directxtk12": { "version-string": "sept2020", "port-version": 1 }, + "dirent": { "version-string": "1.23.2", "port-version": 0 }, + "discord-game-sdk": { "version-string": "2.5.6", "port-version": 1 }, + "discord-rpc": { "version-string": "3.4.0", "port-version": 0 }, + "discount": { "version-string": "2.2.6", "port-version": 0 }, + "distorm": { "version-string": "3.4.1", "port-version": 0 }, + "dlfcn-win32": { "version-string": "1.1.1", "port-version": 4 }, + "dlib": { "version-string": "19.21", "port-version": 4 }, + "dmlc": { "version-string": "2019-08-12", "port-version": 4 }, + "docopt": { "version-string": "2018-11-01", "port-version": 0 }, + "doctest": { "version-string": "2.4.0", "port-version": 0 }, + "double-conversion": { "version-string": "3.1.5", "port-version": 0 }, + "dpdk": { "version-string": "19.02", "port-version": 0 }, + "draco": { "version-string": "1.3.6", "port-version": 0 }, + "drlibs": { "version-string": "2019-08-12", "port-version": 0 }, + "drogon": { "version-string": "1.1.0", "port-version": 0 }, + "dtl": { "version-string": "1.19", "port-version": 0 }, + "duckx": { "version-string": "1.0.0", "port-version": 0 }, + "duilib": { "version-string": "2019-4-28", "port-version": 2 }, + "duktape": { "version-string": "2.5.0", "port-version": 0 }, + "dx": { "version-string": "1.0.1", "port-version": 1 }, + "dxut": { "version-string": "11.14", "port-version": 3 }, + "eabase": { "version-string": "2.09.12", "port-version": 1 }, + "eastl": { "version-string": "3.16.07", "port-version": 0 }, + "easycl": { "version-string": "0.3", "port-version": 0 }, + "easyhook": { "version-string": "2.7.6789.0", "port-version": 0 }, + "easyloggingpp": { "version-string": "9.96.7", "port-version": 1 }, + "eathread": { "version-string": "1.32.09", "port-version": 1 }, + "ebml": { "version-string": "1.4.0", "port-version": 0 }, + "ecm": { "version-string": "5.74.0", "port-version": 0 }, + "ecos": { "version-string": "2.0.7", "port-version": 0 }, + "ecsutil": { "version-string": "1.0.7.15", "port-version": 0 }, + "edlib": { "version-string": "1.2.6", "port-version": 0 }, + "effolkronium-random": { "version-string": "1.3.1", "port-version": 0 }, + "efsw": { "version-string": "2020-06-08", "port-version": 1 }, + "egl-registry": { "version-string": "2020-02-20", "port-version": 0 }, + "eigen3": { "version-string": "3.3.7", "port-version": 8 }, + "elfio": { "version-string": "3.8", "port-version": 0 }, + "embree2": { "version-string": "2.17.7", "port-version": 0 }, + "embree3": { "version-string": "3.11.0", "port-version": 1 }, + "enet": { "version-string": "1.3.16", "port-version": 0 }, + "ensmallen": { "version-string": "2.14.2", "port-version": 0 }, + "entityx": { "version-string": "1.3.0", "port-version": 2 }, + "entt": { "version-string": "3.5.1", "port-version": 0 }, + "epsilon": { "version-string": "0.9.2", "port-version": 4 }, + "esaxx": { "version-string": "ca7cb332011ec37", "port-version": 0 }, + "evpp": { "version-string": "0.7.0", "port-version": 4 }, + "exiv2": { "version-string": "0.27.3", "port-version": 3 }, + "expat": { "version-string": "2020-08-18", "port-version": 0 }, + "expected-lite": { "version-string": "0.3.0", "port-version": 0 }, + "exprtk": { "version-string": "2020-09-14", "port-version": 0 }, + "ezc3d": { "version-string": "1.3.7", "port-version": 0 }, + "faad2": { "version-string": "2.9.1", "port-version": 2 }, + "fadbad": { "version-string": "2.1.0", "port-version": 0 }, + "faiss": { "version-string": "1.6.4", "port-version": 0 }, + "fann": { "version-string": "2.2.0", "port-version": 1 }, + "farmhash": { "version-string": "1.1", "port-version": 2 }, + "fast-cpp-csv-parser": { "version-string": "2019-08-14", "port-version": 0 }, + "fastcdr": { "version-string": "1.0.15", "port-version": 0 }, + "fastcgi": { "version-string": "2020-09-11", "port-version": 0 }, + "fastfeat": { "version-string": "391d5e9", "port-version": 1 }, + "fastlz": { "version-string": "1.0", "port-version": 3 }, + "fastrtps": { "version-string": "2.0.1", "port-version": 0 }, + "fbthrift": { "version-string": "2020.10.19.00", "port-version": 0 }, + "fcl": { "version-string": "0.6.1", "port-version": 0 }, + "fdk-aac": { "version-string": "2018-07-08", "port-version": 2 }, + "fdlibm": { "version-string": "5.3", "port-version": 4 }, + "ffmpeg": { "version-string": "4.3.1", "port-version": 7 }, + "ffnvcodec": { "version-string": "10.0.26.0", "port-version": 0 }, + "fftw3": { "version-string": "3.3.8", "port-version": 7 }, + "fftwpp": { "version-string": "2019-12-19", "port-version": 0 }, + "field3d": { "version-string": "1.7.3", "port-version": 1 }, + "fizz": { "version-string": "2020.10.19.00", "port-version": 0 }, + "flann": { "version-string": "2019-04-07", "port-version": 1 }, + "flatbuffers": { "version-string": "1.12.0", "port-version": 0 }, + "flint": { "version-string": "2.5.2", "port-version": 4 }, + "fltk": { "version-string": "1.3.5", "port-version": 3 }, + "fluidlite": { "version-string": "2020-08-27", "port-version": 0 }, + "fluidsynth": { "version-string": "2.1.4", "port-version": 0 }, + "fmem": { "version-string": "c-libs", "port-version": 2 }, + "fmi4cpp": { "version-string": "0.7.0", "port-version": 2 }, + "fmilib": { "version-string": "2.0.3", "port-version": 3 }, + "fmt": { "version-string": "7.1.2", "port-version": 0 }, + "folly": { "version-string": "2020.10.19.00", "port-version": 0 }, + "font-chef": { "version-string": "1.0.1", "port-version": 0 }, + "fontconfig": { "version-string": "2.13.1", "port-version": 0 }, + "foonathan-memory": { "version-string": "2019-07-21", "port-version": 1 }, + "forest": { "version-string": "12.1.0", "port-version": 0 }, + "forge": { "version-string": "1.0.5", "port-version": 0 }, + "fplus": { "version-string": "0.2.3-p0", "port-version": 0 }, + "freeglut": { "version-string": "3.2.1", "port-version": 4 }, + "freeimage": { "version-string": "3.18.0", "port-version": 17 }, + "freeopcua": { "version-string": "20190125", "port-version": 3 }, + "freerdp": { "version-string": "2.2.0", "port-version": 0 }, + "freetds": { "version-string": "1.2.5", "port-version": 0 }, + "freetype": { "version-string": "2.10.2", "port-version": 5 }, + "freetype-gl": { "version-string": "2020-09-14", "port-version": 0 }, + "freexl": { "version-string": "1.0.4", "port-version": 11 }, + "fribidi": { "version-string": "1.0.10", "port-version": 0 }, + "frozen": { "version-string": "1.0.0", "port-version": 0 }, + "fruit": { "version-string": "3.6.0", "port-version": 0 }, + "ftgl": { "version-string": "2.4.0", "port-version": 2 }, + "function2": { "version-string": "4.1.0", "port-version": 0 }, + "fuzzylite": { "version-string": "6.0", "port-version": 3 }, + "g2o": { "version-string": "2020-02-07", "port-version": 1 }, + "g3log": { "version-string": "2019-07-29", "port-version": 0 }, + "gainput": { "version-string": "1.0.0", "port-version": 3 }, + "gamedev-framework": { "version-string": "0.18.1", "port-version": 0 }, + "gamma": { "version-string": "gamma-2018-01-27", "port-version": 2 }, + "gasol": { "version-string": "2018-01-04", "port-version": 0 }, + "gaussianlib": { "version-string": "2019-08-04", "port-version": 0 }, + "gcem": { "version-string": "1.13.1", "port-version": 0 }, + "gdal": { "version-string": "2.4.1", "port-version": 14 }, + "gdcm": { "version-string": "3.0.7", "port-version": 0 }, + "gdcm2": { "version-string": "deprecated", "port-version": 0 }, + "gdk-pixbuf": { "version-string": "2.36.9-5", "port-version": 6 }, + "genann": { "version-string": "2019-07-10", "port-version": 0 }, + "geogram": { "version-string": "1.7.5", "port-version": 2 }, + "geographiclib": { "version-string": "1.50.1", "port-version": 0 }, + "geos": { "version-string": "3.8.1", "port-version": 1 }, + "geotrans": { "version-string": "3.7", "port-version": 0 }, + "getdns": { "version-string": "1.6.0", "port-version": 0 }, + "getopt": { "version-string": "0", "port-version": 0 }, + "getopt-win32": { "version-string": "0.1", "port-version": 0 }, + "gettext": { "version-string": "0.21", "port-version": 0 }, + "gettimeofday": { "version-string": "2017-10-14", "port-version": 3 }, + "gflags": { "version-string": "2.2.2", "port-version": 1 }, + "gherkin-c": { "version-string": "2019-10-07", "port-version": 1 }, + "giflib": { "version-string": "5.1.4", "port-version": 6 }, + "gl2ps": { "version-string": "1.4.0", "port-version": 3 }, + "gl3w": { "version-string": "2018-05-31", "port-version": 2 }, + "glad": { "version-string": "0.1.33", "port-version": 1 }, + "glbinding": { "version-string": "3.1.0", "port-version": 2 }, + "glew": { "version-string": "2.1.0", "port-version": 9 }, + "glfw3": { "version-string": "3.3.2", "port-version": 0 }, + "gli": { "version-string": "dd17acf", "port-version": 1 }, + "glib": { "version-string": "2.52.3", "port-version": 23 }, + "glibmm": { "version-string": "2.52.1", "port-version": 12 }, + "glm": { "version-string": "0.9.9.8", "port-version": 0 }, + "globjects": { "version-string": "1.1.0", "port-version": 3 }, + "glog": { "version-string": "0.4.0", "port-version": 3 }, + "glslang": { "version-string": "2019-03-05", "port-version": 1 }, + "glui": { "version-string": "2019-11-30", "port-version": 0 }, + "gmime": { "version-string": "3.2.6", "port-version": 1 }, + "gmmlib": { "version-string": "20.3.1", "port-version": 0 }, + "gmp": { "version-string": "6.2.0", "port-version": 5 }, + "google-cloud-cpp": { "version-string": "1.20.0", "port-version": 0 }, + "google-cloud-cpp-common": { "version-string": "alias", "port-version": 0 }, + "google-cloud-cpp-spanner": { "version-string": "alias", "port-version": 0 }, + "googleapis": { "version-string": "alias", "port-version": 0 }, + "gperf": { "version-string": "3.1", "port-version": 1 }, + "gperftools": { "version-string": "2019-09-02", "port-version": 0 }, + "gppanel": { "version-string": "2020-05-20", "port-version": 0 }, + "graphicsmagick": { "version-string": "1.3.35", "port-version": 2 }, + "graphite2": { "version-string": "1.3.14", "port-version": 0 }, + "graphqlparser": { "version-string": "0.7.0", "port-version": 1 }, + "greatest": { "version-string": "1.4.2", "port-version": 0 }, + "grpc": { "version-string": "1.33.1", "port-version": 0 }, + "grppi": { "version-string": "0.4.0", "port-version": 0 }, + "gsl": { "version-string": "2.6", "port-version": 0 }, + "gsl-lite": { "version-string": "0.37.0", "port-version": 0 }, + "gsoap": { "version-string": "2.8.105", "port-version": 0 }, + "gtest": { "version-string": "1.10.0", "port-version": 2 }, + "gtk": { "version-string": "3.22.19", "port-version": 4 }, + "gtkmm": { "version-string": "3.22.2", "port-version": 4 }, + "gts": { "version-string": "0.7.6", "port-version": 3 }, + "guetzli": { "version-string": "2020-09-14", "port-version": 0 }, + "gumbo": { "version-string": "0.10.1", "port-version": 3 }, + "gzip-hpp": { "version-string": "0.1.0", "port-version": 0 }, + "h3": { "version-string": "3.6.3", "port-version": 0 }, + "h5py-lzf": { "version-string": "2019-12-04", "port-version": 0 }, + "halide": { "version-string": "10.0.0", "port-version": 0 }, + "harfbuzz": { "version-string": "2.7.2", "port-version": 1 }, + "hayai": { "version-string": "2019-08-10", "port-version": 0 }, + "hdf5": { "version-string": "1.12.0", "port-version": 0 }, + "healpix": { "version-string": "1.12.10", "port-version": 7 }, + "hedley": { "version-string": "2019-05-08", "port-version": 1 }, + "hffix": { "version-string": "1.0.0", "port-version": 0 }, + "hfsm2": { "version-string": "beta7", "port-version": 0 }, + "hidapi": { "version-string": "2019-08-30", "port-version": 0 }, + "highfive": { "version-string": "2.2.2", "port-version": 0 }, + "hiredis": { "version-string": "2019-11-2", "port-version": 2 }, + "hpx": { "version-string": "1.5.1", "port-version": 1 }, + "http-parser": { "version-string": "2.9.4", "port-version": 0 }, + "hungarian": { "version-string": "v0.1.3", "port-version": 0 }, + "hunspell": { "version-string": "1.7.0", "port-version": 1 }, + "hwloc": { "version-string": "2.2.0", "port-version": 0 }, + "hyperscan": { "version-string": "5.3.0", "port-version": 0 }, + "hypre": { "version-string": "2.19.0", "port-version": 0 }, + "icu": { "version-string": "67.1", "port-version": 5 }, + "ideviceinstaller": { "version-string": "1.1.2.23", "port-version": 1 }, + "idevicerestore": { "version-string": "1.0.12", "port-version": 4 }, + "if97": { "version-string": "2.1.2", "port-version": 0 }, + "igloo": { "version-string": "1.1.1", "port-version": 0 }, + "ignition-cmake0": { "version-string": "0.6.2", "port-version": 2 }, + "ignition-cmake2": { "version-string": "2.5.0", "port-version": 0 }, + "ignition-common1": { "version-string": "1.1.1", "port-version": 1 }, + "ignition-fuel-tools1": { "version-string": "1.2.0", "port-version": 2 }, + "ignition-math4": { "version-string": "4.0.0", "port-version": 1 }, + "ignition-math6": { "version-string": "6.6.0", "port-version": 0 }, + "ignition-modularscripts": { "version-string": "2020-05-16", "port-version": 2 }, + "ignition-msgs1": { "version-string": "1.0.0", "port-version": 2 }, + "ignition-msgs5": { "version-string": "5.3.0", "port-version": 1 }, + "ignition-msgs6": { "version-string": "6.0.0", "port-version": 0 }, + "ignition-plugin1": { "version-string": "1.1.0", "port-version": 0 }, + "ignition-transport4": { "version-string": "4.0.0", "port-version": 2 }, + "ignition-transport8": { "version-string": "8.1.0", "port-version": 0 }, + "ignition-transport9": { "version-string": "9.0.0", "port-version": 0 }, + "ilmbase": { "version-string": "2.3.0", "port-version": 0 }, + "imgui": { "version-string": "1.79", "port-version": 1 }, + "imgui-sfml": { "version-string": "2.1", "port-version": 2 }, + "immer": { "version-string": "2019-06-07", "port-version": 0 }, + "implot": { "version-string": "0.8", "port-version": 0 }, + "indicators": { "version-string": "2020-10-30", "port-version": 0 }, + "infoware": { "version-string": "0.5.5", "port-version": 1 }, + "inih": { "version-string": "51", "port-version": 0 }, + "iniparser": { "version-string": "2020-04-06", "port-version": 0 }, + "inja": { "version-string": "3.0.0", "port-version": 0 }, + "intel-ipsec": { "version-string": "0.52", "port-version": 1 }, + "intel-mkl": { "version-string": "2020.0.0", "port-version": 0 }, + "intelrdfpmathlib": { "version-string": "20U2", "port-version": 1 }, + "io2d": { "version-string": "2020-09-14", "port-version": 1 }, + "irrlicht": { "version-string": "1.8.4", "port-version": 10 }, + "irrxml": { "version-string": "0", "port-version": 0 }, + "isal": { "version-string": "2.25.0", "port-version": 0 }, + "ismrmrd": { "version-string": "1.4.2", "port-version": 0 }, + "itk": { "version-string": "5.1.0", "port-version": 3 }, + "itpp": { "version-string": "4.3.1", "port-version": 5 }, + "ixwebsocket": { "version-string": "9.6.2", "port-version": 0 }, + "jack2": { "version-string": "1.9.14", "port-version": 0 }, + "jaeger-client-cpp": { "version-string": "0.5.1", "port-version": 1 }, + "jansson": { "version-string": "2.13.1", "port-version": 0 }, + "jasper": { "version-string": "2.0.20", "port-version": 0 }, + "jbig2dec": { "version-string": "0.19", "port-version": 0 }, + "jbigkit": { "version-string": "2.1", "port-version": 4 }, + "jemalloc": { "version-string": "4.3.1", "port-version": 4 }, + "jinja2cpplight": { "version-string": "2018-05-08", "port-version": 0 }, + "josuttis-jthread": { "version-string": "2020-07-21", "port-version": 1 }, + "jsmn": { "version-string": "2019-04-27", "port-version": 0 }, + "json-c": { "version-string": "2019-09-10", "port-version": 1 }, + "json-dto": { "version-string": "0.2.11", "port-version": 0 }, + "json-schema-validator": { "version-string": "2.1.0", "port-version": 0 }, + "json-spirit": { "version-string": "4.1.0", "port-version": 1 }, + "json11": { "version-string": "2017-06-20", "port-version": 2 }, + "json5-parser": { "version-string": "1.0.0", "port-version": 2 }, + "jsoncons": { "version-string": "0.158.0", "port-version": 0 }, + "jsoncpp": { "version-string": "1.9.4", "port-version": 0 }, + "jsonnet": { "version-string": "0.16.0", "port-version": 1 }, + "jwt-cpp": { "version-string": "0.4.0", "port-version": 0 }, + "jxrlib": { "version-string": "2019.10.9", "port-version": 2 }, + "kangaru": { "version-string": "4.2.4", "port-version": 0 }, + "kcp": { "version-string": "2019-09-20", "port-version": 0 }, + "kd-soap": { "version-string": "1.9.0", "port-version": 0 }, + "kealib": { "version-string": "1.4.11", "port-version": 3 }, + "kenlm": { "version-string": "20200924", "port-version": 1 }, + "keystone": { "version-string": "0.9.2", "port-version": 0 }, + "kf5archive": { "version-string": "5.74.0", "port-version": 0 }, + "kf5completion": { "version-string": "5.64.0", "port-version": 0 }, + "kf5config": { "version-string": "5.64.0", "port-version": 0 }, + "kf5coreaddons": { "version-string": "5.64.0", "port-version": 0 }, + "kf5crash": { "version-string": "5.64.0", "port-version": 0 }, + "kf5guiaddons": { "version-string": "5.64.0", "port-version": 0 }, + "kf5holidays": { "version-string": "5.74.0", "port-version": 0 }, + "kf5i18n": { "version-string": "5.64.0", "port-version": 1 }, + "kf5itemmodels": { "version-string": "5.64.0", "port-version": 0 }, + "kf5itemviews": { "version-string": "5.64.0", "port-version": 0 }, + "kf5plotting": { "version-string": "5.74.0", "port-version": 0 }, + "kf5syntaxhighlighting": { "version-string": "5.64.0", "port-version": 1 }, + "kf5widgetsaddons": { "version-string": "5.64.0", "port-version": 0 }, + "kf5windowsystem": { "version-string": "5.64.0", "port-version": 0 }, + "kfr": { "version-string": "2020-06-15", "port-version": 0 }, + "kinectsdk1": { "version-string": "1.8", "port-version": 2 }, + "kinectsdk2": { "version-string": "2.0", "port-version": 2 }, + "kissfft": { "version-string": "2020-03-30", "port-version": 0 }, + "knet": { "version-string": "1.0.1", "port-version": 1 }, + "krabsetw": { "version-string": "4.1.14", "port-version": 0 }, + "kubazip": { "version-string": "0.1.19", "port-version": 0 }, + "kvasir-mpl": { "version-string": "2019-08-06", "port-version": 0 }, + "lapack": { "version-string": "3", "port-version": 0 }, + "lapack-reference": { "version-string": "3.8.0", "port-version": 3 }, + "lastools": { "version-string": "2020-05-09", "port-version": 0 }, + "laszip": { "version-string": "3.4.3", "port-version": 0 }, + "lazy-importer": { "version-string": "2019-08-10", "port-version": 0 }, + "lcm": { "version-string": "1.4.0", "port-version": 1 }, + "lcms": { "version-string": "2.11", "port-version": 0 }, + "leaf": { "version-string": "0.2.2", "port-version": 0 }, + "lemon": { "version-string": "0", "port-version": 0 }, + "leptonica": { "version-string": "1.80.0", "port-version": 0 }, + "lerc": { "version-string": "2.2", "port-version": 1 }, + "lest": { "version-string": "1.35.1", "port-version": 1 }, + "leveldb": { "version-string": "1.22", "port-version": 1 }, + "levmar": { "version-string": "2.6", "port-version": 0 }, + "libaaplus": { "version-string": "2.12", "port-version": 1 }, + "libaiff": { "version-string": "5.0", "port-version": 6 }, + "libarchive": { "version-string": "3.4.3", "port-version": 2 }, + "libass": { "version-string": "0.14.0", "port-version": 3 }, + "libb2": { "version-string": "0.98.1", "port-version": 4 }, + "libbf": { "version-string": "1.0.0", "port-version": 1 }, + "libbson": { "version-string": "1.16.1", "port-version": 1 }, + "libcds": { "version-string": "2.3.3", "port-version": 0 }, + "libcerf": { "version-string": "1.13", "port-version": 0 }, + "libconfig": { "version-string": "1.7.2", "port-version": 2 }, + "libconfuse": { "version-string": "2019-07-14", "port-version": 0 }, + "libcopp": { "version-string": "1.3.2", "port-version": 0 }, + "libcrafter": { "version-string": "0.3", "port-version": 2 }, + "libcroco": { "version-string": "0.6.13", "port-version": 2 }, + "libcuckoo": { "version-string": "0.3", "port-version": 0 }, + "libdatrie": { "version-string": "0.2.10", "port-version": 3 }, + "libde265": { "version-string": "1.0.5", "port-version": 0 }, + "libdisasm": { "version-string": "0.23", "port-version": 7 }, + "libdivide": { "version-string": "3.0", "port-version": 0 }, + "libdshowcapture": { "version-string": "0.6.0", "port-version": 1 }, + "libepoxy": { "version-string": "1.5.4", "port-version": 2 }, + "libevent": { "version-string": "2.1.12", "port-version": 0 }, + "libevhtp": { "version-string": "1.2.18", "port-version": 0 }, + "libexif": { "version-string": "0.6.22", "port-version": 0 }, + "libfabric": { "version-string": "1.8.1", "port-version": 1 }, + "libffi": { "version-string": "3.3", "port-version": 6 }, + "libflac": { "version-string": "1.3.3", "port-version": 5 }, + "libfort": { "version-string": "0.4.1", "port-version": 0 }, + "libfreenect2": { "version-string": "0.2.0", "port-version": 5 }, + "libftdi": { "version-string": "0.20", "port-version": 1 }, + "libftdi1": { "version-string": "1.4", "port-version": 1 }, + "libgd": { "version-string": "2.2.5", "port-version": 4 }, + "libgeotiff": { "version-string": "1.6.0", "port-version": 0 }, + "libgit2": { "version-string": "1.1.0", "port-version": 0 }, + "libgo": { "version-string": "3.1", "port-version": 1 }, + "libgpod": { "version-string": "2019-08-29", "port-version": 2 }, + "libgta": { "version-string": "1.0.8", "port-version": 1 }, + "libguarded": { "version-string": "2019-08-27", "port-version": 1 }, + "libharu": { "version-string": "2017-08-15", "port-version": 9 }, + "libhdfs3": { "version-string": "2019-11-05", "port-version": 0 }, + "libheif": { "version-string": "1.7.0", "port-version": 1 }, + "libhsplasma": { "version-string": "2020.08.30", "port-version": 0 }, + "libhydrogen": { "version-string": "2019-08-11", "port-version": 0 }, + "libiconv": { "version-string": "1.16", "port-version": 6 }, + "libics": { "version-string": "1.6.4", "port-version": 0 }, + "libideviceactivation": { "version-string": "1.2.235", "port-version": 0 }, + "libidn2": { "version-string": "2.3.0", "port-version": 1 }, + "libigl": { "version-string": "2.2.0", "port-version": 3 }, + "libimobiledevice": { "version-string": "1.3.6", "port-version": 1 }, + "libirecovery": { "version-string": "1.0.25", "port-version": 2 }, + "libjpeg-turbo": { "version-string": "2.0.5", "port-version": 0 }, + "libjuice": { "version-string": "0.5.2", "port-version": 0 }, + "libkml": { "version-string": "1.3.0", "port-version": 6 }, + "liblas": { "version-string": "1.8.1", "port-version": 5 }, + "liblbfgs": { "version-string": "1.10", "port-version": 0 }, + "liblemon": { "version-string": "2019-06-13", "port-version": 1 }, + "liblinear": { "version-string": "241", "port-version": 0 }, + "liblo": { "version-string": "0.31", "port-version": 0 }, + "liblsl": { "version-string": "1.13.0-b11", "port-version": 1 }, + "liblzma": { "version-string": "5.2.5", "port-version": 1 }, + "libmad": { "version-string": "0.15.1", "port-version": 8 }, + "libmagic": { "version-string": "5.37", "port-version": 2 }, + "libmariadb": { "version-string": "3.1.10", "port-version": 3 }, + "libmaxminddb": { "version-string": "1.4.3", "port-version": 0 }, + "libmediainfo": { "version-string": "20.09", "port-version": 0 }, + "libmesh": { "version-string": "1.5.0", "port-version": 1 }, + "libmicrohttpd": { "version-string": "0.9.63", "port-version": 4 }, + "libmikmod": { "version-string": "3.3.11.1", "port-version": 8 }, + "libmodbus": { "version-string": "3.1.6", "port-version": 1 }, + "libmodman": { "version-string": "2.0.1", "port-version": 2 }, + "libmodplug": { "version-string": "0.8.9.0", "port-version": 6 }, + "libmorton": { "version-string": "0.2", "port-version": 0 }, + "libmpeg2": { "version-string": "0.5.1", "port-version": 0 }, + "libmspack": { "version-string": "0.10.1", "port-version": 3 }, + "libmupdf": { "version-string": "1.18.0", "port-version": 0 }, + "libmysql": { "version-string": "8.0.20", "port-version": 1 }, + "libnice": { "version-string": "0.1.15", "port-version": 6 }, + "libnoise": { "version-string": "1.0.0", "port-version": 1 }, + "libodb": { "version-string": "2.4.0", "port-version": 6 }, + "libodb-boost": { "version-string": "2.4.0", "port-version": 3 }, + "libodb-mysql": { "version-string": "2.4.0", "port-version": 7 }, + "libodb-pgsql": { "version-string": "2.4.0", "port-version": 3 }, + "libodb-sqlite": { "version-string": "2.4.0", "port-version": 7 }, + "libogg": { "version-string": "1.3.4", "port-version": 2 }, + "libopenmpt": { "version-string": "2017-01-28-cf2390140", "port-version": 1 }, + "libopusenc": { "version-string": "0.2.1", "port-version": 0 }, + "libosip2": { "version-string": "5.1.0", "port-version": 4 }, + "libosmium": { "version-string": "2.15.5", "port-version": 0 }, + "libosmscout": { "version-string": "1.1.1", "port-version": 0 }, + "libp7-baical": { "version-string": "replaced", "port-version": 0 }, + "libp7client": { "version-string": "5.6", "port-version": 0 }, + "libpcap": { "version-string": "1.9.1", "port-version": 2 }, + "libpff": { "version-string": "2018-07-14", "port-version": 1 }, + "libplist": { "version-string": "1.3.6", "port-version": 0 }, + "libpmemobj-cpp": { "version-string": "1.11", "port-version": 0 }, + "libpng": { "version-string": "1.6.37", "port-version": 13 }, + "libpopt": { "version-string": "1.16", "port-version": 13 }, + "libpq": { "version-string": "12.2", "port-version": 8 }, + "libpqxx": { "version-string": "7.2.0", "port-version": 0 }, + "libproxy": { "version-string": "0.4.15", "port-version": 2 }, + "libqcow": { "version-string": "20200928", "port-version": 0 }, + "libqglviewer": { "version-string": "2.7.2", "port-version": 3 }, + "libqrencode": { "version-string": "4.1.0", "port-version": 0 }, + "librabbitmq": { "version-string": "2020-06-03", "port-version": 0 }, + "libraqm": { "version-string": "0.7.0", "port-version": 2 }, + "libraw": { "version-string": "201903", "port-version": 3 }, + "librdkafka": { "version-string": "1.5.0", "port-version": 0 }, + "libressl": { "version-string": "2.9.1", "port-version": 3 }, + "librsvg": { "version-string": "2.40.20", "port-version": 2 }, + "librsync": { "version-string": "2020-09-16", "port-version": 0 }, + "librtmp": { "version-string": "2019-11", "port-version": 11 }, + "libsamplerate": { "version-string": "0.1.9.0", "port-version": 3 }, + "libsbml": { "version-string": "5.18.0", "port-version": 0 }, + "libsigcpp": { "version-string": "2.10", "port-version": 3 }, + "libsigcpp-3": { "version-string": "3.0.3", "port-version": 0 }, + "libsndfile": { "version-string": "1.0.30", "port-version": 1 }, + "libsodium": { "version-string": "1.0.18", "port-version": 2 }, + "libsoundio": { "version-string": "2.0.0", "port-version": 3 }, + "libspatialindex": { "version-string": "1.9.0", "port-version": 0 }, + "libspatialite": { "version-string": "4.3.0a", "port-version": 6 }, + "libspnav": { "version-string": "0.2.3", "port-version": 0 }, + "libsquish": { "version-string": "1.15", "port-version": 7 }, + "libsrt": { "version-string": "1.3.4", "port-version": 0 }, + "libsrtp": { "version-string": "2.2.0", "port-version": 0 }, + "libssh": { "version-string": "0.9.5", "port-version": 0 }, + "libssh2": { "version-string": "1.9.0", "port-version": 0 }, + "libstemmer": { "version-string": "2017-9", "port-version": 5 }, + "libstk": { "version-string": "4.6.1", "port-version": 0 }, + "libsvm": { "version-string": "323", "port-version": 1 }, + "libtheora": { "version-string": "1.2.0alpha1-20170719", "port-version": 2 }, + "libtins": { "version-string": "4.3", "port-version": 0 }, + "libtomcrypt": { "version-string": "1.18.2", "port-version": 1 }, + "libtommath": { "version-string": "1.2.0", "port-version": 1 }, + "libtorrent": { "version-string": "1.2.10", "port-version": 2 }, + "libu2f-server": { "version-string": "1.1.0", "port-version": 2 }, + "libudis86": { "version-string": "2018-01-28", "port-version": 56 }, + "libudns": { "version-string": "0.4", "port-version": 2 }, + "libui": { "version-string": "2018-11-03", "port-version": 1 }, + "libunibreak": { "version-string": "4.3", "port-version": 0 }, + "libusb": { "version-string": "1.0.23", "port-version": 3 }, + "libusb-win32": { "version-string": "1.2.6.0", "port-version": 6 }, + "libusbmuxd": { "version-string": "1.2.219", "port-version": 0 }, + "libuuid": { "version-string": "1.0.3", "port-version": 7 }, + "libuv": { "version-string": "1.39.0", "port-version": 0 }, + "libvmdk": { "version-string": "20200926", "port-version": 0 }, + "libvorbis": { "version-string": "1.3.7", "port-version": 1 }, + "libvpx": { "version-string": "1.9.0", "port-version": 3 }, + "libwandio": { "version-string": "4.2.1", "port-version": 3 }, + "libwebm": { "version-string": "1.0.0.27", "port-version": 5 }, + "libwebp": { "version-string": "1.1.0", "port-version": 1 }, + "libwebsockets": { "version-string": "4.1.3", "port-version": 1 }, + "libxdiff": { "version-string": "0.23", "port-version": 0 }, + "libxlsxwriter": { "version-string": "0.9.4", "port-version": 0 }, + "libxml2": { "version-string": "2.9.10", "port-version": 1 }, + "libxmlmm": { "version-string": "0.6.0", "port-version": 0 }, + "libxmlpp": { "version-string": "2.40.1", "port-version": 6 }, + "libxmp-lite": { "version-string": "4.4.1", "port-version": 6 }, + "libxslt": { "version-string": "1.1.33", "port-version": 8 }, + "libyaml": { "version-string": "0.2.5", "port-version": 0 }, + "libyuv": { "version-string": "fec9121", "port-version": 3 }, + "libzen": { "version-string": "0.4.38", "port-version": 0 }, + "libzip": { "version-string": "1.7.3", "port-version": 0 }, + "libzippp": { "version-string": "4.0-1.7.3", "port-version": 2 }, + "licensepp": { "version-string": "2020-05-19", "port-version": 1 }, + "lilv": { "version-string": "0.24.10", "port-version": 0 }, + "linalg": { "version-string": "2.1", "port-version": 0 }, + "linenoise-ng": { "version-string": "4754bee2d8eb3", "port-version": 1 }, + "live555": { "version-string": "latest", "port-version": 1 }, + "llgl": { "version-string": "2019-08-15", "port-version": 0 }, + "llvm": { "version-string": "10.0.0", "port-version": 7 }, + "lmdb": { "version-string": "0.9.24", "port-version": 0 }, + "lodepng": { "version-string": "2020-03-15", "port-version": 0 }, + "log4cplus": { "version-string": "2.0.5", "port-version": 1 }, + "log4cpp": { "version-string": "2.9.1", "port-version": 3 }, + "log4cxx": { "version-string": "0.11.0", "port-version": 1 }, + "loguru": { "version-string": "2.1.0", "port-version": 1 }, + "lpeg": { "version-string": "1.0.2", "port-version": 1 }, + "lua": { "version-string": "5.4.1", "port-version": 0 }, + "luabridge": { "version-string": "2.6", "port-version": 0 }, + "luafilesystem": { "version-string": "1.8.0", "port-version": 1 }, + "luajit": { "version-string": "2.0.5", "port-version": 3 }, + "luasocket": { "version-string": "2020-09-14", "port-version": 0 }, + "lv2": { "version-string": "1.18.0", "port-version": 0 }, + "lz4": { "version-string": "1.9.2", "port-version": 2 }, + "lzfse": { "version-string": "1.0", "port-version": 2 }, + "lzo": { "version-string": "2.10", "port-version": 5 }, + "lzokay": { "version-string": "2020-07-30", "port-version": 0 }, + "magic-enum": { "version-string": "0.7.0", "port-version": 0 }, + "magic-get": { "version-string": "2019-09-02", "port-version": 1 }, + "magnum": { "version-string": "2020.06", "port-version": 1 }, + "magnum-extras": { "version-string": "2020.06", "port-version": 0 }, + "magnum-integration": { "version-string": "2020.06", "port-version": 0 }, + "magnum-plugins": { "version-string": "2020.06", "port-version": 1 }, + "mapbox-variant": { "version-string": "1.2.0", "port-version": 0 }, + "marble": { "version-string": "19.08.2", "port-version": 0 }, + "marl": { "version-string": "2020-10-10", "port-version": 0 }, + "mathc": { "version-string": "2019-09-29", "port-version": 0 }, + "mathgl": { "version-string": "2.4.3", "port-version": 6 }, + "matio": { "version-string": "1.5.17", "port-version": 0 }, + "matplotlib-cpp": { "version-string": "2020-08-27", "port-version": 0 }, + "matroska": { "version-string": "1.6.2", "port-version": 0 }, + "mbedtls": { "version-string": "2.24.0", "port-version": 1 }, + "mcpp": { "version-string": "2.7.2.14", "port-version": 2 }, + "mdnsresponder": { "version-string": "765.30.11", "port-version": 2 }, + "mecab": { "version-string": "2019-09-25", "port-version": 1 }, + "memorymodule": { "version-string": "2019-12-31", "port-version": 0 }, + "meschach": { "version-string": "1.2b", "port-version": 3 }, + "meshoptimizer": { "version-string": "0.14", "port-version": 1 }, + "metis": { "version-string": "5.1.0", "port-version": 7 }, + "metrohash": { "version-string": "1.1.3", "port-version": 1 }, + "mgnlibs": { "version-string": "2019-09-29", "port-version": 0 }, + "mhook": { "version-string": "2.5.1", "port-version": 1 }, + "microsoft-signalr": { "version-string": "0.1.0-alpha1", "port-version": 1 }, + "mikktspace": { "version-string": "2020-10-06", "port-version": 0 }, + "milerius-sfml-imgui": { "version-string": "1.1", "port-version": 2 }, + "mimalloc": { "version-string": "1.6.4", "port-version": 0 }, + "minc": { "version-string": "2.4.03", "port-version": 0 }, + "minhook": { "version-string": "1.3.3", "port-version": 1 }, + "minifb": { "version-string": "2019-08-20", "port-version": 1 }, + "minimp3": { "version-string": "2019-07-24", "port-version": 1 }, + "minisat-master-keying": { "version-string": "2.2-mod", "port-version": 2 }, + "minitrace": { "version-string": "2019.02.06", "port-version": 0 }, + "miniupnpc": { "version-string": "2.1", "port-version": 1 }, + "miniz": { "version-string": "2.1.0", "port-version": 1 }, + "minizip": { "version-string": "1.2.11", "port-version": 7 }, + "mio": { "version-string": "2019-02-10", "port-version": 0 }, + "mlpack": { "version-string": "3.4.1", "port-version": 0 }, + "mman": { "version-string": "git-f5ff813", "port-version": 3 }, + "mmloader": { "version-string": "2020-05-15", "port-version": 0 }, + "mmx": { "version-string": "2019-09-29", "port-version": 0 }, + "modp-base64": { "version-string": "2020-09-26", "port-version": 0 }, + "mongo-c-driver": { "version-string": "1.16.1-1", "port-version": 1 }, + "mongo-cxx-driver": { "version-string": "3.4.0-5", "port-version": 1 }, + "mongoose": { "version-string": "6.15", "port-version": 2 }, + "monkeys-audio": { "version-string": "5.59", "port-version": 0 }, + "moos-core": { "version-string": "10.4.0", "port-version": 4 }, + "moos-essential": { "version-string": "10.0.1", "port-version": 2 }, + "moos-ui": { "version-string": "10.0.1", "port-version": 2 }, + "morton-nd": { "version-string": "3.0.0", "port-version": 0 }, + "mosquitto": { "version-string": "1.6.8", "port-version": 3 }, + "mozjpeg": { "version-string": "2020-06-02", "port-version": 1 }, + "mp-units": { "version-string": "0.6.0", "port-version": 0 }, + "mp3lame": { "version-string": "3.100", "port-version": 4 }, + "mpark-variant": { "version-string": "1.4.0", "port-version": 0 }, + "mpfr": { "version-string": "4.0.2", "port-version": 2 }, + "mpg123": { "version-string": "1.26.3", "port-version": 0 }, + "mpi": { "version-string": "1", "port-version": 0 }, + "mpir": { "version-string": "3.0.0", "port-version": 10 }, + "mpmcqueue": { "version-string": "2019-07-26", "port-version": 0 }, + "mqtt-cpp": { "version-string": "7.0.1", "port-version": 2 }, + "ms-angle": { "version-string": "alias", "port-version": 0 }, + "ms-gsl": { "version-string": "3.1.0", "port-version": 0 }, + "msgpack": { "version-string": "3.3.0", "port-version": 0 }, + "msgpack11": { "version-string": "0.0.10", "port-version": 1 }, + "msinttypes": { "version-string": "2018-02-25", "port-version": 0 }, + "msix": { "version-string": "1.7", "port-version": 2 }, + "msmpi": { "version-string": "10.1", "port-version": 0 }, + "mstch": { "version-string": "1.0.2", "port-version": 2 }, + "mujs": { "version-string": "2018-07-30", "port-version": 1 }, + "munit": { "version-string": "2019-04-06", "port-version": 0 }, + "muparser": { "version-string": "2.3.2", "port-version": 0 }, + "murmurhash": { "version-string": "2016-01-09", "port-version": 3 }, + "mygui": { "version-string": "2020-06-17", "port-version": 0 }, + "nameof": { "version-string": "0.9.4", "port-version": 0 }, + "nana": { "version-string": "1.7.4", "port-version": 0 }, + "nano-signal-slot": { "version-string": "2.0.1", "port-version": 0 }, + "nanobench": { "version-string": "4.0.0", "port-version": 0 }, + "nanodbc": { "version-string": "2.13.0", "port-version": 0 }, + "nanoflann": { "version-string": "1.3.1", "port-version": 0 }, + "nanogui": { "version-string": "2019-09-23", "port-version": 1 }, + "nanomsg": { "version-string": "1.1.5", "port-version": 2 }, + "nanopb": { "version-string": "2019-02-12", "port-version": 2 }, + "nanoprintf": { "version-string": "2020-05-27", "port-version": 0 }, + "nanorange": { "version-string": "0.0.0", "port-version": 0 }, + "nanort": { "version-string": "2019-08-20", "port-version": 1 }, + "nanovg": { "version-string": "2019-8-30", "port-version": 3 }, + "nativefiledialog": { "version-string": "2019-08-28", "port-version": 0 }, + "neargye-semver": { "version-string": "0.2.2", "port-version": 0 }, + "netcdf-c": { "version-string": "4.7.4", "port-version": 1 }, + "netcdf-cxx4": { "version-string": "4.3.1", "port-version": 2 }, + "nethost": { "version-string": "2019-12-21", "port-version": 0 }, + "nettle": { "version-string": "3.5.1", "port-version": 4 }, + "networkdirect-sdk": { "version-string": "2.0.1", "port-version": 0 }, + "nghttp2": { "version-string": "1.39.2", "port-version": 2 }, + "ngspice": { "version-string": "32", "port-version": 1 }, + "nifticlib": { "version-string": "2020-04-30", "port-version": 0 }, + "nlohmann-fifo-map": { "version-string": "2018.05.07", "port-version": 1 }, + "nlohmann-json": { "version-string": "3.9.1", "port-version": 0 }, + "nlopt": { "version-string": "2.6.2", "port-version": 1 }, + "nmap": { "version-string": "7.70", "port-version": 4 }, + "nmslib": { "version-string": "2.0.6", "port-version": 0 }, + "nng": { "version-string": "1.3.2", "port-version": 0 }, + "nngpp": { "version-string": "1.3.0", "port-version": 0 }, + "nonius": { "version-string": "2019-04-20", "port-version": 1 }, + "nowide": { "version-string": "11.0.0", "port-version": 0 }, + "nrf-ble-driver": { "version-string": "4.1.2", "port-version": 0 }, + "nt-wrapper": { "version-string": "2019-08-10", "port-version": 0 }, + "nuklear": { "version-string": "2020-09-14", "port-version": 0 }, + "numactl": { "version-string": "2.0.12", "port-version": 0 }, + "numcpp": { "version-string": "2.1.0", "port-version": 0 }, + "nuspell": { "version-string": "4.0.1", "port-version": 0 }, + "nvtt": { "version-string": "2.1.2", "port-version": 1 }, + "oatpp": { "version-string": "1.2.0", "port-version": 1 }, + "oatpp-consul": { "version-string": "1.2.0", "port-version": 1 }, + "oatpp-curl": { "version-string": "1.2.0", "port-version": 2 }, + "oatpp-libressl": { "version-string": "1.2.0", "port-version": 1 }, + "oatpp-mbedtls": { "version-string": "1.2.0", "port-version": 1 }, + "oatpp-mongo": { "version-string": "1.2.0", "port-version": 1 }, + "oatpp-postgresql": { "version-string": "1.2.0", "port-version": 1 }, + "oatpp-sqlite": { "version-string": "1.2.0", "port-version": 1 }, + "oatpp-swagger": { "version-string": "1.2.0", "port-version": 1 }, + "oatpp-websocket": { "version-string": "1.2.0", "port-version": 1 }, + "oatpp-zlib": { "version-string": "1.2.0", "port-version": 1 }, + "observer-ptr-lite": { "version-string": "0.4.0", "port-version": 0 }, + "ocilib": { "version-string": "4.7.1", "port-version": 0 }, + "octomap": { "version-string": "1.9.5", "port-version": 0 }, + "ode": { "version-string": "0.16.1", "port-version": 0 }, + "offscale-libetcd-cpp": { "version-string": "2019-07-10", "port-version": 1 }, + "ogdf": { "version-string": "2019-08-23", "port-version": 1 }, + "ogre": { "version-string": "1.12.9", "port-version": 3 }, + "ogre-next": { "version-string": "2019-10-20", "port-version": 1 }, + "ois": { "version-string": "1.5", "port-version": 1 }, + "ompl": { "version-string": "1.5.0", "port-version": 1 }, + "oniguruma": { "version-string": "6.9.4", "port-version": 0 }, + "onnxruntime-gpu": { "version-string": "1.5.1", "port-version": 0 }, + "open62541": { "version-string": "1.1.2", "port-version": 0 }, + "openal-soft": { "version-string": "1.20.1", "port-version": 5 }, + "openblas": { "version-string": "0.3.10", "port-version": 0 }, + "opencascade": { "version-string": "7.4.0", "port-version": 1 }, + "opencc": { "version-string": "2020-04-26", "port-version": 7 }, + "opencensus-cpp": { "version-string": "0.4.0", "port-version": 1 }, + "opencl": { "version-string": "2.2", "port-version": 5 }, + "opencolorio": { "version-string": "1.1.1", "port-version": 4 }, + "opencolorio-tools": { "version-string": "1.1.1", "port-version": 0 }, + "opencsg": { "version-string": "1.4.2", "port-version": 1 }, + "opencv": { "version-string": "4.3.0", "port-version": 0 }, + "opencv2": { "version-string": "2.4.13.7", "port-version": 3 }, + "opencv3": { "version-string": "3.4.10", "port-version": 2 }, + "opencv4": { "version-string": "4.3.0", "port-version": 4 }, + "opendnp3": { "version-string": "3.1.0", "port-version": 0 }, + "openexr": { "version-string": "2.5.0", "port-version": 1 }, + "opengl": { "version-string": "0.0", "port-version": 7 }, + "opengl-registry": { "version-string": "2020-03-25", "port-version": 0 }, + "openigtlink": { "version-string": "3.0", "port-version": 0 }, + "openimageio": { "version-string": "2.1.16.0", "port-version": 4 }, + "openjpeg": { "version-string": "2.3.1", "port-version": 2 }, + "openmama": { "version-string": "6.3.1", "port-version": 0 }, + "openmesh": { "version-string": "8.1", "port-version": 0 }, + "openmpi": { "version-string": "4.0.3", "port-version": 3 }, + "openmvg": { "version-string": "1.6", "port-version": 0 }, + "openmvs": { "version-string": "1.1", "port-version": 4 }, + "openni2": { "version-string": "2.2.0.33", "port-version": 11 }, + "openscap": { "version-string": "1.3.1", "port-version": 0 }, + "openssl": { "version-string": "1.1.1h", "port-version": 2 }, + "openssl-unix": { "version-string": "1.1.1h", "port-version": 1 }, + "openssl-uwp": { "version-string": "1.1.1h", "port-version": 1 }, + "openssl-windows": { "version-string": "1.1.1h", "port-version": 1 }, + "opensubdiv": { "version-string": "3.4.3", "port-version": 0 }, + "opentracing": { "version-string": "1.6.0", "port-version": 0 }, + "openvdb": { "version-string": "7.1.0", "port-version": 0 }, + "openvpn3": { "version-string": "3.4.1", "port-version": 1 }, + "openvr": { "version-string": "1.12.5", "port-version": 0 }, + "openxr-loader": { "version-string": "1.0.11", "port-version": 1 }, + "optional-bare": { "version-string": "1.1.0", "port-version": 0 }, + "optional-lite": { "version-string": "3.2.0", "port-version": 0 }, + "opus": { "version-string": "1.3.1", "port-version": 5 }, + "opusfile": { "version-string": "0.12", "port-version": 0 }, + "orc": { "version-string": "1.6.4", "port-version": 1 }, + "orocos-kdl": { "version-string": "1.4", "port-version": 3 }, + "osg": { "version-string": "3.6.5", "port-version": 3 }, + "osg-qt": { "version-string": "Qt4", "port-version": 3 }, + "osgearth": { "version-string": "3.0", "port-version": 2 }, + "osi": { "version-string": "0.108.6", "port-version": 0 }, + "otl": { "version-string": "4.0.455", "port-version": 0 }, + "outcome": { "version-string": "2.1.3", "port-version": 0 }, + "p-ranav-csv": { "version-string": "2019-07-11", "port-version": 0 }, + "p-ranav-csv2": { "version-string": "2020-06-02", "port-version": 0 }, + "paho-mqtt": { "version-string": "1.3.5", "port-version": 0 }, + "paho-mqttpp3": { "version-string": "1.1", "port-version": 1 }, + "pango": { "version-string": "1.40.11", "port-version": 8 }, + "pangolin": { "version-string": "0.5", "port-version": 11 }, + "pangomm": { "version-string": "2.40.1", "port-version": 3 }, + "parallel-hashmap": { "version-string": "1.32", "port-version": 0 }, + "parallelstl": { "version-string": "20200330", "port-version": 0 }, + "paraview": { "version-string": "5.8.0", "port-version": 3 }, + "parmetis": { "version-string": "4.0.3", "port-version": 3 }, + "parquet": { "version-string": "0", "port-version": 0 }, + "parson": { "version-string": "2020-09-14", "port-version": 0 }, + "pbc": { "version-string": "0.5.14", "port-version": 4 }, + "pcg": { "version-string": "0.98.1", "port-version": 0 }, + "pcl": { "version-string": "1.11.1", "port-version": 0 }, + "pcre": { "version-string": "8.44", "port-version": 8 }, + "pcre2": { "version-string": "10.35", "port-version": 2 }, + "pdal": { "version-string": "1.7.1", "port-version": 10 }, + "pdal-c": { "version-string": "1.8", "port-version": 2 }, + "pdcurses": { "version-string": "3.9", "port-version": 0 }, + "pdqsort": { "version-string": "2019-07-30", "port-version": 0 }, + "pe-parse": { "version-string": "1.2.0", "port-version": 0 }, + "pegtl": { "version-string": "3.0.0-pre", "port-version": 70971 }, + "pegtl-2": { "version-string": "2.8.3", "port-version": 0 }, + "pfring": { "version-string": "2019-10-17", "port-version": 2 }, + "pfultz2-linq": { "version-string": "2019-05-14", "port-version": 0 }, + "phnt": { "version-string": "2019-05-01", "port-version": 0 }, + "physfs": { "version-string": "3.0.2", "port-version": 2 }, + "physx": { "version-string": "4.1.1", "port-version": 6 }, + "picojson": { "version-string": "1.3.0", "port-version": 1 }, + "picosha2": { "version-string": "2018-07-30", "port-version": 0 }, + "piex": { "version-string": "2019-07-11", "port-version": 0 }, + "pistache": { "version-string": "2019-08-05", "port-version": 0 }, + "pixel": { "version-string": "0.3", "port-version": 1 }, + "pixman": { "version-string": "0.38.4", "port-version": 2 }, + "platform-folders": { "version-string": "4.0.0", "port-version": 6 }, + "plf-colony": { "version-string": "5.33", "port-version": 0 }, + "plf-list": { "version-string": "2019-08-10", "port-version": 0 }, + "plf-nanotimer": { "version-string": "2019-08-10", "port-version": 0 }, + "plf-stack": { "version-string": "2019-08-10", "port-version": 0 }, + "plib": { "version-string": "1.8.5", "port-version": 4 }, + "plibsys": { "version-string": "0.0.4", "port-version": 4 }, + "plog": { "version-string": "1.1.5", "port-version": 0 }, + "plplot": { "version-string": "5.13.0", "port-version": 9 }, + "plustache": { "version-string": "0.4.0", "port-version": 1 }, + "pmdk": { "version-string": "1.9", "port-version": 0 }, + "pngpp": { "version-string": "0.2.10", "port-version": 0 }, + "pngwriter": { "version-string": "0.7.0", "port-version": 2 }, + "poco": { "version-string": "1.10.1", "port-version": 1 }, + "podofo": { "version-string": "0.9.6", "port-version": 12 }, + "poly2tri": { "version-string": "2020-07-21", "port-version": 0 }, + "polyclipping": { "version-string": "6.4.2", "port-version": 6 }, + "polyhook2": { "version-string": "2020-09-22", "port-version": 0 }, + "polymorphic-value": { "version-string": "1.3.0", "port-version": 1 }, + "ponder": { "version-string": "3.0.0", "port-version": 1 }, + "portable-snippets": { "version-string": "2019-09-20", "port-version": 0 }, + "portaudio": { "version-string": "2020-02-02", "port-version": 2 }, + "portmidi": { "version-string": "0.234", "port-version": 0 }, + "ppconsul": { "version-string": "0.5", "port-version": 1 }, + "ppmagic": { "version-string": "2020-07-03", "port-version": 0 }, + "pprint": { "version-string": "2019-07-19", "port-version": 0 }, + "pqp": { "version-string": "1.3", "port-version": 4 }, + "proj": { "version-string": "0", "port-version": 0 }, + "proj4": { "version-string": "6.3.1", "port-version": 2 }, + "prometheus-cpp": { "version-string": "0.10.0", "port-version": 0 }, + "protobuf": { "version-string": "3.13.0", "port-version": 2 }, + "protobuf-c": { "version-string": "1.3.2", "port-version": 2 }, + "protopuf": { "version-string": "1.0.0", "port-version": 0 }, + "protozero": { "version-string": "1.6.8", "port-version": 0 }, + "proxygen": { "version-string": "2020.10.19.00", "port-version": 0 }, + "proxywrapper": { "version-string": "1.0.0", "port-version": 0 }, + "ptex": { "version-string": "2.3.2", "port-version": 2 }, + "pthread": { "version-string": "3.0.0", "port-version": 0 }, + "pthreads": { "version-string": "3.0.0", "port-version": 6 }, + "pugixml": { "version-string": "1.10", "port-version": 2 }, + "pybind11": { "version-string": "2.6.0", "port-version": 0 }, + "pystring": { "version-string": "1.1.3", "port-version": 2 }, + "python2": { "version-string": "2.7.15", "port-version": 2 }, + "python3": { "version-string": "3.8.3", "port-version": 2 }, + "qca": { "version-string": "2.3.1", "port-version": 2 }, + "qcustomplot": { "version-string": "2.0.1", "port-version": 4 }, + "qhull": { "version-string": "8.0.2", "port-version": 0 }, + "qpid-proton": { "version-string": "0.32.0", "port-version": 0 }, + "qscintilla": { "version-string": "2.11.4", "port-version": 2 }, + "qt-advanced-docking-system": { "version-string": "3.6.3", "port-version": 0 }, + "qt5": { "version-string": "5.15.1", "port-version": 0 }, + "qt5-3d": { "version-string": "5.15.1", "port-version": 0 }, + "qt5-activeqt": { "version-string": "5.15.1", "port-version": 0 }, + "qt5-androidextras": { "version-string": "5.15.1", "port-version": 0 }, + "qt5-base": { "version-string": "5.15.1", "port-version": 1 }, + "qt5-canvas3d": { "version-string": "0", "port-version": 0 }, + "qt5-charts": { "version-string": "5.15.1", "port-version": 0 }, + "qt5-connectivity": { "version-string": "5.15.1", "port-version": 1 }, + "qt5-datavis3d": { "version-string": "5.15.1", "port-version": 0 }, + "qt5-declarative": { "version-string": "5.15.1", "port-version": 0 }, + "qt5-doc": { "version-string": "5.15.1", "port-version": 0 }, + "qt5-gamepad": { "version-string": "5.15.1", "port-version": 0 }, + "qt5-graphicaleffects": { "version-string": "5.15.1", "port-version": 0 }, + "qt5-imageformats": { "version-string": "5.15.1", "port-version": 1 }, + "qt5-location": { "version-string": "5.15.1", "port-version": 1 }, + "qt5-macextras": { "version-string": "5.15.1", "port-version": 0 }, + "qt5-modularscripts": { "version-string": "deprecated", "port-version": 0 }, + "qt5-mqtt": { "version-string": "5.15.1", "port-version": 0 }, + "qt5-multimedia": { "version-string": "5.15.1", "port-version": 0 }, + "qt5-networkauth": { "version-string": "5.15.1", "port-version": 0 }, + "qt5-purchasing": { "version-string": "5.15.1", "port-version": 0 }, + "qt5-quickcontrols": { "version-string": "5.15.1", "port-version": 0 }, + "qt5-quickcontrols2": { "version-string": "5.15.1", "port-version": 0 }, + "qt5-remoteobjects": { "version-string": "5.15.1", "port-version": 0 }, + "qt5-script": { "version-string": "5.15.1", "port-version": 0 }, + "qt5-scxml": { "version-string": "5.15.1", "port-version": 0 }, + "qt5-sensors": { "version-string": "5.15.1", "port-version": 0 }, + "qt5-serialbus": { "version-string": "5.15.1", "port-version": 0 }, + "qt5-serialport": { "version-string": "5.15.1", "port-version": 0 }, + "qt5-speech": { "version-string": "5.15.1", "port-version": 0 }, + "qt5-svg": { "version-string": "5.15.1", "port-version": 0 }, + "qt5-tools": { "version-string": "5.15.1", "port-version": 0 }, + "qt5-translations": { "version-string": "5.15.1", "port-version": 0 }, + "qt5-virtualkeyboard": { "version-string": "5.15.1", "port-version": 0 }, + "qt5-wayland": { "version-string": "5.15.1", "port-version": 0 }, + "qt5-webchannel": { "version-string": "5.15.1", "port-version": 0 }, + "qt5-webengine": { "version-string": "5.15.1", "port-version": 1 }, + "qt5-webglplugin": { "version-string": "5.15.1", "port-version": 0 }, + "qt5-websockets": { "version-string": "5.15.1", "port-version": 0 }, + "qt5-webview": { "version-string": "5.15.1", "port-version": 0 }, + "qt5-winextras": { "version-string": "5.15.1", "port-version": 0 }, + "qt5-x11extras": { "version-string": "5.15.1", "port-version": 0 }, + "qt5-xmlpatterns": { "version-string": "5.15.1", "port-version": 0 }, + "qtkeychain": { "version-string": "0.11.1", "port-version": 0 }, + "quadtree": { "version-string": "2020-04-13", "port-version": 0 }, + "quantlib": { "version-string": "2019-09-02", "port-version": 0 }, + "quaternions": { "version-string": "1.0.0", "port-version": 0 }, + "quazip": { "version-string": "0.9.1", "port-version": 0 }, + "quickfast": { "version-string": "1.5", "port-version": 0 }, + "quickfix": { "version-string": "1.15.1", "port-version": 4 }, + "quill": { "version-string": "1.5.2", "port-version": 0 }, + "quirc": { "version-string": "1.1", "port-version": 0 }, + "qwt": { "version-string": "6.1.5", "port-version": 0 }, + "qwtw": { "version-string": "3.1.0", "port-version": 0 }, + "rabit": { "version-string": "0.1", "port-version": 2 }, + "ragel": { "version-string": "6.10", "port-version": 3 }, + "rang": { "version-string": "3.1.0", "port-version": 0 }, + "range-v3": { "version-string": "0.11.0", "port-version": 0 }, + "range-v3-vs2015": { "version-string": "20151130-vcpkg5", "port-version": 0 }, + "rapidcheck": { "version-string": "2020-08-25", "port-version": 0 }, + "rapidjson": { "version-string": "2020-09-14", "port-version": 0 }, + "rapidxml": { "version-string": "1.13", "port-version": 4 }, + "rapidxml-ns": { "version-string": "1.13.2", "port-version": 0 }, + "rappture": { "version-string": "1.9", "port-version": 0 }, + "raylib": { "version-string": "3.0.0", "port-version": 3 }, + "rbdl": { "version-string": "2.6.0", "port-version": 0 }, + "re2": { "version-string": "2020-10-01", "port-version": 0 }, + "readerwriterqueue": { "version-string": "1.0.3", "port-version": 0 }, + "readline": { "version-string": "0", "port-version": 0 }, + "readline-win32": { "version-string": "5.0", "port-version": 2 }, + "readosm": { "version-string": "1.1.0", "port-version": 3 }, + "realsense2": { "version-string": "2.39.0", "port-version": 0 }, + "recast": { "version-string": "1.5.1", "port-version": 3 }, + "redis-plus-plus": { "version-string": "1.2.1", "port-version": 0 }, + "refl-cpp": { "version-string": "0.12.0", "port-version": 0 }, + "refprop-headers": { "version-string": "2019-04-14", "port-version": 0 }, + "replxx": { "version-string": "0.0.2", "port-version": 2 }, + "reproc": { "version-string": "14.1.0", "port-version": 0 }, + "rest-rpc": { "version-string": "0.07", "port-version": 1 }, + "restbed": { "version-string": "4.7", "port-version": 0 }, + "restclient-cpp": { "version-string": "0.5.2", "port-version": 0 }, + "restinio": { "version-string": "0.6.12", "port-version": 0 }, + "rhash": { "version-string": "1.4.0", "port-version": 0 }, + "riffcpp": { "version-string": "2.2.4", "port-version": 0 }, + "ring-span-lite": { "version-string": "0.3.0", "port-version": 0 }, + "roaring": { "version-string": "2019-03-05", "port-version": 2 }, + "robin-hood-hashing": { "version-string": "3.9.0", "port-version": 0 }, + "robin-map": { "version-string": "0.6.3", "port-version": 0 }, + "rocksdb": { "version-string": "6.13.3", "port-version": 0 }, + "rpclib": { "version-string": "2.2.1", "port-version": 2 }, + "rply": { "version-string": "1.1.4", "port-version": 0 }, + "rs-core-lib": { "version-string": "2020-09-14", "port-version": 0 }, + "rsocket": { "version-string": "2020.05.04.00", "port-version": 1 }, + "rtabmap": { "version-string": "0.20.3", "port-version": 1 }, + "rtlsdr": { "version-string": "2020-04-16", "port-version": 1 }, + "rtmidi": { "version-string": "4.0.0", "port-version": 2 }, + "rttr": { "version-string": "0.9.6", "port-version": 2 }, + "rxcpp": { "version-string": "4.1.0", "port-version": 1 }, + "rxqt": { "version-string": "bb2138c", "port-version": 0 }, + "rxspencer": { "version-string": "2020-01-12", "port-version": 0 }, + "ryml": { "version-string": "2020-04-12", "port-version": 0 }, + "ryu": { "version-string": "2.0", "port-version": 2 }, + "safeint": { "version-string": "3.24", "port-version": 0 }, + "sais": { "version-string": "2.4.1", "port-version": 1 }, + "sajson": { "version-string": "2018-09-21", "port-version": 0 }, + "scintilla": { "version-string": "4.4.5", "port-version": 0 }, + "sciter": { "version-string": "4.4.3.20", "port-version": 0 }, + "scnlib": { "version-string": "0.3", "port-version": 0 }, + "scylla-wrapper": { "version-string": "2018-08-26", "port-version": 16 }, + "sdformat10": { "version-string": "10.0.0", "port-version": 0 }, + "sdformat6": { "version-string": "6.2.0", "port-version": 1 }, + "sdformat9": { "version-string": "9.2.0", "port-version": 1 }, + "sdl1": { "version-string": "1.2.15", "port-version": 12 }, + "sdl1-net": { "version-string": "1.2.8", "port-version": 3 }, + "sdl2": { "version-string": "2.0.12", "port-version": 7 }, + "sdl2-gfx": { "version-string": "1.0.4", "port-version": 7 }, + "sdl2-image": { "version-string": "2.0.5", "port-version": 0 }, + "sdl2-mixer": { "version-string": "2.0.4", "port-version": 10 }, + "sdl2-net": { "version-string": "2.0.1", "port-version": 8 }, + "sdl2-ttf": { "version-string": "2.0.15", "port-version": 3 }, + "sdl2pp": { "version-string": "0.16.1", "port-version": 0 }, + "seal": { "version-string": "3.5.9", "port-version": 0 }, + "secp256k1": { "version-string": "2017-19-10", "port-version": 3 }, + "selene": { "version-string": "0.3.1", "port-version": 3 }, + "sentencepiece": { "version-string": "v0.1.82", "port-version": 0 }, + "sentry-native": { "version-string": "0.4.4", "port-version": 0 }, + "septag-sx": { "version-string": "2019-05-07", "port-version": 2 }, + "seqan": { "version-string": "2.4.0", "port-version": 1 }, + "serd": { "version-string": "0.30.4", "port-version": 0 }, + "sf2cute": { "version-string": "0.2.0", "port-version": 1 }, + "sfgui": { "version-string": "0.4.0", "port-version": 3 }, + "sfml": { "version-string": "2.5.1", "port-version": 9 }, + "sfsexp": { "version-string": "1.3", "port-version": 0 }, + "shaderc": { "version-string": "2019-06-26", "port-version": 1 }, + "shaderwriter": { "version-string": "2020-10-15", "port-version": 0 }, + "shapelib": { "version-string": "1.5.0", "port-version": 0 }, + "shiva": { "version-string": "1.0", "port-version": 3 }, + "shiva-sfml": { "version-string": "1.0", "port-version": 1 }, + "shogun": { "version-string": "6.1.4", "port-version": 3 }, + "signalrclient": { "version-string": "1.0.0-beta1", "port-version": 9 }, + "sigslot": { "version-string": "1.0.0", "port-version": 3 }, + "simage": { "version-string": "1.8.0", "port-version": 0 }, + "simde": { "version-string": "2019-06-05", "port-version": 0 }, + "simdjson": { "version-string": "0.5.0", "port-version": 0 }, + "simple-fft": { "version-string": "2020-06-14", "port-version": 0 }, + "simpleini": { "version-string": "2018-08-31", "port-version": 4 }, + "skia": { "version-string": "2020-05-18", "port-version": 4 }, + "skyr-url": { "version-string": "1.13.0", "port-version": 0 }, + "slikenet": { "version-string": "2019-10-22", "port-version": 2 }, + "sltbench": { "version-string": "2.4.0", "port-version": 0 }, + "smpeg2": { "version-string": "2.0.0", "port-version": 6 }, + "snappy": { "version-string": "1.1.8", "port-version": 0 }, + "sndfile": { "version-string": "0", "port-version": 0 }, + "snowhouse": { "version-string": "5.0.0", "port-version": 0 }, + "so5extra": { "version-string": "1.4.1", "port-version": 0 }, + "sobjectizer": { "version-string": "5.7.1", "port-version": 0 }, + "soci": { "version-string": "4.0.0", "port-version": 1 }, + "socket-io-client": { "version-string": "1.6.1", "port-version": 1 }, + "sockpp": { "version-string": "0.7", "port-version": 0 }, + "soem": { "version-string": "1.4.0", "port-version": 0 }, + "soil": { "version-string": "2008.07.07", "port-version": 2 }, + "soil2": { "version-string": "release-1.11", "port-version": 1 }, + "sokol": { "version-string": "2019-09-09", "port-version": 0 }, + "sol2": { "version-string": "3.2.2", "port-version": 0 }, + "solid3": { "version-string": "3.5.8", "port-version": 0 }, + "sophus": { "version-string": "1.0.0", "port-version": 6 }, + "soqt": { "version-string": "1.6.0", "port-version": 1 }, + "sord": { "version-string": "0.16.4", "port-version": 0 }, + "soundtouch": { "version-string": "2.0.0", "port-version": 6 }, + "soxr": { "version-string": "0.1.3", "port-version": 3 }, + "spaceland": { "version-string": "7.8.2", "port-version": 4 }, + "span-lite": { "version-string": "0.8.1", "port-version": 0 }, + "sparsehash": { "version-string": "2.0.3", "port-version": 0 }, + "sparsepp": { "version-string": "1.22", "port-version": 1 }, + "spatialite-tools": { "version-string": "4.3.0", "port-version": 5 }, + "spdk": { "version-string": "19.01.1", "port-version": 1 }, + "spdk-dpdk": { "version-string": "20181124", "port-version": 0 }, + "spdk-ipsec": { "version-string": "20180711", "port-version": 0 }, + "spdk-isal": { "version-string": "20181006", "port-version": 0 }, + "spdlog": { "version-string": "1.8.0", "port-version": 1 }, + "spectra": { "version-string": "0.9.0", "port-version": 0 }, + "speex": { "version-string": "1.2.0", "port-version": 7 }, + "speexdsp": { "version-string": "1.2.0", "port-version": 2 }, + "spirit-po": { "version-string": "1.1.2", "port-version": 1 }, + "spirv-cross": { "version-string": "2020-02-26", "port-version": 0 }, + "spirv-headers": { "version-string": "1.5.1", "port-version": 0 }, + "spirv-tools": { "version-string": "2020.1", "port-version": 1 }, + "sprout": { "version-string": "2019-06-20", "port-version": 0 }, + "spscqueue": { "version-string": "1.0", "port-version": 0 }, + "sqlcipher": { "version-string": "4.4.0", "port-version": 1 }, + "sqlite-modern-cpp": { "version-string": "3.2", "port-version": 936 }, + "sqlite-orm": { "version-string": "1.5", "port-version": 2 }, + "sqlite3": { "version-string": "3.33.0", "port-version": 0 }, + "sqlitecpp": { "version-string": "3.1.1", "port-version": 1 }, + "sqlpp11": { "version-string": "0.60", "port-version": 0 }, + "sqlpp11-connector-mysql": { "version-string": "0.29", "port-version": 1 }, + "sqlpp11-connector-sqlite3": { "version-string": "0.30", "port-version": 0 }, + "sratom": { "version-string": "0.6.4", "port-version": 0 }, + "status-value-lite": { "version-string": "1.1.0", "port-version": 0 }, + "stb": { "version-string": "2020-09-14", "port-version": 0 }, + "stlab": { "version-string": "1.5.2", "port-version": 1 }, + "stormlib": { "version-string": "2019-05-10", "port-version": 2 }, + "strict-variant": { "version-string": "0.5", "port-version": 0 }, + "string-theory": { "version-string": "3.4", "port-version": 0 }, + "string-view-lite": { "version-string": "1.3.0", "port-version": 0 }, + "strtk": { "version-string": "2020-09-14", "port-version": 0 }, + "stx": { "version-string": "1.0.1", "port-version": 0 }, + "stxxl": { "version-string": "2018-11-15", "port-version": 2 }, + "suitesparse": { "version-string": "5.8.0", "port-version": 0 }, + "sundials": { "version-string": "3.1.1", "port-version": 2 }, + "superlu": { "version-string": "2020-01-07", "port-version": 2 }, + "symengine": { "version-string": "2020-05-25", "port-version": 0 }, + "systemc": { "version-string": "2.3.3", "port-version": 4 }, + "szip": { "version-string": "2.1.1", "port-version": 6 }, + "tabulate": { "version-string": "2019-01-06", "port-version": 0 }, + "tacopie": { "version-string": "3.2.0", "port-version": 2 }, + "taglib": { "version-string": "1.11.1", "port-version": 20190531 }, + "taocpp-json": { "version-string": "2020-09-14", "port-version": 0 }, + "tap-windows6": { "version-string": "9.21.2", "port-version": 0 }, + "taskflow": { "version-string": "2.6.0", "port-version": 0 }, + "tbb": { "version-string": "2020_U3", "port-version": 2 }, + "tcl": { "version-string": "core-9-0-a1", "port-version": 1 }, + "tclap": { "version-string": "1.2.2", "port-version": 3 }, + "teemo": { "version-string": "2.1", "port-version": 0 }, + "telnetpp": { "version-string": "2.0", "port-version": 4 }, + "tensorflow-cc": { "version-string": "2.3.1", "port-version": 0 }, + "tesseract": { "version-string": "4.1.1", "port-version": 2 }, + "tfhe": { "version-string": "1.0.1", "port-version": 1 }, + "tgbot-cpp": { "version-string": "1.2.1", "port-version": 0 }, + "tgc": { "version-string": "2019-08-11", "port-version": 1 }, + "tgui": { "version-string": "0.8.8", "port-version": 0 }, + "theia": { "version-string": "0.8", "port-version": 3 }, + "think-cell-range": { "version-string": "498839d", "port-version": 1 }, + "thor": { "version-string": "2.0", "port-version": 3 }, + "threadpool": { "version-string": "0.2.5", "port-version": 1 }, + "thrift": { "version-string": "0.13.0", "port-version": 0 }, + "tidy-html5": { "version-string": "5.7.28", "port-version": 2 }, + "tiff": { "version-string": "4.1.0", "port-version": 0 }, + "tinkerforge": { "version-string": "2.1.25", "port-version": 0 }, + "tiny-aes-c": { "version-string": "2019-07-31", "port-version": 0 }, + "tiny-bignum-c": { "version-string": "2019-07-31", "port-version": 0 }, + "tiny-dnn": { "version-string": "2018-10-25", "port-version": 0 }, + "tiny-process-library": { "version-string": "2018-12-06", "port-version": 0 }, + "tiny-regex-c": { "version-string": "2019-07-31", "port-version": 0 }, + "tinycthread": { "version-string": "2019-08-06", "port-version": 0 }, + "tinydir": { "version-string": "1.2.4", "port-version": 0 }, + "tinyexif": { "version-string": "1.0.2", "port-version": 6 }, + "tinyexpr": { "version-string": "2020-09-25", "port-version": 0 }, + "tinyexr": { "version-string": "2020-03-15", "port-version": 0 }, + "tinyfiledialogs": { "version-string": "3.6.3", "port-version": 0 }, + "tinygltf": { "version-string": "2020-07-28", "port-version": 0 }, + "tinynpy": { "version-string": "1.0.0", "port-version": 3 }, + "tinyobjloader": { "version-string": "2.0.0-rc2", "port-version": 0 }, + "tinyply": { "version-string": "2020-05-22", "port-version": 0 }, + "tinyspline": { "version-string": "0.2.0", "port-version": 3 }, + "tinythread": { "version-string": "1.1", "port-version": 3 }, + "tinytoml": { "version-string": "20180219", "port-version": 1 }, + "tinyutf8": { "version-string": "4.0.2", "port-version": 0 }, + "tinyxml": { "version-string": "2.6.2", "port-version": 7 }, + "tinyxml2": { "version-string": "8.0.0", "port-version": 1 }, + "tl-expected": { "version-string": "1.0.0", "port-version": 1 }, + "tl-function-ref": { "version-string": "1.0.0", "port-version": 1 }, + "tl-optional": { "version-string": "1.0.0", "port-version": 1 }, + "tlx": { "version-string": "0.5.20191212", "port-version": 0 }, + "tmx": { "version-string": "1.0.0", "port-version": 2 }, + "tmxlite": { "version-string": "2019-03-05", "port-version": 0 }, + "tmxparser": { "version-string": "2.1.0", "port-version": 4 }, + "toml11": { "version-string": "3.5.0", "port-version": 0 }, + "tomlplusplus": { "version-string": "2.2.0", "port-version": 0 }, + "tool-meson": { "version-string": "0.56.0", "port-version": 0 }, + "torch-th": { "version-string": "2019-04-19", "port-version": 2 }, + "trantor": { "version-string": "1.1.0", "port-version": 0 }, + "tre": { "version-string": "0.8.0", "port-version": 1 }, + "treehopper": { "version-string": "1.11.3", "port-version": 4 }, + "triangle": { "version-string": "1.6", "port-version": 0 }, + "trompeloeil": { "version-string": "38", "port-version": 0 }, + "tsl-hopscotch-map": { "version-string": "2.3.0", "port-version": 0 }, + "tsl-ordered-map": { "version-string": "1.0.0", "port-version": 0 }, + "tsl-sparse-map": { "version-string": "0.6.2", "port-version": 0 }, + "turbobase64": { "version-string": "2020-01-12", "port-version": 0 }, + "tweeny": { "version-string": "3.0", "port-version": 0 }, + "type-lite": { "version-string": "0.1.0", "port-version": 0 }, + "uchardet": { "version-string": "2020-04-26", "port-version": 0 }, + "umock-c": { "version-string": "2020-06-17", "port-version": 1 }, + "unicorn": { "version-string": "2020-09-14", "port-version": 0 }, + "unicorn-lib": { "version-string": "2020-03-02", "port-version": 0 }, + "units": { "version-string": "2.3.1", "port-version": 0 }, + "unittest-cpp": { "version-string": "2.0.0", "port-version": 1 }, + "unixodbc": { "version-string": "2.3.7", "port-version": 2 }, + "unqlite": { "version-string": "1.1.9", "port-version": 0 }, + "unrar": { "version-string": "5.8.1", "port-version": 0 }, + "upb": { "version-string": "2020-08-19", "port-version": 0 }, + "urdfdom": { "version-string": "1.0.4", "port-version": 3 }, + "urdfdom-headers": { "version-string": "1.0.5", "port-version": 1 }, + "uriparser": { "version-string": "0.9.4", "port-version": 0 }, + "usbmuxd": { "version-string": "1.2.235", "port-version": 0 }, + "usd": { "version-string": "20.08", "port-version": 0 }, + "usockets": { "version-string": "0.6.0", "port-version": 0 }, + "usrsctp": { "version-string": "0db9691", "port-version": 0 }, + "utf8h": { "version-string": "2020-06-14", "port-version": 0 }, + "utf8proc": { "version-string": "2.5.0", "port-version": 0 }, + "utfcpp": { "version-string": "3.1.2", "port-version": 1 }, + "utfz": { "version-string": "1.2", "port-version": 1 }, + "uthenticode": { "version-string": "1.0.4", "port-version": 0 }, + "uvatlas": { "version-string": "aug2020", "port-version": 0 }, + "uvw": { "version-string": "2.7.0", "port-version": 0 }, + "uwebsockets": { "version-string": "18.13.0", "port-version": 0 }, + "v-hacd": { "version-string": "3.2.0", "port-version": 1 }, + "v8": { "version-string": "8.6.395.17", "port-version": 0 }, + "valijson": { "version-string": "2018-11-17", "port-version": 1 }, + "value-ptr-lite": { "version-string": "0.2.1", "port-version": 0 }, + "variant-lite": { "version-string": "1.2.2", "port-version": 0 }, + "vc": { "version-string": "1.4.1", "port-version": 0 }, + "vcglib": { "version-string": "1.0.1", "port-version": 0 }, + "vcpkg-gfortran": { "version-string": "3", "port-version": 0 }, + "vectorclass": { "version-string": "2.00.01", "port-version": 0 }, + "visit-struct": { "version-string": "1.0", "port-version": 1 }, + "vlfeat": { "version-string": "2020-07-10", "port-version": 0 }, + "vlpp": { "version-string": "0.11.0.0", "port-version": 0 }, + "volk": { "version-string": "2019-09-26", "port-version": 0 }, + "vs-yasm": { "version-string": "0.5.0", "port-version": 1 }, + "vtk": { "version-string": "9.0.1", "port-version": 2 }, + "vtk-dicom": { "version-string": "0.8.12", "port-version": 1 }, + "vtk-m": { "version-string": "1.5.0", "port-version": 0 }, + "vulkan": { "version-string": "1.1.82.1", "port-version": 1 }, + "vulkan-headers": { "version-string": "1.2.157", "port-version": 0 }, + "vulkan-hpp": { "version-string": "2019-05-11", "port-version": 1 }, + "vulkan-memory-allocator": { "version-string": "2.3.0", "port-version": 0 }, + "vxl": { "version-string": "2.0.2", "port-version": 2 }, + "wampcc": { "version-string": "2019-09-04", "port-version": 0 }, + "wangle": { "version-string": "2020.10.19.00", "port-version": 0 }, + "wavelib": { "version-string": "2020-05-29", "port-version": 0 }, + "wavpack": { "version-string": "5.3.0", "port-version": 0 }, + "websocketpp": { "version-string": "0.8.2", "port-version": 0 }, + "wepoll": { "version-string": "1.5.8", "port-version": 0 }, + "wg21-sg14": { "version-string": "2019-08-13", "port-version": 0 }, + "wil": { "version-string": "2020-05-19", "port-version": 0 }, + "wildmidi": { "version-string": "0.4.3", "port-version": 1 }, + "wincrypt": { "version-string": "0.0", "port-version": 2 }, + "winpcap": { "version-string": "4.1.3", "port-version": 4 }, + "winreg": { "version-string": "3.1.0", "port-version": 0 }, + "winsock2": { "version-string": "0.0", "port-version": 2 }, + "wintoast": { "version-string": "1.2.0", "port-version": 0 }, + "woff2": { "version-string": "1.0.2", "port-version": 0 }, + "wordnet": { "version-string": "3.0", "port-version": 0 }, + "wpilib": { "version-string": "2020.3.2", "port-version": 0 }, + "wren": { "version-string": "2019-07-01", "port-version": 0 }, + "wt": { "version-string": "4.4.0", "port-version": 0 }, + "wtl": { "version-string": "10.0.10077", "port-version": 0 }, + "wxchartdir": { "version-string": "1.0.0", "port-version": 0 }, + "wxwidgets": { "version-string": "3.1.4", "port-version": 3 }, + "x-plane": { "version-string": "3.0.1", "port-version": 1 }, + "x264": { "version-string": "157-303c484ec828ed0", "port-version": 13 }, + "x265": { "version-string": "3.4", "port-version": 0 }, + "xalan-c": { "version-string": "1.11", "port-version": 12 }, + "xbyak": { "version-string": "5.97", "port-version": 0 }, + "xerces-c": { "version-string": "3.2.3", "port-version": 1 }, + "xeus": { "version-string": "0.24.3", "port-version": 0 }, + "xframe": { "version-string": "0.3.0", "port-version": 0 }, + "xlnt": { "version-string": "1.5.0", "port-version": 0 }, + "xmlsec": { "version-string": "1.2.30", "port-version": 1 }, + "xmsh": { "version-string": "0.5.2", "port-version": 1 }, + "xorstr": { "version-string": "2020-02-11", "port-version": 0 }, + "xproperty": { "version-string": "0.8.1", "port-version": 0 }, + "xsimd": { "version-string": "7.4.9", "port-version": 0 }, + "xtensor": { "version-string": "0.21.9", "port-version": 0 }, + "xtensor-blas": { "version-string": "0.17.2", "port-version": 0 }, + "xtensor-fftw": { "version-string": "2019-11-30", "port-version": 0 }, + "xtensor-io": { "version-string": "0.9.0", "port-version": 1 }, + "xtl": { "version-string": "0.6.21", "port-version": 0 }, + "xxhash": { "version-string": "0.8.0", "port-version": 1 }, + "yajl": { "version-string": "2.1.0", "port-version": 1 }, + "yaml-cpp": { "version-string": "0.6.3", "port-version": 0 }, + "yara": { "version-string": "4.0.2", "port-version": 0 }, + "yas": { "version-string": "7.0.5", "port-version": 0 }, + "yasm": { "version-string": "1.3.0", "port-version": 0 }, + "yasm-tool": { "version-string": "2020-10-12", "port-version": 0 }, + "yasm-tool-helper": { "version-string": "2020-10-12", "port-version": 0 }, + "yato": { "version-string": "1.0", "port-version": 2 }, + "yoga": { "version-string": "1.18.0", "port-version": 1 }, + "z3": { "version-string": "4.8.9", "port-version": 0 }, + "z85": { "version-string": "1.0", "port-version": 0 }, + "zeromq": { "version-string": "2019-09-20", "port-version": 1 }, + "zfp": { "version-string": "0.5.5", "port-version": 2 }, + "zkpp": { "version-string": "0.2.3", "port-version": 0 }, + "zlib": { "version-string": "1.2.11", "port-version": 9 }, + "zookeeper": { "version-string": "3.5.5", "port-version": 1 }, + "zopfli": { "version-string": "1.0.3", "port-version": 0 }, + "zserge-webview": { "version-string": "2019-04-27", "port-version": 2 }, + "zstd": { "version-string": "1.4.5", "port-version": 1 }, + "zstr": { "version-string": "1.0.4", "port-version": 0 }, + "zxing-cpp": { "version-string": "3.3.3", "port-version": 8 }, + "zydis": { "version-string": "3.1.0", "port-version": 1 }, + "zyre": { "version-string": "2019-07-07", "port-version": 1 }, + "zziplib": { "version-string": "0.13.71", "port-version": 0 } + } +} \ No newline at end of file diff --git a/port_versions/c-/cpprestsdk.json b/port_versions/c-/cpprestsdk.json new file mode 100644 index 00000000000000..94d3bee03307b0 --- /dev/null +++ b/port_versions/c-/cpprestsdk.json @@ -0,0 +1 @@ +{"versions": [{"git-tree": "1fb06431492f382bb54834c567db83bcb6cabe0b", "version-string": "2.10.16", "port-version": 3}, {"git-tree": "17cb3f7a61a5091087d53dbce2a8c2d328342ee8", "version-string": "2.10.16", "port-version": 2}, {"git-tree": "9e6aa1f352765cab12b207b4c195221bdf43c28b", "version-string": "2.10.16", "port-version": 1}, {"git-tree": "140c63764a9d13e325b065e30fb119d3f3d010a3", "version-string": "2.10.16", "port-version": 0}, {"git-tree": "e47b918125027860a9fff53282af5b5429019c7b", "version-string": "2.10.15", "port-version": 1}, {"git-tree": "2de6826ede1e8e28e1fa1f92afa1aaf0982fcede", "version-string": "2.10.15", "port-version": 0}, {"git-tree": "62ba6e5405bdf0806d8e8408a547e5872b8cba5d", "version-string": "2.10.14", "port-version": 1}, {"git-tree": "9f2e01f4c876c5915b7a685fd431a9ad98fb780f", "version-string": "2.10.14", "port-version": 0}, {"git-tree": "338cfcef457aaff1a329f7feeab92e21b9c96e5a", "version-string": "2.10.13", "port-version": 1}, {"git-tree": "e35cbfd7d6956d26a77f5cd607b129065856bb82", "version-string": "2.10.13", "port-version": 0}, {"git-tree": "64aa62b7a6fbbcdbb81588d23665a8c9f1e933aa", "version-string": "2.10.12", "port-version": 0}, {"git-tree": "4f987cafc2d3ab844221d48a077a766d9a3ee29e", "version-string": "2.10.11", "port-version": 0}, {"git-tree": "191b71a47f0e6220785677363f5d5cea098b5955", "version-string": "2.10.10", "port-version": 0}, {"git-tree": "2b2d0ceec9678fc5e7db0e7556745d8972395b0e", "version-string": "2.10.7", "port-version": 0}, {"git-tree": "d069e89c749dedcbafcef8f7e81e8b45d0658df2", "version-string": "2.10.6", "port-version": 3}, {"git-tree": "172a3a97fcd45e292496211fe91e574176bc66cf", "version-string": "2.10.6", "port-version": 2}, {"git-tree": "124a27eb315f4dc7c6239ab7922472e44e9154ec", "version-string": "2.10.6", "port-version": 1}, {"git-tree": "4598e0984e115a80d224b3fdf1c93f6af248daff", "version-string": "2.10.6", "port-version": 0}, {"git-tree": "3657c1899d91376fab9f85237f0869eaf7956673", "version-string": "2.10.5", "port-version": 0}, {"git-tree": "564f603510f30b61eae4daa39988950ed7d28bbf", "version-string": "2.10.4", "port-version": 0}, {"git-tree": "01dc05ee45ec6244d05ff645f494d6e9c9a8d109", "version-string": "2.10.3", "port-version": 1}, {"git-tree": "46e51015a1c082a2d5c05832ad39924f0470f526", "version-string": "2.10.2", "port-version": 1}, {"git-tree": "8431a5fe877e18bb6429a94ae05bf472d116e032", "version-string": "2.10.2", "port-version": 0}, {"git-tree": "78735f0f239560b88ec3ff1edd961a07f8d50e4e", "version-string": "2.10.1", "port-version": 1}, {"git-tree": "28426fb1d9d848d07082a0d3e3c7e0496a4c065a", "version-string": "2.10.1", "port-version": 0}, {"git-tree": "589c3b533d10da50f6f69cae7dde72fa78827c4e", "version-string": "2.10.0", "port-version": 0}, {"git-tree": "fa4bd515204c443f85bae314d0913ddc02332756", "version-string": "2.9.0", "port-version": 4}, {"git-tree": "0d9a0686badbc54f5ab73213aec95db2dbae88c3", "version-string": "2.9.0", "port-version": 3}, {"git-tree": "6696c08718d02424257e824f37b07bff3f54eff4", "version-string": "2.9.0", "port-version": 2}, {"git-tree": "c3fe95100142c708c7ba0386d2bb6e4671c3f4ed", "version-string": "2.9.0", "port-version": 1}, {"git-tree": "662d0903cce0892f8322bf3a273f865572ed6f31", "version-string": "2.9.0", "port-version": 0}, {"git-tree": "284d94938a84aa0380cf2f2f97c81281a2f0598a", "version-string": "2.8", "port-version": 0}]} \ No newline at end of file diff --git a/port_versions/o-/openssl-unix.json b/port_versions/o-/openssl-unix.json new file mode 100644 index 00000000000000..4c4931862f20cd --- /dev/null +++ b/port_versions/o-/openssl-unix.json @@ -0,0 +1 @@ +{"versions": [{"git-tree": "dda72388849087e4edb2be900f5448376a6f5215", "version-string": "1.1.1h", "port-version": 1}, {"git-tree": "a5b077133a17a5f5462f7207d4877ca6bf841958", "version-string": "1.1.1h", "port-version": 0}, {"git-tree": "1cc8e80ce46c8cede6d950dce347212c6312189c", "version-string": "1.1.1g", "port-version": 4}, {"git-tree": "e748f5c8aed72f12c497a9221da925a7d6a7cd57", "version-string": "1.1.1g", "port-version": 3}, {"git-tree": "6d04f385c7123a4b2984f7787a28a5b72295b811", "version-string": "1.1.1g", "port-version": 2}, {"git-tree": "c54172f82c408954edffbd786e96b0b36ff9ccad", "version-string": "1.1.1g", "port-version": 1}, {"git-tree": "79e66433bc9077347892e042225a9205d64d283e", "version-string": "1.1.1g", "port-version": 0}, {"git-tree": "cd64682e77b61d0ce90a3e7d56f8df8f787b9548", "version-string": "1.1.1d", "port-version": 4}, {"git-tree": "1487efaaf621741639191e356e947a4118739035", "version-string": "1.1.1d", "port-version": 3}, {"git-tree": "b287227ab19c508b3257da5e6b7072278121b335", "version-string": "1.1.1d", "port-version": 2}, {"git-tree": "9d3d306d309bc95abfb88bbfa5fd46e473f016d2", "version-string": "1.1.1d", "port-version": 1}, {"git-tree": "d76be8657a6e5128eb8769d468524aea99635832", "version-string": "1.0.2s", "port-version": 1}, {"git-tree": "34b9a3c2530b7a4e7cbdae74181098427c076a26", "version-string": "1.0.2s", "port-version": 0}, {"git-tree": "68f20b0128ed20998e8f641abca309eb27ab881c", "version-string": "1.0.2q", "port-version": 0}, {"git-tree": "532c0cc2adbcf0800c9dad5df9c900a28672cdf6", "version-string": "1.0.2s", "port-version": 0}, {"git-tree": "d4a71f9592772e1e82ea73a04a1b06790297fade", "version-string": "1.0.2q", "port-version": 1}, {"git-tree": "add5af6cc06c5bb82af3f88f7665e34622cf65a5", "version-string": "1.0.2q", "port-version": 0}, {"git-tree": "7ae3ef68f38c470d094bde9c5f934e99dd764ee4", "version-string": "1.0.2p", "port-version": 1}, {"git-tree": "3ac5f3a46d740a87e1fa9b3245b4e6ed14a9b096", "version-string": "1.0.2p", "port-version": 0}, {"git-tree": "8a6c268d6cf86abad746a527d1c982d77e6957a2", "version-string": "1.0.2o", "port-version": 1}, {"git-tree": "78634dddc1ad87f08f58fcf5b0b83ba575e924eb", "version-string": "1.0.2o", "port-version": 0}]} \ No newline at end of file diff --git a/port_versions/o-/openssl-uwp.json b/port_versions/o-/openssl-uwp.json new file mode 100644 index 00000000000000..cf521a110ea402 --- /dev/null +++ b/port_versions/o-/openssl-uwp.json @@ -0,0 +1 @@ +{"versions": [{"git-tree": "84398c4b851a28c5ca622c249d51c17d023518b7", "version-string": "1.1.1h", "port-version": 1}, {"git-tree": "f84d47f34d9789ef793f45431c06ed4085f43e34", "version-string": "1.1.1h", "port-version": 0}, {"git-tree": "e3a2926149036f4d8aa134ce92a8517702ee37c0", "version-string": "1.1.1h", "port-version": 1}, {"git-tree": "a69449619d734794b6385c36b3a5d00f108d9dd3", "version-string": "1.1.1h", "port-version": 0}, {"git-tree": "fba260d6fcf7baa0e925c0a7e551f9d6e1082dcc", "version-string": "1.1.1g", "port-version": 1}, {"git-tree": "87f250780a2f75d91e9ed8c0b4ba3a18669780a5", "version-string": "1.1.1g", "port-version": 0}, {"git-tree": "1bcb70f892ae3a4a8c221f39a5139b479a407e7f", "version-string": "1.1.1d", "port-version": 1}, {"git-tree": "fa8cdbc92010c7e9b6e30f41cb0f543e95023973", "version-string": "1.1.1d", "port-version": 0}, {"git-tree": "8d0505ed5d06120e35c08eb9296b19e8bb8506eb", "version-string": "1.0.2r", "port-version": 1}, {"git-tree": "677fd281086ecd5e0a6801306f2741e7718c8093", "version-string": "1.0.2r", "port-version": 0}, {"git-tree": "8b88b0ffaf55e0d3804807cf92c0e57f579b9c73", "version-string": "1.0.2q-winrt", "port-version": 2}, {"git-tree": "85472d04fa7e3002ccdfc7729557a9c1bd583c60", "version-string": "1.0.2q-winrt", "port-version": 1}, {"git-tree": "5596ed33ca4b2be4d1d190b963ed6f19cf45b510", "version-string": "1.0.2q-winrt", "port-version": 0}, {"git-tree": "8b22d47210619fd3b6a38bdc999a6f6cb7ee23b1", "version-string": "1.0.2l-winrt", "port-version": 0}]} \ No newline at end of file diff --git a/port_versions/o-/openssl-windows.json b/port_versions/o-/openssl-windows.json new file mode 100644 index 00000000000000..65477de2f85139 --- /dev/null +++ b/port_versions/o-/openssl-windows.json @@ -0,0 +1 @@ +{"versions": [{"git-tree": "526d4688d5ca8cdcbac22b8ff18f9aac10a8c695", "version-string": "1.1.1h", "port-version": 1}, {"git-tree": "3243016be13f2cd1c0ab38519b59f4660770acf5", "version-string": "1.1.1h", "port-version": 0}, {"git-tree": "22c37a71ae89dd3856bb6c81f0e59f804873acba", "version-string": "1.1.1g", "port-version": 1}, {"git-tree": "054a2e92258c48208eecda2bdbc32c9dcdc52dfb", "version-string": "1.1.1g", "port-version": 0}, {"git-tree": "3918271375b0ff99b187ef3d357b3d391bc42050", "version-string": "1.1.1d", "port-version": 2}, {"git-tree": "dfe5545ce043f440d9d4ab06e7548c495b334e36", "version-string": "1.1.1d", "port-version": 1}, {"git-tree": "aa4cf0f1e723b452cdfce53989bbf73bb4acc847", "version-string": "1.1.1d", "port-version": 0}, {"git-tree": "911361ba8124500e840b359ab0972887b65c69ae", "version-string": "1.0.2s", "port-version": 2}, {"git-tree": "cab1a598632203ea232d8794fe1cb0d9489c62ee", "version-string": "1.0.2s", "port-version": 1}, {"git-tree": "3c70e410a627bb3b67a34c0d8e79f784641f7dea", "version-string": "1.0.2q", "port-version": 2}, {"git-tree": "4f32bcc4a79399ed840a045165a572d7c16446f9", "version-string": "1.0.2s", "port-version": 1}, {"git-tree": "d3793cca46af28305e662afcf896e55b73396638", "version-string": "1.0.2q", "port-version": 2}, {"git-tree": "ec5d01d75cd9ab48966220fdb644a63764c30cea", "version-string": "1.0.2q", "port-version": 1}, {"git-tree": "12c1959ae6532da0ad5d6531d59eb107c9f94df8", "version-string": "1.0.2q", "port-version": 0}, {"git-tree": "6f75c8b4121807afd813459d36d752c019cdae8b", "version-string": "1.0.2p", "port-version": 1}, {"git-tree": "35f88f577589285a0a1cf5346fc1a2e71260eacd", "version-string": "1.0.2p", "port-version": 0}, {"git-tree": "508bde2de594176023af6270986da999919ab8af", "version-string": "1.0.2o", "port-version": 0}]} \ No newline at end of file diff --git a/port_versions/o-/openssl.json b/port_versions/o-/openssl.json new file mode 100644 index 00000000000000..9b09add2f11da1 --- /dev/null +++ b/port_versions/o-/openssl.json @@ -0,0 +1 @@ +{"versions": [{"git-tree": "fb63ac09918a0e4feffc60057dd5da4b9d6143f4", "version-string": "1.1.1h", "port-version": 2}, {"git-tree": "3d5b8bfd0984b72b432b3d2fb4447dd306e41d0a", "version-string": "1.1.1h", "port-version": 1}, {"git-tree": "10b21b67d6f259baa92845ba0ba06ebb480fe0f7", "version-string": "1.1.1g", "port-version": 1}, {"git-tree": "e96ecf6eebbc0c8356771548127c077e3e7bc676", "version-string": "1.1.1g", "port-version": 0}, {"git-tree": "a54c371df1a58c492721227b808bef69d4c0b6bd", "version-string": "1.1.1d", "port-version": 0}, {"git-tree": "0848995115a67c1818f5f9f2b667083d74dda046", "version-string": "1", "port-version": 0}, {"git-tree": "0a8165857ba19bdc061ef32acd6b7bad442480ed", "version-string": "0", "port-version": 0}, {"git-tree": "39d1773390a9817dd776d1d90e809d873437daa7", "version-string": "1.0.2o", "port-version": 3}, {"git-tree": "86a392547f55fe99da0105cfdb2ce012e0fa5f94", "version-string": "1.0.2o", "port-version": 2}, {"git-tree": "0ae9343f2814cfcfdef9445990d7b0c90495db52", "version-string": "1.0.2o", "port-version": 1}, {"git-tree": "74c8e8bdb3ecafc4d95aabbd076dfbb41db0a366", "version-string": "1.0.2o", "port-version": 0}, {"git-tree": "b0c5618831af164aab62f9b446b225fbf2b33b5e", "version-string": "1.0.2n", "port-version": 3}, {"git-tree": "f1cb0e39d975d255b9dfa2e55802cab0b9fc8355", "version-string": "1.0.2n", "port-version": 2}, {"git-tree": "cd538938214a1f0865641dfbcc9700182e1e5bd9", "version-string": "1.0.2n", "port-version": 1}, {"git-tree": "096e9e1bda009fd51e1b62a6c4b0f0808f22ca02", "version-string": "1.0.2n", "port-version": 0}, {"git-tree": "ae1fc122ee308f89f77bf72f6156ea48ad903e79", "version-string": "1.0.2m", "port-version": 0}, {"git-tree": "799259eabc46bde9958f9d285e4e3695836dec4d", "version-string": "1.0.2l", "port-version": 3}, {"git-tree": "06e68e4988301123770548bbe51a3f2a61993d0f", "version-string": "1.0.2l", "port-version": 2}, {"git-tree": "71c0ea9b022834e916b553b9239cf9e8df4af53b", "version-string": "1.0.2l", "port-version": 1}, {"git-tree": "4bbe7d4ddd39dbaa01b0d1920fa1cbf40e6eea4f", "version-string": "1.0.21", "port-version": 1}, {"git-tree": "c09f7eeae92108f42f6a7b8f887ee48152478697", "version-string": "1.0.2k", "port-version": 5}, {"git-tree": "91a923bc001d2dd39c52ed8ad976da371d47856a", "version-string": "1.0.2k", "port-version": 4}, {"git-tree": "fad4170dd59ac0c0690fee44ccae3b8f6a8e67c5", "version-string": "1.0.2k", "port-version": 3}, {"git-tree": "d78f2dceb034c24a9f19f48dda80181fc6500a3a", "version-string": "1.0.2k", "port-version": 2}, {"git-tree": "f8f125d46bd3e1a3680f33d0d7c7fcf59870efaa", "version-string": "1.0.2k", "port-version": 1}, {"git-tree": "53caaba6ea0df814d3c90589ca9d93a327adaac5", "version-string": "1.0.2j", "port-version": 2}, {"git-tree": "799207c0101ea8fb8e97b59c1855b1cae3148bd4", "version-string": "1.0.2j", "port-version": 1}, {"git-tree": "f18f7a91cacba1703f571e5c0a06c0f6b0d2a13f", "version-string": "1.0.2j", "port-version": 0}, {"git-tree": "c6ad91dbdec35b4d6cb404f39a5a2af454d2ea4d", "version-string": "1.0.2h", "port-version": 1}, {"git-tree": "818861b2d2b76893b113cdfef7c2bd54fae75272", "version-string": "1.0.2j", "port-version": 0}, {"git-tree": "12fd1375cd5c644b9eccc11415eff7e056f58d58", "version-string": "1.0.2h", "port-version": 1}, {"git-tree": "3e5163bcf41573dd2bc14130db52e77599f4131b", "version-string": "1.0.2h", "port-version": 0}]} \ No newline at end of file diff --git a/port_versions/r-/rapidjson.json b/port_versions/r-/rapidjson.json new file mode 100644 index 00000000000000..fc15b2fcf1d64e --- /dev/null +++ b/port_versions/r-/rapidjson.json @@ -0,0 +1 @@ +{"versions": [{"git-tree": "85e20cbcb5a3a60d6f64064055d149e2c2f01534", "version-string": "2020-09-14", "port-version": 0}, {"git-tree": "774a98d1e6f1f3ef3c209842e90c2887178ad8c8", "version-string": "2020-02-08", "port-version": 0}, {"git-tree": "88bad907ef9b4c572dbeca11c491ddb205ae01ef", "version-string": "2019-06-28", "port-version": 0}, {"git-tree": "ed6ea2be90d867ac327d6b89f8813c73e37d40b8", "version-string": "d87b698", "port-version": 1}, {"git-tree": "fa4095045d898afd3a3d64e6b1b3453a7ca99070", "version-string": "d87b698 ", "port-version": 0}, {"git-tree": "19a7ffcae9b4d393546e516274ad8ace062242f6", "version-string": "1.1.0", "port-version": 3}, {"git-tree": "f7425f3a260c69a9bfa207b2cae3ef6a1f57f635", "version-string": "1.1.0", "port-version": 2}, {"git-tree": "70185e740a69c90ef95e1c3cd2081d037dbc54c2", "version-string": "1.1.0", "port-version": 1}, {"git-tree": "d59e788caf8f5d28507589447072d827f0d68fbb", "version-string": "1.1.0", "port-version": 0}, {"git-tree": "c0d8c86470921ef424f9f779ace8d4fda9987c64", "version-string": "1.0.2", "port-version": 1}]} \ No newline at end of file diff --git a/port_versions/z-/zlib.json b/port_versions/z-/zlib.json new file mode 100644 index 00000000000000..61c3d197cd10f0 --- /dev/null +++ b/port_versions/z-/zlib.json @@ -0,0 +1 @@ +{"versions": [{"git-tree": "827111046e37c98153d9d82bb6fa4183b6d728e4", "version-string": "1.2.11", "port-version": 9}, {"git-tree": "068430e3e24fa228c302c808ba99f8a48d126557", "version-string": "1.2.11", "port-version": 8}, {"git-tree": "6a24abc8d789ceacc8aaf7c81e2a3faf1f037d14", "version-string": "1.2.11", "port-version": 7}, {"git-tree": "0efe4e4647fa585e6ac34a250df2d9989825bb90", "version-string": "1.2.11", "port-version": 6}, {"git-tree": "548fc3e95e4755b329cdd40cde7d83a409182469", "version-string": "1.2.11", "port-version": 5}, {"git-tree": "568cdfb5144c8de58daac62bace38cf7d5040e4a", "version-string": "1.2.11", "port-version": 3}, {"git-tree": "6ada5449a413aa717545457cb6e674d1590f1573", "version-string": "1.2.11", "port-version": 2}, {"git-tree": "51525f628e33dc6aa8fd00db8a7b53bc2f392da4", "version-string": "1.2.11", "port-version": 1}, {"git-tree": "356c8b9d736b19e30f83d7ef735d21e0c063c6ca", "version-string": "1.2.11", "port-version": 0}, {"git-tree": "a516e5ee220c8250f21821077d0e3dd517f02631", "version-string": "1.2.10", "port-version": 0}, {"git-tree": "3309ec82cd96d752ff890c441cb20ef49b52bf94", "version-string": "1.2.8", "port-version": 0}]} \ No newline at end of file From ff8a73293ec11601cedba7f030fd339772b68681 Mon Sep 17 00:00:00 2001 From: Victor Romero Date: Tue, 17 Nov 2020 15:49:19 -0800 Subject: [PATCH 19/42] Update .gitignore again --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 837fb32614f875..d12fd1363f3bab 100644 --- a/.gitignore +++ b/.gitignore @@ -296,7 +296,7 @@ __pycache__/ /toolsrc/windows-bootstrap/msbuild.x64.debug/ /toolsrc/windows-bootstrap/msbuild.x64.release/ #ignore db -# /port_versions/ +/port_versions/ #ignore custom triplets /triplets/* #add vcpkg-designed triplets back in From af5f87fee992b4667195ef8bbba29d8d8d7a3a28 Mon Sep 17 00:00:00 2001 From: Victor Romero Date: Wed, 18 Nov 2020 12:23:26 -0800 Subject: [PATCH 20/42] Use JSON deserializer for versions db --- toolsrc/include/vcpkg/versiondeserializers.h | 94 +++++++++++++ toolsrc/src/vcpkg/portfileprovider.cpp | 138 ++++++++----------- toolsrc/src/vcpkg/versiondeserializers.cpp | 2 + 3 files changed, 156 insertions(+), 78 deletions(-) diff --git a/toolsrc/include/vcpkg/versiondeserializers.h b/toolsrc/include/vcpkg/versiondeserializers.h index 24d79ced7ff63b..6a2db04adb376b 100644 --- a/toolsrc/include/vcpkg/versiondeserializers.h +++ b/toolsrc/include/vcpkg/versiondeserializers.h @@ -5,10 +5,26 @@ #include #include +#include #include namespace vcpkg { + struct VersionDbEntry + { + const VersionT version; + const Versions::Scheme scheme; + const std::string git_tree; + + VersionDbEntry(const std::string& version_string, + int port_version, + Versions::Scheme scheme, + const std::string& git_tree) + : version(VersionT(version_string, port_version)), scheme(scheme), git_tree(git_tree) + { + } + }; + struct VersionTDeserializer final : Json::IDeserializer { StringView type_name() const override { return "a version object"; } @@ -33,6 +49,84 @@ namespace vcpkg static VersionTDeserializer instance; }; + struct VersionDbEntryDeserializer final : Json::IDeserializer + { + static constexpr StringLiteral VERSION_RELAXED = "version"; + static constexpr StringLiteral VERSION_SEMVER = "version-semver"; + static constexpr StringLiteral VERSION_STRING = "version-string"; + static constexpr StringLiteral VERSION_DATE = "version-date"; + static constexpr StringLiteral PORT_VERSION = "port-version"; + static constexpr StringLiteral GIT_TREE = "git-tree"; + + StringView type_name() const override { return "a version database entry"; } + View valid_fields() const override + { + static const StringView t[] = { + VERSION_RELAXED, VERSION_SEMVER, VERSION_STRING, VERSION_DATE, PORT_VERSION, GIT_TREE}; + return t; + } + + Optional visit_object(Json::Reader& r, const Json::Object& obj) override + { + std::string version; + int port_version = 0; + std::string git_tree; + Versions::Scheme version_scheme = Versions::Scheme::String; + + // Code shamelessly stolen from sourceparagraph.cpp + static Json::StringDeserializer version_exact_deserializer{"an exact version string"}; + static Json::StringDeserializer version_relaxed_deserializer{"a relaxed version string"}; + static Json::StringDeserializer version_semver_deserializer{"a semantic version string"}; + static Json::StringDeserializer version_date_deserializer{"a date version string"}; + static Json::StringDeserializer git_tree_deserializer("a git object SHA"); + + bool has_exact = r.optional_object_field(obj, VERSION_STRING, version, version_exact_deserializer); + bool has_relax = r.optional_object_field(obj, VERSION_RELAXED, version, version_relaxed_deserializer); + bool has_semver = r.optional_object_field(obj, VERSION_SEMVER, version, version_semver_deserializer); + bool has_date = r.optional_object_field(obj, VERSION_DATE, version, version_date_deserializer); + int num_versions = (int)has_exact + (int)has_relax + (int)has_semver + (int)has_date; + if (num_versions == 0) + { + r.add_generic_error(type_name(), "expected a versioning field (example: ", VERSION_STRING, ")"); + } + else if (num_versions > 1) + { + r.add_generic_error(type_name(), "expected only one versioning field"); + } + else + { + if (has_exact) + version_scheme = Versions::Scheme::String; + else if (has_relax) + version_scheme = Versions::Scheme::Relaxed; + else if (has_semver) + version_scheme = Versions::Scheme::Semver; + else if (has_date) + version_scheme = Versions::Scheme::Date; + else + Checks::unreachable(VCPKG_LINE_INFO); + } + r.optional_object_field(obj, PORT_VERSION, port_version, Json::NaturalNumberDeserializer::instance); + r.required_object_field(type_name(), obj, GIT_TREE, git_tree, git_tree_deserializer); + + return VersionDbEntry(version, port_version, version_scheme, git_tree); + } + + static VersionDbEntryDeserializer instance; + }; + + struct VersionDbEntryArrayDeserializer final : Json::IDeserializer> + { + virtual StringView type_name() const override { return "an array of versions"; } + + virtual Optional> visit_array(Json::Reader& r, const Json::Array& arr) override + { + return r.array_elements(arr, VersionDbEntryDeserializer::instance); + } + + static VersionDbEntryArrayDeserializer instance; + }; + struct BaselineDeserializer final : Json::IDeserializer>> { StringView type_name() const override { return "a baseline object"; } diff --git a/toolsrc/src/vcpkg/portfileprovider.cpp b/toolsrc/src/vcpkg/portfileprovider.cpp index ad49ac749be344..e051a08a3c2745 100644 --- a/toolsrc/src/vcpkg/portfileprovider.cpp +++ b/toolsrc/src/vcpkg/portfileprovider.cpp @@ -1,3 +1,4 @@ + #include #include @@ -10,32 +11,13 @@ #include #include +#include + using namespace vcpkg; +using namespace Versions; namespace { - vcpkg::Versions::VersionSpec extract_version_spec(const std::string& port_name, const Json::Object& version_obj) - { - static const std::map version_schemes{ - {Versions::Scheme::Relaxed, "version"}, - {Versions::Scheme::Semver, "version-semver"}, - {Versions::Scheme::Date, "version-date"}, - {Versions::Scheme::String, "version-string"}}; - - const auto port_version = static_cast(version_obj.get("port-version")->integer()); - - for (auto&& kv_pair : version_schemes) - { - if (const auto version_string = version_obj.get(kv_pair.second)) - { - return Versions::VersionSpec( - port_name, version_string->string().to_string(), port_version, kv_pair.first); - } - } - - Checks::unreachable(VCPKG_LINE_INFO); - } - Optional get_versions_json_path(const VcpkgPaths& paths, const std::string& port_name) { // TODO: Get correct `port_versions` path for the registry the port belongs to, pseudocode below: @@ -55,7 +37,7 @@ namespace Optional get_baseline_json_path(const VcpkgPaths& paths) { const auto baseline_json_path = paths.root / "port_versions" / "baseline.json"; - return paths.get_filesystem().exists(baseline_json_path) ? vcpkg::make_optional(baseline_json_path) : nullopt; + return paths.get_filesystem().exists(baseline_json_path) ? make_optional(baseline_json_path) : nullopt; } } @@ -78,7 +60,7 @@ namespace vcpkg::PortFileProvider return Util::fmap(ports, [](auto&& kvpair) -> const SourceControlFileLocation* { return &kvpair.second; }); } - PathsPortFileProvider::PathsPortFileProvider(const vcpkg::VcpkgPaths& paths_, + PathsPortFileProvider::PathsPortFileProvider(const VcpkgPaths& paths_, const std::vector& overlay_ports_) : paths(paths_) { @@ -131,7 +113,7 @@ namespace vcpkg::PortFileProvider } else { - vcpkg::print_error_message(maybe_scf.error()); + print_error_message(maybe_scf.error()); Checks::exit_with_message( VCPKG_LINE_INFO, "Error: Failed to load port %s from %s", spec, fs::u8string(ports_dir)); } @@ -157,7 +139,7 @@ namespace vcpkg::PortFileProvider } else { - vcpkg::print_error_message(found_scf.error()); + print_error_message(found_scf.error()); Checks::exit_with_message( VCPKG_LINE_INFO, "Error: Failed to load port %s from %s", spec, fs::u8string(ports_dir)); } @@ -199,7 +181,7 @@ namespace vcpkg::PortFileProvider } else { - vcpkg::print_error_message(found_scf.error()); + print_error_message(found_scf.error()); Checks::exit_with_message( VCPKG_LINE_INFO, "Error: Failed to load port %s from %s", spec, fs::u8string(port_directory)); } @@ -275,7 +257,7 @@ namespace vcpkg::PortFileProvider } else { - vcpkg::print_error_message(maybe_scf.error()); + print_error_message(maybe_scf.error()); Checks::exit_with_message( VCPKG_LINE_INFO, "Error: Failed to load port from %s", fs::u8string(ports_dir)); } @@ -309,10 +291,9 @@ namespace vcpkg::PortFileProvider return ret; } - VersionedPortfileProvider::VersionedPortfileProvider(const vcpkg::VcpkgPaths& paths) : paths(paths) { } + VersionedPortfileProvider::VersionedPortfileProvider(const VcpkgPaths& paths) : paths(paths) { } - const std::vector& VersionedPortfileProvider::get_port_versions( - const std::string& port_name) const + const std::vector& VersionedPortfileProvider::get_port_versions(const std::string& port_name) const { auto cache_it = versions_cache.find(port_name); if (cache_it != versions_cache.end()) @@ -321,48 +302,52 @@ namespace vcpkg::PortFileProvider } auto maybe_versions_json_path = get_versions_json_path(paths, port_name); - if (!maybe_versions_json_path.has_value()) - { - // TODO: Handle db version not existing - Checks::exit_fail(VCPKG_LINE_INFO); - } + Checks::check_exit(VCPKG_LINE_INFO, + maybe_versions_json_path.has_value(), + "Couldn't find a versions database file: %s.json.", + port_name); auto versions_json_path = maybe_versions_json_path.value_or_exit(VCPKG_LINE_INFO); auto versions_json = Json::parse_file(VCPKG_LINE_INFO, paths.get_filesystem(), versions_json_path); - - // NOTE: A dictionary would be the best way to store this, for now we use a vector - if (versions_json.first.is_object()) + Checks::check_exit(VCPKG_LINE_INFO, + versions_json.first.is_object(), + "Error: `%s.json` does not have a top level object.", + port_name); + + const auto& versions_object = versions_json.first.object(); + auto maybe_versions_array = versions_object.get("versions"); + Checks::check_exit(VCPKG_LINE_INFO, + maybe_versions_array != nullptr && maybe_versions_array->is_array(), + "Error: `%s.json` does not contain a versions array.", + port_name); + + // Avoid warning treated as error. + if (maybe_versions_array != nullptr) { - const auto& versions_object = versions_json.first.object(); - auto maybe_versions_array = versions_object.get("versions"); - - if (maybe_versions_array && maybe_versions_array->is_array()) - { - const auto& versions_array = maybe_versions_array->array(); - for (const auto& version : versions_array) - { - const auto& version_obj = version.object(); - Versions::VersionSpec spec = extract_version_spec(port_name, version_obj); + Json::Reader r; + std::vector db_entries; + r.visit_in_key(*maybe_versions_array, "versions", db_entries, VersionDbEntryArrayDeserializer::instance); - auto& package_versions = versions_cache[spec.port_name]; - package_versions.push_back(spec); - - auto git_tree = version_obj.get("git-tree")->string().to_string(); - git_tree_cache.emplace(std::move(spec), git_tree); - } - } - else + for (const auto& version : db_entries) { - // TODO: Message error - Checks::exit_fail(VCPKG_LINE_INFO); + std::regex is_commit_sha("^[\\da-f]{40}$"); + Checks::check_exit(VCPKG_LINE_INFO, + std::regex_match(version.git_tree, is_commit_sha), + "Invalid commit SHA in `git-tree` for %s %s: %s", + port_name, + version.version.to_string(), + version.git_tree); + + VersionSpec spec(port_name, version.version, version.scheme); + versions_cache[port_name].push_back(spec); + git_tree_cache[spec] = version.git_tree; } } - return versions_cache.at(port_name); } ExpectedS VersionedPortfileProvider::get_control_file( - const vcpkg::Versions::VersionSpec& version_spec) const + const VersionSpec& version_spec) const { auto cache_it = control_cache.find(version_spec); if (cache_it != control_cache.end()) @@ -370,18 +355,19 @@ namespace vcpkg::PortFileProvider return cache_it->second; } - // Pre-populate cache. + // Pre-populate versions cache. get_port_versions(version_spec.port_name); auto git_tree_cache_it = git_tree_cache.find(version_spec); if (git_tree_cache_it == git_tree_cache.end()) { - // TODO: Try to load port from database - Checks::exit_fail(VCPKG_LINE_INFO); + return Strings::concat("No git object SHA for entry %s at version %s.", + version_spec.port_name, + version_spec.version.to_string()); } const std::string git_tree = git_tree_cache_it->second; - const auto port_directory = paths.git_checkout_port(version_spec.port_name, git_tree); + auto port_directory = paths.git_checkout_port(version_spec.port_name, git_tree); auto maybe_control_file = Paragraphs::try_load_port(paths.get_filesystem(), port_directory); if (auto scf = maybe_control_file.get()) @@ -390,18 +376,15 @@ namespace vcpkg::PortFileProvider { return SourceControlFileLocation{std::move(*scf), std::move(port_directory)}; } - Checks::exit_with_message(VCPKG_LINE_INFO, - "Error: Failed to load port from %s: names did not match: '%s' != '%s'", - fs::u8string(port_directory), - version_spec.port_name, - scf->get()->core_paragraph->name); + return Strings::format("Error: Failed to load port from %s: names did not match: '%s' != '%s'", + fs::u8string(port_directory), + version_spec.port_name, + scf->get()->core_paragraph->name); } - vcpkg::print_error_message(maybe_control_file.error()); - Checks::exit_with_message(VCPKG_LINE_INFO, - "Error: Failed to load port %s from %s", - version_spec.port_name, - fs::u8string(port_directory)); + print_error_message(maybe_control_file.error()); + return Strings::format( + "Error: Failed to load port %s from %s", version_spec.port_name, fs::u8string(port_directory)); } BaselineProvider::BaselineProvider(const VcpkgPaths& paths, const std::string& baseline) @@ -410,7 +393,7 @@ namespace vcpkg::PortFileProvider load_baseline_file(); } - Optional BaselineProvider::get_baseline_version(const std::string& port_name) const + Optional BaselineProvider::get_baseline_version(const std::string& port_name) const { auto it = baselines_cache.find(port_name); if (it != baselines_cache.end()) @@ -448,8 +431,7 @@ namespace vcpkg::PortFileProvider { for (auto&& kv_pair : result) { - baselines_cache.emplace(kv_pair.first, - Versions::VersionSpec(kv_pair.first, kv_pair.second, Versions::Scheme::String)); + baselines_cache.emplace(kv_pair.first, VersionSpec(kv_pair.first, kv_pair.second, Scheme::String)); } } else diff --git a/toolsrc/src/vcpkg/versiondeserializers.cpp b/toolsrc/src/vcpkg/versiondeserializers.cpp index 248ae928030554..f97101be582741 100644 --- a/toolsrc/src/vcpkg/versiondeserializers.cpp +++ b/toolsrc/src/vcpkg/versiondeserializers.cpp @@ -4,5 +4,7 @@ using namespace vcpkg; VersionTDeserializer VersionTDeserializer::instance; BaselineDeserializer BaselineDeserializer::instance; +VersionDbEntryDeserializer VersionDbEntryDeserializer::instance; +VersionDbEntryArrayDeserializer VersionDbEntryArrayDeserializer::instance; Json::StringDeserializer VersionTDeserializer::version_deserializer{"version"}; From ab6127a91e975a53a3fee405e3dfe64276433ac4 Mon Sep 17 00:00:00 2001 From: Victor Romero Date: Wed, 18 Nov 2020 13:29:44 -0800 Subject: [PATCH 21/42] Lazy load baseline file --- toolsrc/include/vcpkg/portfileprovider.h | 11 +++- toolsrc/src/vcpkg/portfileprovider.cpp | 74 ++++++++++++++---------- 2 files changed, 50 insertions(+), 35 deletions(-) diff --git a/toolsrc/include/vcpkg/portfileprovider.h b/toolsrc/include/vcpkg/portfileprovider.h index 1d4e512837859f..558b1d7a897f25 100644 --- a/toolsrc/include/vcpkg/portfileprovider.h +++ b/toolsrc/include/vcpkg/portfileprovider.h @@ -52,6 +52,11 @@ namespace vcpkg::PortFileProvider virtual Optional get_baseline_version(const std::string& port_name) const = 0; }; + namespace details + { + struct BaselineProviderImpl; + } + struct VersionedPortfileProvider : IVersionedPortfileProvider, Util::ResourceBase { explicit VersionedPortfileProvider(const vcpkg::VcpkgPaths& paths); @@ -72,15 +77,15 @@ namespace vcpkg::PortFileProvider struct BaselineProvider : IBaselineProvider, Util::ResourceBase { explicit BaselineProvider(const vcpkg::VcpkgPaths& paths, const std::string& baseline); + ~BaselineProvider(); Optional get_baseline_version(const std::string& port_name) const override; private: - void load_baseline_file() const; + const std::map& get_baseline_cache() const; const vcpkg::VcpkgPaths& paths; const std::string& baseline; - - mutable std::map baselines_cache; + std::unique_ptr m_impl; }; } diff --git a/toolsrc/src/vcpkg/portfileprovider.cpp b/toolsrc/src/vcpkg/portfileprovider.cpp index e051a08a3c2745..ed0135cd673592 100644 --- a/toolsrc/src/vcpkg/portfileprovider.cpp +++ b/toolsrc/src/vcpkg/portfileprovider.cpp @@ -387,57 +387,67 @@ namespace vcpkg::PortFileProvider "Error: Failed to load port %s from %s", version_spec.port_name, fs::u8string(port_directory)); } + namespace details + { + struct BaselineProviderImpl + { + Lazy> baseline_cache; + }; + } + BaselineProvider::BaselineProvider(const VcpkgPaths& paths, const std::string& baseline) - : paths(paths), baseline(baseline) + : paths(paths), baseline(baseline), m_impl(std::make_unique()) { - load_baseline_file(); } + BaselineProvider::~BaselineProvider() { } Optional BaselineProvider::get_baseline_version(const std::string& port_name) const { - auto it = baselines_cache.find(port_name); - if (it != baselines_cache.end()) + const auto& cache = get_baseline_cache(); + auto it = cache.find(port_name); + if (it != cache.end()) { return it->second; } return nullopt; } - void BaselineProvider::load_baseline_file() const + const std::map& BaselineProvider::get_baseline_cache() const { - auto maybe_baseline_file = get_baseline_json_path(paths); - Checks::check_exit(VCPKG_LINE_INFO, maybe_baseline_file.has_value(), "Couldn't find baseline.json"); - auto baseline_file = maybe_baseline_file.value_or_exit(VCPKG_LINE_INFO); + return m_impl->baseline_cache.get_lazy([&]() -> auto { + auto maybe_baseline_file = get_baseline_json_path(paths); + Checks::check_exit(VCPKG_LINE_INFO, maybe_baseline_file.has_value(), "Couldn't find baseline.json"); + auto baseline_file = maybe_baseline_file.value_or_exit(VCPKG_LINE_INFO); - auto value = Json::parse_file(VCPKG_LINE_INFO, paths.get_filesystem(), baseline_file); - if (!value.first.is_object()) - { - Checks::exit_with_message(VCPKG_LINE_INFO, "Error: `baseline.json` does not have a top-level object."); - } + auto value = Json::parse_file(VCPKG_LINE_INFO, paths.get_filesystem(), baseline_file); + if (!value.first.is_object()) + { + Checks::exit_with_message(VCPKG_LINE_INFO, "Error: `baseline.json` does not have a top-level object."); + } - const auto& obj = value.first.object(); - auto baseline_value = obj.get("default"); - if (!baseline_value) - { - Checks::exit_with_message( - VCPKG_LINE_INFO, "Error: `baseline.json` does not contain the baseline \"%s\"", "default"); - } + const auto& obj = value.first.object(); + auto baseline_value = obj.get("default"); + if (!baseline_value) + { + Checks::exit_with_message( + VCPKG_LINE_INFO, "Error: `baseline.json` does not contain the baseline \"%s\"", "default"); + } - Json::Reader r; - std::map> result; - r.visit_in_key(*baseline_value, "default", result, BaselineDeserializer::instance); + Json::Reader r; + std::map> result; + r.visit_in_key(*baseline_value, "default", result, BaselineDeserializer::instance); + if (!r.errors().empty()) + { + Checks::exit_with_message( + VCPKG_LINE_INFO, "Error: failed to parse `baseline.json`:\n%s", Strings::join("\n", r.errors())); + } - if (r.errors().empty()) - { + std::map cache; for (auto&& kv_pair : result) { - baselines_cache.emplace(kv_pair.first, VersionSpec(kv_pair.first, kv_pair.second, Scheme::String)); + cache.emplace(kv_pair.first, VersionSpec(kv_pair.first, kv_pair.second, Scheme::String)); } - } - else - { - Checks::exit_with_message( - VCPKG_LINE_INFO, "Error: failed to parse `baseline.json`:\n%s", Strings::join("\n", r.errors())); - } + return cache; + }); } } From fc817d5d461be64e1a16df8554b440676560e302 Mon Sep 17 00:00:00 2001 From: Victor Romero Date: Wed, 18 Nov 2020 15:29:36 -0800 Subject: [PATCH 22/42] Fetch baseline.json from baseline commit --- toolsrc/include/vcpkg/portfileprovider.h | 2 +- toolsrc/include/vcpkg/vcpkgpaths.h | 26 ++++++ toolsrc/src/vcpkg/portfileprovider.cpp | 10 ++- toolsrc/src/vcpkg/vcpkgpaths.cpp | 103 +++++++++++++++++++++++ 4 files changed, 136 insertions(+), 5 deletions(-) diff --git a/toolsrc/include/vcpkg/portfileprovider.h b/toolsrc/include/vcpkg/portfileprovider.h index 558b1d7a897f25..6be6354d6d8124 100644 --- a/toolsrc/include/vcpkg/portfileprovider.h +++ b/toolsrc/include/vcpkg/portfileprovider.h @@ -85,7 +85,7 @@ namespace vcpkg::PortFileProvider const std::map& get_baseline_cache() const; const vcpkg::VcpkgPaths& paths; - const std::string& baseline; + const std::string baseline; std::unique_ptr m_impl; }; } diff --git a/toolsrc/include/vcpkg/vcpkgpaths.h b/toolsrc/include/vcpkg/vcpkgpaths.h index 2fd04b911750fe..7c6a2ae81ed669 100644 --- a/toolsrc/include/vcpkg/vcpkgpaths.h +++ b/toolsrc/include/vcpkg/vcpkgpaths.h @@ -108,6 +108,32 @@ namespace vcpkg const std::string& get_tool_version(const std::string& tool) const; // Git manipulation + static void git_clone_local(const VcpkgPaths& paths, + const fs::path& local_repo, + const fs::path& dot_git_dir, + const fs::path& work_tree); + + static void git_clone_remote(const VcpkgPaths& paths, + const std::string& remote, + const fs::path& dot_git_dir, + const fs::path& work_tree); + + static void git_checkout_subpath(const VcpkgPaths& paths, + const std::string& commit_sha, + const fs::path& subpath, + const fs::path& local_repo, + const fs::path& destination, + const fs::path& dot_git_dir, + const fs::path& work_tree); + + static void git_checkout_object(const VcpkgPaths& paths, + const std::string& git_object, + const fs::path& local_repo, + const fs::path& destination, + const fs::path& dot_git_dir, + const fs::path& work_tree); + + fs::path git_checkout_baseline(const std::string& commit_sha) const; fs::path git_checkout_port(const std::string& port_name, const std::string& git_tree) const; Optional get_manifest() const; diff --git a/toolsrc/src/vcpkg/portfileprovider.cpp b/toolsrc/src/vcpkg/portfileprovider.cpp index ed0135cd673592..4ec9b192315b96 100644 --- a/toolsrc/src/vcpkg/portfileprovider.cpp +++ b/toolsrc/src/vcpkg/portfileprovider.cpp @@ -1,4 +1,5 @@ + #include #include @@ -34,10 +35,11 @@ namespace return nullopt; } - Optional get_baseline_json_path(const VcpkgPaths& paths) + Optional get_baseline_json_path(const VcpkgPaths& paths, const std::string& baseline_commit_sha) { - const auto baseline_json_path = paths.root / "port_versions" / "baseline.json"; - return paths.get_filesystem().exists(baseline_json_path) ? make_optional(baseline_json_path) : nullopt; + // TODO: Get correct `baseline.json` path for the registry. + const auto baseline_json = paths.git_checkout_baseline(baseline_commit_sha); + return paths.get_filesystem().exists(baseline_json) ? make_optional(baseline_json) : nullopt; } } @@ -415,7 +417,7 @@ namespace vcpkg::PortFileProvider const std::map& BaselineProvider::get_baseline_cache() const { return m_impl->baseline_cache.get_lazy([&]() -> auto { - auto maybe_baseline_file = get_baseline_json_path(paths); + auto maybe_baseline_file = get_baseline_json_path(paths, baseline); Checks::check_exit(VCPKG_LINE_INFO, maybe_baseline_file.has_value(), "Couldn't find baseline.json"); auto baseline_file = maybe_baseline_file.value_or_exit(VCPKG_LINE_INFO); diff --git a/toolsrc/src/vcpkg/vcpkgpaths.cpp b/toolsrc/src/vcpkg/vcpkgpaths.cpp index 1e491ab33c211a..db669c22182eb6 100644 --- a/toolsrc/src/vcpkg/vcpkgpaths.cpp +++ b/toolsrc/src/vcpkg/vcpkgpaths.cpp @@ -465,6 +465,109 @@ If you wish to silence this error and use classic mode, you can: return m_pimpl->m_tool_cache->get_tool_version(*this, tool); } + void VcpkgPaths::git_clone_local(const VcpkgPaths& paths, + const fs::path& local_repo, + const fs::path& dot_git_dir, + const fs::path& work_tree) + { + (void)paths; + (void)local_repo; + (void)dot_git_dir; + (void)work_tree; + // TODO: Implement + Checks::exit_fail(VCPKG_LINE_INFO); + } + + void VcpkgPaths::git_clone_remote(const VcpkgPaths& paths, + const std::string& remote, + const fs::path& dot_git_dir, + const fs::path& work_tree) + { + (void)paths; + (void)remote; + (void)dot_git_dir; + (void)work_tree; + // TODO: Implement + Checks::exit_fail(VCPKG_LINE_INFO); + } + + void VcpkgPaths::git_checkout_subpath(const VcpkgPaths& paths, + const std::string& commit_sha, + const fs::path& subpath, + const fs::path& local_repo, + const fs::path& destination, + const fs::path& dot_git_dir, + const fs::path& work_tree) + { + Files::Filesystem& fs = paths.get_filesystem(); + fs.remove_all(work_tree, VCPKG_LINE_INFO); + fs.remove_all(dot_git_dir, VCPKG_LINE_INFO); + fs.remove_all(destination, VCPKG_LINE_INFO); + + // All git commands are run with: --git-dir={dot_git_dir} --work-tree={work_tree_temp} + // git clone --no-checkout --local {vcpkg_root} {dot_git_dir} + System::CmdLineBuilder clone_cmd_builder = git_cmd_builder(paths, dot_git_dir, work_tree) + .string_arg("clone") + .string_arg("--no-checkout") + .string_arg("--local") + .path_arg(local_repo) + .path_arg(dot_git_dir); + const auto clone_output = System::cmd_execute_and_capture_output(clone_cmd_builder.extract()); + Checks::check_exit(VCPKG_LINE_INFO, + clone_output.exit_code == 0, + "Failed to clone temporary vcpkg instance.\n%s\n", + clone_output.output); + + // git checkout {commit-sha} -- {subpath} + System::CmdLineBuilder checkout_cmd_builder = git_cmd_builder(paths, dot_git_dir, work_tree) + .string_arg("checkout") + .string_arg(commit_sha) + .string_arg("--") + .path_arg(subpath); + const auto checkout_output = System::cmd_execute_and_capture_output(checkout_cmd_builder.extract()); + Checks::check_exit(VCPKG_LINE_INFO, + checkout_output.exit_code == 0, + "Error: Failed to checkout %s:%s\n%s\n", + commit_sha, + fs::u8string(subpath), + checkout_output.output); + + // TODO: Move checked out file(s) to destination. + const fs::path checked_out_path = work_tree / subpath; + + const auto& containing_folder = destination.parent_path(); + if (!fs.exists(containing_folder)) + { + fs.create_directories(containing_folder, VCPKG_LINE_INFO); + } + + std::error_code ec; + fs.rename_or_copy(checked_out_path, destination, ".tmp", ec); + if (ec) + { + System::printf(System::Color::error, + "Error: Couldn't move checked out files from %s to destination %s", + fs::u8string(checked_out_path), + fs::u8string(destination)); + Checks::exit_fail(VCPKG_LINE_INFO); + } + } + + fs::path VcpkgPaths::git_checkout_baseline(const std::string& commit_sha) const + { + const fs::path local_repo = this->root; + const fs::path destination = this->buildtrees / "versioning_tmp" / "baselines" / commit_sha / "baseline.json"; + const fs::path dot_git_dir = this->buildtrees / "versioning_tmp" / ".git"; + const fs::path work_tree = this->buildtrees / "versioning_tmp" / commit_sha; + const fs::path baseline_subpath = fs::path("port_versions") / fs::path("baseline.json"); + + if (!get_filesystem().exists(destination)) + { + git_checkout_subpath(*this, commit_sha, baseline_subpath, local_repo, destination, dot_git_dir, work_tree); + } + return destination; + } + fs::path VcpkgPaths::git_checkout_port(const std::string& port_name, const std::string& git_tree) const { /* Clone a new vcpkg repository instance using the local instance as base. From 9d64b34cca414943d7e80cbfcaf534093b4c1361 Mon Sep 17 00:00:00 2001 From: Victor Romero Date: Wed, 18 Nov 2020 16:51:12 -0800 Subject: [PATCH 23/42] More git abstractions --- toolsrc/src/vcpkg/vcpkgpaths.cpp | 112 ++++++++++++++++++------------- 1 file changed, 65 insertions(+), 47 deletions(-) diff --git a/toolsrc/src/vcpkg/vcpkgpaths.cpp b/toolsrc/src/vcpkg/vcpkgpaths.cpp index db669c22182eb6..c50802c504a5f1 100644 --- a/toolsrc/src/vcpkg/vcpkgpaths.cpp +++ b/toolsrc/src/vcpkg/vcpkgpaths.cpp @@ -543,6 +543,8 @@ If you wish to silence this error and use classic mode, you can: std::error_code ec; fs.rename_or_copy(checked_out_path, destination, ".tmp", ec); + fs.remove_all(work_tree, VCPKG_LINE_INFO); + fs.remove_all(dot_git_dir, VCPKG_LINE_INFO); if (ec) { System::printf(System::Color::error, @@ -553,6 +555,61 @@ If you wish to silence this error and use classic mode, you can: } } + void VcpkgPaths::git_checkout_object(const VcpkgPaths& paths, + const std::string& git_object, + const fs::path& local_repo, + const fs::path& destination, + const fs::path& dot_git_dir, + const fs::path& work_tree) + { + Files::Filesystem& fs = paths.get_filesystem(); + fs.remove_all(work_tree, VCPKG_LINE_INFO); + fs.remove_all(dot_git_dir, VCPKG_LINE_INFO); + fs.remove_all(destination, VCPKG_LINE_INFO); + + // All git commands are run with: --git-dir={dot_git_dir} --work-tree={work_tree_temp} + // git clone --no-checkout --local {vcpkg_root} {dot_git_dir} + System::CmdLineBuilder clone_cmd_builder = git_cmd_builder(paths, dot_git_dir, work_tree) + .string_arg("clone") + .string_arg("--no-checkout") + .string_arg("--local") + .path_arg(local_repo) + .path_arg(dot_git_dir); + const auto clone_output = System::cmd_execute_and_capture_output(clone_cmd_builder.extract()); + Checks::check_exit(VCPKG_LINE_INFO, + clone_output.exit_code == 0, + "Failed to clone temporary vcpkg instance.\n%s\n", + clone_output.output); + + // git checkout {tree_object} . + System::CmdLineBuilder checkout_cmd_builder = git_cmd_builder(paths, dot_git_dir, work_tree) + .string_arg("checkout") + .string_arg(git_object) + .string_arg("."); + const auto checkout_output = System::cmd_execute_and_capture_output(checkout_cmd_builder.extract()); + Checks::check_exit(VCPKG_LINE_INFO, checkout_output.exit_code == 0, "Failed to checkout %s", git_object); + + // TODO: Move checked out file(s) to destination. + const auto& containing_folder = destination.parent_path(); + if (!fs.exists(containing_folder)) + { + fs.create_directories(containing_folder, VCPKG_LINE_INFO); + } + + std::error_code ec; + fs.rename_or_copy(work_tree, destination, ".tmp", ec); + fs.remove_all(work_tree, VCPKG_LINE_INFO); + fs.remove_all(dot_git_dir, VCPKG_LINE_INFO); + if (ec) + { + System::printf(System::Color::error, + "Error: Couldn't move checked out files from %s to destination %s", + fs::u8string(work_tree), + fs::u8string(destination)); + Checks::exit_fail(VCPKG_LINE_INFO); + } + } + fs::path VcpkgPaths::git_checkout_baseline(const std::string& commit_sha) const { const fs::path local_repo = this->root; @@ -572,62 +629,23 @@ If you wish to silence this error and use classic mode, you can: { /* Clone a new vcpkg repository instance using the local instance as base. * - * The `--git-dir` directory will store all the Git files, - * and the `--work-tree` is the directory where checked out files will be stored. + * The `--git-dir` directory will store all the Git metadata files, + * and the `--work-tree` is the directory where files will be checked out. * * Since we are checking a git tree object, all files will be checked out to the root of `work-tree`. * Because of that, it makes sense to use the git hash as the name for the directory. */ const fs::path local_repo = this->root; - // TODO: Decide final location for these two const fs::path dot_git_dir = this->buildtrees / "versioning_tmp" / ".git"; - const fs::path work_tree_prefix = this->buildtrees / "versioning_tmp" / "versions" / port_name; - const fs::path work_tree_temp = work_tree_prefix / git_tree; - const fs::path work_tree_done = work_tree_prefix / Strings::concat(git_tree, ".done"); + const fs::path work_tree = this->buildtrees / "versioning_tmp" / git_tree; + const fs::path destination = this->buildtrees / "versioning_tmp" / "versions" / port_name / git_tree; Files::Filesystem& fs = get_filesystem(); - if (!fs.exists(work_tree_done / "CONTROL") && !fs.exists(work_tree_done / "vcpkg.json")) - { - fs.remove_all(work_tree_temp, VCPKG_LINE_INFO); - fs.remove_all(dot_git_dir, VCPKG_LINE_INFO); - - // All git commands are run with: --git-dir={dot_git_dir} --work-tree={work_tree_temp} - // git clone --no-checkout --local {vcpkg_root} {dot_git_dir} - System::CmdLineBuilder clone_cmd_builder = git_cmd_builder(*this, dot_git_dir, work_tree_temp) - .string_arg("clone") - .string_arg("--no-checkout") - .string_arg("--local") - .path_arg(local_repo) - .path_arg(dot_git_dir); - const auto clone_output = System::cmd_execute_and_capture_output(clone_cmd_builder.extract()); - Checks::check_exit( - VCPKG_LINE_INFO, clone_output.exit_code == 0, "Failed to clone temporary vcpkg instance"); - - // git checkout {tree_object} . - System::CmdLineBuilder checkout_cmd_builder = git_cmd_builder(*this, dot_git_dir, work_tree_temp) - .string_arg("checkout") - .string_arg(git_tree) - .string_arg("."); - const auto checkout_output = System::cmd_execute_and_capture_output(checkout_cmd_builder.extract()); - Checks::check_exit( - VCPKG_LINE_INFO, checkout_output.exit_code == 0, "Failed to checkout %s:%s", port_name, git_tree); - - // Post-checkout cleanup - std::error_code ec; - fs.rename_or_copy(work_tree_temp, work_tree_done, ".tmp", ec); - fs.remove_all(work_tree_temp, VCPKG_LINE_INFO); - fs.remove_all(dot_git_dir, VCPKG_LINE_INFO); - if (ec) - { - System::printf(System::Color::error, - "Failed to move portfiles for %s:%s\n%s\n", - port_name, - git_tree, - ec.message()); - Checks::exit_fail(VCPKG_LINE_INFO); - } + if (!fs.exists(destination / "CONTROL") && !fs.exists(destination / "vcpkg.json")) + { + git_checkout_object(*this, git_tree, local_repo, destination, dot_git_dir, work_tree); } - return work_tree_done; + return destination; } Optional VcpkgPaths::get_manifest() const From ff617b1947aaf9ad3d44e23ecd0489a175226899 Mon Sep 17 00:00:00 2001 From: Victor Romero Date: Thu, 19 Nov 2020 12:22:09 -0800 Subject: [PATCH 24/42] Clean up code --- toolsrc/include/vcpkg/vcpkgpaths.h | 40 +++++++++++------------------- toolsrc/src/vcpkg/vcpkgpaths.cpp | 26 ------------------- 2 files changed, 15 insertions(+), 51 deletions(-) diff --git a/toolsrc/include/vcpkg/vcpkgpaths.h b/toolsrc/include/vcpkg/vcpkgpaths.h index 7c6a2ae81ed669..6531d39659404d 100644 --- a/toolsrc/include/vcpkg/vcpkgpaths.h +++ b/toolsrc/include/vcpkg/vcpkgpaths.h @@ -108,31 +108,6 @@ namespace vcpkg const std::string& get_tool_version(const std::string& tool) const; // Git manipulation - static void git_clone_local(const VcpkgPaths& paths, - const fs::path& local_repo, - const fs::path& dot_git_dir, - const fs::path& work_tree); - - static void git_clone_remote(const VcpkgPaths& paths, - const std::string& remote, - const fs::path& dot_git_dir, - const fs::path& work_tree); - - static void git_checkout_subpath(const VcpkgPaths& paths, - const std::string& commit_sha, - const fs::path& subpath, - const fs::path& local_repo, - const fs::path& destination, - const fs::path& dot_git_dir, - const fs::path& work_tree); - - static void git_checkout_object(const VcpkgPaths& paths, - const std::string& git_object, - const fs::path& local_repo, - const fs::path& destination, - const fs::path& dot_git_dir, - const fs::path& work_tree); - fs::path git_checkout_baseline(const std::string& commit_sha) const; fs::path git_checkout_port(const std::string& port_name, const std::string& git_tree) const; @@ -162,5 +137,20 @@ namespace vcpkg private: std::unique_ptr m_pimpl; + + static void git_checkout_subpath(const VcpkgPaths& paths, + const std::string& commit_sha, + const fs::path& subpath, + const fs::path& local_repo, + const fs::path& destination, + const fs::path& dot_git_dir, + const fs::path& work_tree); + + static void git_checkout_object(const VcpkgPaths& paths, + const std::string& git_object, + const fs::path& local_repo, + const fs::path& destination, + const fs::path& dot_git_dir, + const fs::path& work_tree); }; } diff --git a/toolsrc/src/vcpkg/vcpkgpaths.cpp b/toolsrc/src/vcpkg/vcpkgpaths.cpp index c50802c504a5f1..c71d796c15648c 100644 --- a/toolsrc/src/vcpkg/vcpkgpaths.cpp +++ b/toolsrc/src/vcpkg/vcpkgpaths.cpp @@ -465,32 +465,6 @@ If you wish to silence this error and use classic mode, you can: return m_pimpl->m_tool_cache->get_tool_version(*this, tool); } - void VcpkgPaths::git_clone_local(const VcpkgPaths& paths, - const fs::path& local_repo, - const fs::path& dot_git_dir, - const fs::path& work_tree) - { - (void)paths; - (void)local_repo; - (void)dot_git_dir; - (void)work_tree; - // TODO: Implement - Checks::exit_fail(VCPKG_LINE_INFO); - } - - void VcpkgPaths::git_clone_remote(const VcpkgPaths& paths, - const std::string& remote, - const fs::path& dot_git_dir, - const fs::path& work_tree) - { - (void)paths; - (void)remote; - (void)dot_git_dir; - (void)work_tree; - // TODO: Implement - Checks::exit_fail(VCPKG_LINE_INFO); - } - void VcpkgPaths::git_checkout_subpath(const VcpkgPaths& paths, const std::string& commit_sha, const fs::path& subpath, From 6818069a65eda0c2a9d2e6a23359afd51d275a04 Mon Sep 17 00:00:00 2001 From: Victor Romero Date: Thu, 19 Nov 2020 15:57:33 -0800 Subject: [PATCH 25/42] Path helpers --- toolsrc/include/vcpkg/vcpkgpaths.h | 7 ++++ toolsrc/include/vcpkg/versiondeserializers.h | 2 +- toolsrc/src/vcpkg/vcpkgpaths.cpp | 34 ++++++++++++++------ 3 files changed, 33 insertions(+), 10 deletions(-) diff --git a/toolsrc/include/vcpkg/vcpkgpaths.h b/toolsrc/include/vcpkg/vcpkgpaths.h index 6531d39659404d..85720ff01aad6f 100644 --- a/toolsrc/include/vcpkg/vcpkgpaths.h +++ b/toolsrc/include/vcpkg/vcpkgpaths.h @@ -104,6 +104,13 @@ namespace vcpkg fs::path ports_cmake; + fs::path versioning_tmp; + fs::path versioning_tmp_dot_git_dir; + fs::path versioning_tmp_work_tree_prefix; + fs::path versioning_output; + fs::path versioning_output_baselines; + fs::path versioning_output_versions; + const fs::path& get_tool_exe(const std::string& tool) const; const std::string& get_tool_version(const std::string& tool) const; diff --git a/toolsrc/include/vcpkg/versiondeserializers.h b/toolsrc/include/vcpkg/versiondeserializers.h index 6a2db04adb376b..6411a36e4d75b0 100644 --- a/toolsrc/include/vcpkg/versiondeserializers.h +++ b/toolsrc/include/vcpkg/versiondeserializers.h @@ -73,7 +73,7 @@ namespace vcpkg std::string git_tree; Versions::Scheme version_scheme = Versions::Scheme::String; - // Code shamelessly stolen from sourceparagraph.cpp + // Code copy-and-paste'd from sourceparagraph.cpp static Json::StringDeserializer version_exact_deserializer{"an exact version string"}; static Json::StringDeserializer version_relaxed_deserializer{"a relaxed version string"}; static Json::StringDeserializer version_semver_deserializer{"a semantic version string"}; diff --git a/toolsrc/src/vcpkg/vcpkgpaths.cpp b/toolsrc/src/vcpkg/vcpkgpaths.cpp index c71d796c15648c..bd707b48f3e302 100644 --- a/toolsrc/src/vcpkg/vcpkgpaths.cpp +++ b/toolsrc/src/vcpkg/vcpkgpaths.cpp @@ -364,6 +364,15 @@ If you wish to silence this error and use classic mode, you can: ports_cmake = filesystem.canonical(VCPKG_LINE_INFO, scripts / fs::u8path("ports.cmake")); + // TODO: Spec out the final locations for these. + // Should these be user configurable? + versioning_tmp = buildtrees / fs::u8path("versioning.tmp"); + versioning_tmp_dot_git_dir = versioning_tmp / fs::u8path(".git"); + versioning_tmp_work_tree_prefix = versioning_tmp / fs::u8path("work_trees"); + versioning_output = buildtrees / fs::u8path("versioning"); + versioning_output_baselines = versioning_output / fs::u8path("baselines"); + versioning_output_versions = versioning_output / fs::u8path("versions"); + for (auto&& overlay_triplets_dir : args.overlay_triplets) { m_pimpl->triplets_dirs.emplace_back( @@ -587,14 +596,18 @@ If you wish to silence this error and use classic mode, you can: fs::path VcpkgPaths::git_checkout_baseline(const std::string& commit_sha) const { const fs::path local_repo = this->root; - const fs::path destination = this->buildtrees / "versioning_tmp" / "baselines" / commit_sha / "baseline.json"; - const fs::path dot_git_dir = this->buildtrees / "versioning_tmp" / ".git"; - const fs::path work_tree = this->buildtrees / "versioning_tmp" / commit_sha; - const fs::path baseline_subpath = fs::path("port_versions") / fs::path("baseline.json"); + const fs::path destination = this->versioning_output_baselines / commit_sha / fs::u8path("baseline.json"); + const fs::path baseline_subpath = fs::u8path("port_versions") / fs::u8path("baseline.json"); if (!get_filesystem().exists(destination)) { - git_checkout_subpath(*this, commit_sha, baseline_subpath, local_repo, destination, dot_git_dir, work_tree); + git_checkout_subpath(*this, + commit_sha, + baseline_subpath, + local_repo, + destination, + this->versioning_tmp_dot_git_dir, + this->versioning_tmp_work_tree_prefix / fs::u8path(commit_sha)); } return destination; } @@ -610,14 +623,17 @@ If you wish to silence this error and use classic mode, you can: * Because of that, it makes sense to use the git hash as the name for the directory. */ const fs::path local_repo = this->root; - const fs::path dot_git_dir = this->buildtrees / "versioning_tmp" / ".git"; - const fs::path work_tree = this->buildtrees / "versioning_tmp" / git_tree; - const fs::path destination = this->buildtrees / "versioning_tmp" / "versions" / port_name / git_tree; + const fs::path destination = this->versioning_output_versions / fs::u8path(git_tree) / fs::u8path(port_name); Files::Filesystem& fs = get_filesystem(); if (!fs.exists(destination / "CONTROL") && !fs.exists(destination / "vcpkg.json")) { - git_checkout_object(*this, git_tree, local_repo, destination, dot_git_dir, work_tree); + git_checkout_object(*this, + git_tree, + local_repo, + destination, + this->versioning_tmp_dot_git_dir, + this->versioning_tmp_work_tree_prefix / fs::u8path(git_tree)); } return destination; } From 34474ad41d06a5dde31773e934bb3ab2a02178cb Mon Sep 17 00:00:00 2001 From: Victor Romero Date: Thu, 19 Nov 2020 16:02:15 -0800 Subject: [PATCH 26/42] Formatting --- toolsrc/src/vcpkg/vcpkgpaths.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/toolsrc/src/vcpkg/vcpkgpaths.cpp b/toolsrc/src/vcpkg/vcpkgpaths.cpp index bd707b48f3e302..d1606a8107d778 100644 --- a/toolsrc/src/vcpkg/vcpkgpaths.cpp +++ b/toolsrc/src/vcpkg/vcpkgpaths.cpp @@ -365,7 +365,7 @@ If you wish to silence this error and use classic mode, you can: ports_cmake = filesystem.canonical(VCPKG_LINE_INFO, scripts / fs::u8path("ports.cmake")); // TODO: Spec out the final locations for these. - // Should these be user configurable? + // Should these be user configurable? versioning_tmp = buildtrees / fs::u8path("versioning.tmp"); versioning_tmp_dot_git_dir = versioning_tmp / fs::u8path(".git"); versioning_tmp_work_tree_prefix = versioning_tmp / fs::u8path("work_trees"); From 1054129cd476867f75180f8a8dc5e9b814c51f5c Mon Sep 17 00:00:00 2001 From: Victor Romero Date: Thu, 19 Nov 2020 17:15:43 -0800 Subject: [PATCH 27/42] Move data into impl object --- toolsrc/include/vcpkg/portfileprovider.h | 2 -- toolsrc/src/vcpkg/portfileprovider.cpp | 15 ++++++++++++--- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/toolsrc/include/vcpkg/portfileprovider.h b/toolsrc/include/vcpkg/portfileprovider.h index 6be6354d6d8124..1921b001d176cd 100644 --- a/toolsrc/include/vcpkg/portfileprovider.h +++ b/toolsrc/include/vcpkg/portfileprovider.h @@ -84,8 +84,6 @@ namespace vcpkg::PortFileProvider private: const std::map& get_baseline_cache() const; - const vcpkg::VcpkgPaths& paths; - const std::string baseline; std::unique_ptr m_impl; }; } diff --git a/toolsrc/src/vcpkg/portfileprovider.cpp b/toolsrc/src/vcpkg/portfileprovider.cpp index 4ec9b192315b96..32b5d026432680 100644 --- a/toolsrc/src/vcpkg/portfileprovider.cpp +++ b/toolsrc/src/vcpkg/portfileprovider.cpp @@ -393,12 +393,21 @@ namespace vcpkg::PortFileProvider { struct BaselineProviderImpl { + const VcpkgPaths& paths; + const std::string baseline; + Lazy> baseline_cache; + + BaselineProviderImpl(const VcpkgPaths& paths, const std::string& baseline) + : paths(paths), baseline(baseline) + { + } + ~BaselineProviderImpl() { } }; } BaselineProvider::BaselineProvider(const VcpkgPaths& paths, const std::string& baseline) - : paths(paths), baseline(baseline), m_impl(std::make_unique()) + : m_impl(std::make_unique(paths, baseline)) { } BaselineProvider::~BaselineProvider() { } @@ -417,11 +426,11 @@ namespace vcpkg::PortFileProvider const std::map& BaselineProvider::get_baseline_cache() const { return m_impl->baseline_cache.get_lazy([&]() -> auto { - auto maybe_baseline_file = get_baseline_json_path(paths, baseline); + auto maybe_baseline_file = get_baseline_json_path(m_impl->paths, m_impl->baseline); Checks::check_exit(VCPKG_LINE_INFO, maybe_baseline_file.has_value(), "Couldn't find baseline.json"); auto baseline_file = maybe_baseline_file.value_or_exit(VCPKG_LINE_INFO); - auto value = Json::parse_file(VCPKG_LINE_INFO, paths.get_filesystem(), baseline_file); + auto value = Json::parse_file(VCPKG_LINE_INFO, m_impl->paths.get_filesystem(), baseline_file); if (!value.first.is_object()) { Checks::exit_with_message(VCPKG_LINE_INFO, "Error: `baseline.json` does not have a top-level object."); From 2c90cb489677c0b832b0362be5a55661a8a4d2f9 Mon Sep 17 00:00:00 2001 From: Victor Romero Date: Thu, 19 Nov 2020 20:22:57 -0800 Subject: [PATCH 28/42] Use implementation object for VersionedPortfileProvider --- toolsrc/include/vcpkg/portfileprovider.h | 9 ++- toolsrc/src/vcpkg/portfileprovider.cpp | 77 ++++++++++++++---------- 2 files changed, 50 insertions(+), 36 deletions(-) diff --git a/toolsrc/include/vcpkg/portfileprovider.h b/toolsrc/include/vcpkg/portfileprovider.h index 1921b001d176cd..ea2573d04e8a66 100644 --- a/toolsrc/include/vcpkg/portfileprovider.h +++ b/toolsrc/include/vcpkg/portfileprovider.h @@ -54,12 +54,15 @@ namespace vcpkg::PortFileProvider namespace details { + using PortVersionsDictionary = std::map>; struct BaselineProviderImpl; + struct VersionedPortfileProviderImpl; } struct VersionedPortfileProvider : IVersionedPortfileProvider, Util::ResourceBase { explicit VersionedPortfileProvider(const vcpkg::VcpkgPaths& paths); + ~VersionedPortfileProvider(); const std::vector& get_port_versions(const std::string& port_spec) const override; @@ -67,11 +70,7 @@ namespace vcpkg::PortFileProvider const vcpkg::Versions::VersionSpec& version_spec) const override; private: - const vcpkg::VcpkgPaths& paths; - mutable std::unordered_map - control_cache; - mutable std::unordered_map> versions_cache; - mutable std::unordered_map git_tree_cache; + std::unique_ptr m_impl; }; struct BaselineProvider : IBaselineProvider, Util::ResourceBase diff --git a/toolsrc/src/vcpkg/portfileprovider.cpp b/toolsrc/src/vcpkg/portfileprovider.cpp index 32b5d026432680..23f3092d759582 100644 --- a/toolsrc/src/vcpkg/portfileprovider.cpp +++ b/toolsrc/src/vcpkg/portfileprovider.cpp @@ -293,24 +293,56 @@ namespace vcpkg::PortFileProvider return ret; } - VersionedPortfileProvider::VersionedPortfileProvider(const VcpkgPaths& paths) : paths(paths) { } + namespace details + { + struct BaselineProviderImpl + { + const VcpkgPaths& paths; + const std::string baseline; + + Lazy> baseline_cache; + + BaselineProviderImpl(const VcpkgPaths& paths, const std::string& baseline) + : paths(paths), baseline(baseline) + { + } + ~BaselineProviderImpl() { } + }; + + struct VersionedPortfileProviderImpl + { + const VcpkgPaths& paths; + std::map> versions_cache; + std::unordered_map git_tree_cache; + std::unordered_map control_cache; + + VersionedPortfileProviderImpl(const VcpkgPaths& paths) : paths(paths) { } + ~VersionedPortfileProviderImpl() { } + }; + } + + VersionedPortfileProvider::VersionedPortfileProvider(const VcpkgPaths& paths) + : m_impl(std::make_unique(paths)) + { + } + VersionedPortfileProvider::~VersionedPortfileProvider() { } const std::vector& VersionedPortfileProvider::get_port_versions(const std::string& port_name) const { - auto cache_it = versions_cache.find(port_name); - if (cache_it != versions_cache.end()) + auto cache_it = m_impl->versions_cache.find(port_name); + if (cache_it != m_impl->versions_cache.end()) { return cache_it->second; } - auto maybe_versions_json_path = get_versions_json_path(paths, port_name); + auto maybe_versions_json_path = get_versions_json_path(m_impl->paths, port_name); Checks::check_exit(VCPKG_LINE_INFO, maybe_versions_json_path.has_value(), "Couldn't find a versions database file: %s.json.", port_name); auto versions_json_path = maybe_versions_json_path.value_or_exit(VCPKG_LINE_INFO); - auto versions_json = Json::parse_file(VCPKG_LINE_INFO, paths.get_filesystem(), versions_json_path); + auto versions_json = Json::parse_file(VCPKG_LINE_INFO, m_impl->paths.get_filesystem(), versions_json_path); Checks::check_exit(VCPKG_LINE_INFO, versions_json.first.is_object(), "Error: `%s.json` does not have a top level object.", @@ -341,18 +373,18 @@ namespace vcpkg::PortFileProvider version.git_tree); VersionSpec spec(port_name, version.version, version.scheme); - versions_cache[port_name].push_back(spec); - git_tree_cache[spec] = version.git_tree; + m_impl->versions_cache[port_name].push_back(spec); + m_impl->git_tree_cache[spec] = version.git_tree; } } - return versions_cache.at(port_name); + return m_impl->versions_cache.at(port_name); } ExpectedS VersionedPortfileProvider::get_control_file( const VersionSpec& version_spec) const { - auto cache_it = control_cache.find(version_spec); - if (cache_it != control_cache.end()) + auto cache_it = m_impl->control_cache.find(version_spec); + if (cache_it != m_impl->control_cache.end()) { return cache_it->second; } @@ -360,8 +392,8 @@ namespace vcpkg::PortFileProvider // Pre-populate versions cache. get_port_versions(version_spec.port_name); - auto git_tree_cache_it = git_tree_cache.find(version_spec); - if (git_tree_cache_it == git_tree_cache.end()) + auto git_tree_cache_it = m_impl->git_tree_cache.find(version_spec); + if (git_tree_cache_it == m_impl->git_tree_cache.end()) { return Strings::concat("No git object SHA for entry %s at version %s.", version_spec.port_name, @@ -369,9 +401,9 @@ namespace vcpkg::PortFileProvider } const std::string git_tree = git_tree_cache_it->second; - auto port_directory = paths.git_checkout_port(version_spec.port_name, git_tree); + auto port_directory = m_impl->paths.git_checkout_port(version_spec.port_name, git_tree); - auto maybe_control_file = Paragraphs::try_load_port(paths.get_filesystem(), port_directory); + auto maybe_control_file = Paragraphs::try_load_port(m_impl->paths.get_filesystem(), port_directory); if (auto scf = maybe_control_file.get()) { if (scf->get()->core_paragraph->name == version_spec.port_name) @@ -389,23 +421,6 @@ namespace vcpkg::PortFileProvider "Error: Failed to load port %s from %s", version_spec.port_name, fs::u8string(port_directory)); } - namespace details - { - struct BaselineProviderImpl - { - const VcpkgPaths& paths; - const std::string baseline; - - Lazy> baseline_cache; - - BaselineProviderImpl(const VcpkgPaths& paths, const std::string& baseline) - : paths(paths), baseline(baseline) - { - } - ~BaselineProviderImpl() { } - }; - } - BaselineProvider::BaselineProvider(const VcpkgPaths& paths, const std::string& baseline) : m_impl(std::make_unique(paths, baseline)) { From 0bcaa15ed81bfe0ee36737534467c5123b048350 Mon Sep 17 00:00:00 2001 From: Victor Romero Date: Thu, 19 Nov 2020 20:25:03 -0800 Subject: [PATCH 29/42] Reuse cloned instance for checkouts --- toolsrc/include/vcpkg/vcpkgpaths.h | 7 --- toolsrc/src/vcpkg/vcpkgpaths.cpp | 99 ++++++++++++++++++++---------- 2 files changed, 68 insertions(+), 38 deletions(-) diff --git a/toolsrc/include/vcpkg/vcpkgpaths.h b/toolsrc/include/vcpkg/vcpkgpaths.h index 85720ff01aad6f..6531d39659404d 100644 --- a/toolsrc/include/vcpkg/vcpkgpaths.h +++ b/toolsrc/include/vcpkg/vcpkgpaths.h @@ -104,13 +104,6 @@ namespace vcpkg fs::path ports_cmake; - fs::path versioning_tmp; - fs::path versioning_tmp_dot_git_dir; - fs::path versioning_tmp_work_tree_prefix; - fs::path versioning_output; - fs::path versioning_output_baselines; - fs::path versioning_output_versions; - const fs::path& get_tool_exe(const std::string& tool) const; const std::string& get_tool_version(const std::string& tool) const; diff --git a/toolsrc/src/vcpkg/vcpkgpaths.cpp b/toolsrc/src/vcpkg/vcpkgpaths.cpp index d1606a8107d778..9a56f8d4d9dbed 100644 --- a/toolsrc/src/vcpkg/vcpkgpaths.cpp +++ b/toolsrc/src/vcpkg/vcpkgpaths.cpp @@ -223,6 +223,37 @@ namespace vcpkg Configuration m_config; FeatureFlagSettings m_ff_settings; + + // Versioning paths + fs::path baselines_dot_git_dir(const VcpkgPaths& paths) + { + return versioning_tmp(paths) / fs::u8path(".baselines.git"); + } + fs::path baselines_worktree(const VcpkgPaths& paths) + { + return versioning_tmp(paths) / fs::u8path("baselines-worktree"); + } + fs::path baselines_output(const VcpkgPaths& paths) + { + return versioning_output(paths) / fs::u8path("baselines"); + } + + fs::path versions_dot_git_dir(const VcpkgPaths& paths) + { + return versioning_tmp(paths) / fs::u8path(".versions.git"); + } + fs::path versions_worktree(const VcpkgPaths& paths) + { + return versioning_tmp(paths) / fs::u8path("versions-worktree"); + } + fs::path versions_output(const VcpkgPaths& paths) + { + return versioning_output(paths) / fs::u8path("versions"); + } + + private: + fs::path versioning_tmp(const VcpkgPaths& paths) { return paths.buildtrees / fs::u8path("versioning_tmp"); } + fs::path versioning_output(const VcpkgPaths& paths) { return paths.buildtrees / fs::u8path("versioning"); } }; } @@ -364,15 +395,6 @@ If you wish to silence this error and use classic mode, you can: ports_cmake = filesystem.canonical(VCPKG_LINE_INFO, scripts / fs::u8path("ports.cmake")); - // TODO: Spec out the final locations for these. - // Should these be user configurable? - versioning_tmp = buildtrees / fs::u8path("versioning.tmp"); - versioning_tmp_dot_git_dir = versioning_tmp / fs::u8path(".git"); - versioning_tmp_work_tree_prefix = versioning_tmp / fs::u8path("work_trees"); - versioning_output = buildtrees / fs::u8path("versioning"); - versioning_output_baselines = versioning_output / fs::u8path("baselines"); - versioning_output_versions = versioning_output / fs::u8path("versions"); - for (auto&& overlay_triplets_dir : args.overlay_triplets) { m_pimpl->triplets_dirs.emplace_back( @@ -484,8 +506,8 @@ If you wish to silence this error and use classic mode, you can: { Files::Filesystem& fs = paths.get_filesystem(); fs.remove_all(work_tree, VCPKG_LINE_INFO); - fs.remove_all(dot_git_dir, VCPKG_LINE_INFO); fs.remove_all(destination, VCPKG_LINE_INFO); + fs.remove_all(dot_git_dir, VCPKG_LINE_INFO); // All git commands are run with: --git-dir={dot_git_dir} --work-tree={work_tree_temp} // git clone --no-checkout --local {vcpkg_root} {dot_git_dir} @@ -547,22 +569,38 @@ If you wish to silence this error and use classic mode, you can: { Files::Filesystem& fs = paths.get_filesystem(); fs.remove_all(work_tree, VCPKG_LINE_INFO); - fs.remove_all(dot_git_dir, VCPKG_LINE_INFO); fs.remove_all(destination, VCPKG_LINE_INFO); - // All git commands are run with: --git-dir={dot_git_dir} --work-tree={work_tree_temp} - // git clone --no-checkout --local {vcpkg_root} {dot_git_dir} - System::CmdLineBuilder clone_cmd_builder = git_cmd_builder(paths, dot_git_dir, work_tree) - .string_arg("clone") - .string_arg("--no-checkout") - .string_arg("--local") - .path_arg(local_repo) - .path_arg(dot_git_dir); - const auto clone_output = System::cmd_execute_and_capture_output(clone_cmd_builder.extract()); - Checks::check_exit(VCPKG_LINE_INFO, - clone_output.exit_code == 0, - "Failed to clone temporary vcpkg instance.\n%s\n", - clone_output.output); + if (!fs.exists(dot_git_dir)) + { + // All git commands are run with: --git-dir={dot_git_dir} --work-tree={work_tree_temp} + // git clone --no-checkout --local {vcpkg_root} {dot_git_dir} + System::CmdLineBuilder clone_cmd_builder = git_cmd_builder(paths, dot_git_dir, work_tree) + .string_arg("clone") + .string_arg("--no-checkout") + .string_arg("--local") + .path_arg(local_repo) + .path_arg(dot_git_dir); + const auto clone_output = System::cmd_execute_and_capture_output(clone_cmd_builder.extract()); + Checks::check_exit(VCPKG_LINE_INFO, + clone_output.exit_code == 0, + "Failed to clone temporary vcpkg instance.\n%s\n", + clone_output.output); + } + else + { + System::CmdLineBuilder fetch_cmd_builder = git_cmd_builder(paths, dot_git_dir, work_tree).string_arg("fetch"); + const auto fetch_output = System::cmd_execute_and_capture_output(fetch_cmd_builder.extract()); + Checks::check_exit(VCPKG_LINE_INFO, + fetch_output.exit_code == 0, + "Failed to update refs on temporary vcpkg repository.\n%s\n", + fetch_output.output); + } + + if (!fs.exists(work_tree)) + { + fs.create_directories(work_tree, VCPKG_LINE_INFO); + } // git checkout {tree_object} . System::CmdLineBuilder checkout_cmd_builder = git_cmd_builder(paths, dot_git_dir, work_tree) @@ -582,7 +620,6 @@ If you wish to silence this error and use classic mode, you can: std::error_code ec; fs.rename_or_copy(work_tree, destination, ".tmp", ec); fs.remove_all(work_tree, VCPKG_LINE_INFO); - fs.remove_all(dot_git_dir, VCPKG_LINE_INFO); if (ec) { System::printf(System::Color::error, @@ -596,7 +633,7 @@ If you wish to silence this error and use classic mode, you can: fs::path VcpkgPaths::git_checkout_baseline(const std::string& commit_sha) const { const fs::path local_repo = this->root; - const fs::path destination = this->versioning_output_baselines / commit_sha / fs::u8path("baseline.json"); + const fs::path destination = m_pimpl->baselines_output(*this) / commit_sha / fs::u8path("baseline.json"); const fs::path baseline_subpath = fs::u8path("port_versions") / fs::u8path("baseline.json"); if (!get_filesystem().exists(destination)) @@ -606,8 +643,8 @@ If you wish to silence this error and use classic mode, you can: baseline_subpath, local_repo, destination, - this->versioning_tmp_dot_git_dir, - this->versioning_tmp_work_tree_prefix / fs::u8path(commit_sha)); + m_pimpl->baselines_dot_git_dir(*this), + m_pimpl->baselines_worktree(*this)); } return destination; } @@ -623,7 +660,7 @@ If you wish to silence this error and use classic mode, you can: * Because of that, it makes sense to use the git hash as the name for the directory. */ const fs::path local_repo = this->root; - const fs::path destination = this->versioning_output_versions / fs::u8path(git_tree) / fs::u8path(port_name); + const fs::path destination = m_pimpl->versions_output(*this) / fs::u8path(git_tree) / fs::u8path(port_name); Files::Filesystem& fs = get_filesystem(); if (!fs.exists(destination / "CONTROL") && !fs.exists(destination / "vcpkg.json")) @@ -632,8 +669,8 @@ If you wish to silence this error and use classic mode, you can: git_tree, local_repo, destination, - this->versioning_tmp_dot_git_dir, - this->versioning_tmp_work_tree_prefix / fs::u8path(git_tree)); + m_pimpl->versions_dot_git_dir(*this), + m_pimpl->versions_worktree(*this)); } return destination; } From cfb807dfbdf5cf4dc9e4e2dc2e37f55fec4157bb Mon Sep 17 00:00:00 2001 From: Victor Romero Date: Thu, 19 Nov 2020 20:30:19 -0800 Subject: [PATCH 30/42] Code cleanup and formatting --- toolsrc/include/vcpkg/portfileprovider.h | 1 - toolsrc/src/vcpkg/portfileprovider.cpp | 5 ----- toolsrc/src/vcpkg/vcpkgpaths.cpp | 6 ++---- 3 files changed, 2 insertions(+), 10 deletions(-) diff --git a/toolsrc/include/vcpkg/portfileprovider.h b/toolsrc/include/vcpkg/portfileprovider.h index ea2573d04e8a66..a5488595b23a35 100644 --- a/toolsrc/include/vcpkg/portfileprovider.h +++ b/toolsrc/include/vcpkg/portfileprovider.h @@ -54,7 +54,6 @@ namespace vcpkg::PortFileProvider namespace details { - using PortVersionsDictionary = std::map>; struct BaselineProviderImpl; struct VersionedPortfileProviderImpl; } diff --git a/toolsrc/src/vcpkg/portfileprovider.cpp b/toolsrc/src/vcpkg/portfileprovider.cpp index 23f3092d759582..e9a61e6c864618 100644 --- a/toolsrc/src/vcpkg/portfileprovider.cpp +++ b/toolsrc/src/vcpkg/portfileprovider.cpp @@ -21,10 +21,6 @@ namespace { Optional get_versions_json_path(const VcpkgPaths& paths, const std::string& port_name) { - // TODO: Get correct `port_versions` path for the registry the port belongs to, pseudocode below: - // auto registry = paths.get_registry_for_port(port_name); - // auto port_versions_dir_path = registry.get_port_versions_path(); - const auto port_versions_dir_path = paths.root / "port_versions"; const auto subpath = Strings::concat(port_name[0], "-/", port_name, ".json"); const auto json_path = port_versions_dir_path / subpath; @@ -37,7 +33,6 @@ namespace Optional get_baseline_json_path(const VcpkgPaths& paths, const std::string& baseline_commit_sha) { - // TODO: Get correct `baseline.json` path for the registry. const auto baseline_json = paths.git_checkout_baseline(baseline_commit_sha); return paths.get_filesystem().exists(baseline_json) ? make_optional(baseline_json) : nullopt; } diff --git a/toolsrc/src/vcpkg/vcpkgpaths.cpp b/toolsrc/src/vcpkg/vcpkgpaths.cpp index 9a56f8d4d9dbed..c4f8f3fea52873 100644 --- a/toolsrc/src/vcpkg/vcpkgpaths.cpp +++ b/toolsrc/src/vcpkg/vcpkgpaths.cpp @@ -537,9 +537,7 @@ If you wish to silence this error and use classic mode, you can: fs::u8string(subpath), checkout_output.output); - // TODO: Move checked out file(s) to destination. const fs::path checked_out_path = work_tree / subpath; - const auto& containing_folder = destination.parent_path(); if (!fs.exists(containing_folder)) { @@ -589,7 +587,8 @@ If you wish to silence this error and use classic mode, you can: } else { - System::CmdLineBuilder fetch_cmd_builder = git_cmd_builder(paths, dot_git_dir, work_tree).string_arg("fetch"); + System::CmdLineBuilder fetch_cmd_builder = + git_cmd_builder(paths, dot_git_dir, work_tree).string_arg("fetch"); const auto fetch_output = System::cmd_execute_and_capture_output(fetch_cmd_builder.extract()); Checks::check_exit(VCPKG_LINE_INFO, fetch_output.exit_code == 0, @@ -610,7 +609,6 @@ If you wish to silence this error and use classic mode, you can: const auto checkout_output = System::cmd_execute_and_capture_output(checkout_cmd_builder.extract()); Checks::check_exit(VCPKG_LINE_INFO, checkout_output.exit_code == 0, "Failed to checkout %s", git_object); - // TODO: Move checked out file(s) to destination. const auto& containing_folder = destination.parent_path(); if (!fs.exists(containing_folder)) { From 03b3e520d79de672c320a6c53e594e99ef41e710 Mon Sep 17 00:00:00 2001 From: Victor Romero Date: Fri, 20 Nov 2020 15:47:49 -0800 Subject: [PATCH 31/42] Fix returning dangling reference --- toolsrc/include/vcpkg/versiondeserializers.h | 2 +- toolsrc/src/vcpkg/portfileprovider.cpp | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/toolsrc/include/vcpkg/versiondeserializers.h b/toolsrc/include/vcpkg/versiondeserializers.h index 6411a36e4d75b0..9a9d653e622e58 100644 --- a/toolsrc/include/vcpkg/versiondeserializers.h +++ b/toolsrc/include/vcpkg/versiondeserializers.h @@ -135,7 +135,7 @@ namespace vcpkg { std::map> result; - for (auto pr : obj) + for (auto&& pr : obj) { const auto& version_value = pr.second; VersionT version; diff --git a/toolsrc/src/vcpkg/portfileprovider.cpp b/toolsrc/src/vcpkg/portfileprovider.cpp index e9a61e6c864618..cfae4a7668535d 100644 --- a/toolsrc/src/vcpkg/portfileprovider.cpp +++ b/toolsrc/src/vcpkg/portfileprovider.cpp @@ -403,7 +403,9 @@ namespace vcpkg::PortFileProvider { if (scf->get()->core_paragraph->name == version_spec.port_name) { - return SourceControlFileLocation{std::move(*scf), std::move(port_directory)}; + return m_impl->control_cache + .emplace(version_spec, SourceControlFileLocation{std::move(*scf), std::move(port_directory)}) + .first->second; } return Strings::format("Error: Failed to load port from %s: names did not match: '%s' != '%s'", fs::u8string(port_directory), From 360dd3ab1fa6459338a47647ea388ba6d5083d23 Mon Sep 17 00:00:00 2001 From: Victor Romero Date: Mon, 23 Nov 2020 13:34:01 -0800 Subject: [PATCH 32/42] Prepare to remove files in port_versions/ --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index d12fd1363f3bab..e30b43a9d99288 100644 --- a/.gitignore +++ b/.gitignore @@ -296,7 +296,7 @@ __pycache__/ /toolsrc/windows-bootstrap/msbuild.x64.debug/ /toolsrc/windows-bootstrap/msbuild.x64.release/ #ignore db -/port_versions/ +#/port_versions/ #ignore custom triplets /triplets/* #add vcpkg-designed triplets back in From 3f0893faa70948bff7ac765b5aa749ef398c6b8d Mon Sep 17 00:00:00 2001 From: Victor Romero Date: Mon, 23 Nov 2020 13:35:19 -0800 Subject: [PATCH 33/42] Remove files in port_versions/ --- port_versions/baseline.json | 1540 ------------------------- port_versions/c-/cpprestsdk.json | 1 - port_versions/o-/openssl-unix.json | 1 - port_versions/o-/openssl-uwp.json | 1 - port_versions/o-/openssl-windows.json | 1 - port_versions/o-/openssl.json | 1 - port_versions/r-/rapidjson.json | 1 - port_versions/z-/zlib.json | 1 - 8 files changed, 1547 deletions(-) delete mode 100644 port_versions/baseline.json delete mode 100644 port_versions/c-/cpprestsdk.json delete mode 100644 port_versions/o-/openssl-unix.json delete mode 100644 port_versions/o-/openssl-uwp.json delete mode 100644 port_versions/o-/openssl-windows.json delete mode 100644 port_versions/o-/openssl.json delete mode 100644 port_versions/r-/rapidjson.json delete mode 100644 port_versions/z-/zlib.json diff --git a/port_versions/baseline.json b/port_versions/baseline.json deleted file mode 100644 index 0995fb716d8e4d..00000000000000 --- a/port_versions/baseline.json +++ /dev/null @@ -1,1540 +0,0 @@ -{ - "default": { - "3fd": { "version-string": "2.6.3", "port-version": 0 }, - "7zip": { "version-string": "19.00", "port-version": 2 }, - "abseil": { "version-string": "2020-09-23", "port-version": 0 }, - "absent": { "version-string": "0.3.1", "port-version": 0 }, - "ace": { "version-string": "6.5.12", "port-version": 0 }, - "activemq-cpp": { "version-string": "3.9.5", "port-version": 3 }, - "ade": { "version-string": "0.1.1f", "port-version": 0 }, - "aixlog": { "version-string": "1.4.0", "port-version": 0 }, - "akali": { "version-string": "1.42", "port-version": 1 }, - "alac": { "version-string": "2017-11-03-c38887c5", "port-version": 1 }, - "alac-decoder": { "version-string": "0.2", "port-version": 4 }, - "alembic": { "version-string": "1.7.16", "port-version": 0 }, - "aliyun-oss-c-sdk": { "version-string": "3.10.0", "port-version": 0 }, - "allegro5": { "version-string": "5.2.6.0", "port-version": 0 }, - "ampl-asl": { "version-string": "2020-11-11", "port-version": 0 }, - "ampl-mp": { "version-string": "2020-11-11", "port-version": 0 }, - "amqpcpp": { "version-string": "4.1.7", "port-version": 0 }, - "anax": { "version-string": "2.1.0", "port-version": 6 }, - "angelscript": { "version-string": "2.34.0", "port-version": 0 }, - "angle": { "version-string": "2020-05-15", "port-version": 1 }, - "antlr4": { "version-string": "4.8", "port-version": 0 }, - "any-lite": { "version-string": "0.2.0", "port-version": 0 }, - "anyrpc": { "version-string": "2020-01-13", "port-version": 1 }, - "apr": { "version-string": "1.7.0", "port-version": 3 }, - "apr-util": { "version-string": "1.6.1", "port-version": 3 }, - "arb": { "version-string": "2.18.1", "port-version": 0 }, - "argagg": { "version-string": "0.4.6", "port-version": 0 }, - "argh": { "version-string": "2018-12-18", "port-version": 2 }, - "argparse": { "version-string": "2.1", "port-version": 0 }, - "args": { "version-string": "2020-09-14", "port-version": 0 }, - "argtable2": { "version-string": "2.13", "port-version": 8 }, - "argtable3": { "version-string": "3.1.5", "port-version": 0 }, - "argumentum": { "version-string": "0.3.1", "port-version": 0 }, - "armadillo": { "version-string": "10.1.0", "port-version": 0 }, - "arrow": { "version-string": "1.0.1", "port-version": 2 }, - "ashes": { "version-string": "2020-10-21", "port-version": 0 }, - "asio": { "version-string": "1.18.0", "port-version": 0 }, - "asiosdk": { "version-string": "2.3.3", "port-version": 1 }, - "asmjit": { "version-string": "2020-09-14", "port-version": 0 }, - "assimp": { "version-string": "5.0.1", "port-version": 4 }, - "asynch": { "version-string": "2019-09-21", "port-version": 1 }, - "asyncplusplus": { "version-string": "1.1", "port-version": 0 }, - "atk": { "version-string": "2.24.0", "port-version": 5 }, - "atkmm": { "version-string": "2.24.2", "port-version": 3 }, - "atlmfc": { "version-string": "0", "port-version": 0 }, - "aubio": { "version-string": "0.4.9", "port-version": 3 }, - "audiofile": { "version-string": "1.0.7", "port-version": 0 }, - "aurora": { "version-string": "2017-06-21-c75699d2a8caa726260c29b6d7a0fd35f8f28933", "port-version": 0 }, - "autobahn": { "version-string": "20.8.1", "port-version": 0 }, - "avisynthplus": { "version-string": "3.6.0", "port-version": 1 }, - "avro-c": { "version-string": "1.9.2", "port-version": 1 }, - "avro-cpp": { "version-string": "1.9.2", "port-version": 0 }, - "aws-c-common": { "version-string": "0.4.56", "port-version": 0 }, - "aws-c-event-stream": { "version-string": "0.1.6", "port-version": 0 }, - "aws-checksums": { "version-string": "0.1.9", "port-version": 0 }, - "aws-lambda-cpp": { "version-string": "0.2.6", "port-version": 0 }, - "aws-sdk-cpp": { "version-string": "1.8.83", "port-version": 1 }, - "azmq": { "version-string": "2020-03-03", "port-version": 0 }, - "azure-c-shared-utility": { "version-string": "2020-07-19", "port-version": 0 }, - "azure-iot-sdk-c": { "version-string": "2020-07-19", "port-version": 1 }, - "azure-kinect-sensor-sdk": { "version-string": "1.4.0-alpha.0", "port-version": 6 }, - "azure-macro-utils-c": { "version-string": "2020-06-17", "port-version": 2 }, - "azure-storage-cpp": { "version-string": "7.5.0", "port-version": 0 }, - "azure-uamqp-c": { "version-string": "2020-07-19", "port-version": 0 }, - "azure-uhttp-c": { "version-string": "2020-07-19", "port-version": 0 }, - "azure-umqtt-c": { "version-string": "2020-07-19", "port-version": 0 }, - "basisu": { "version-string": "1.11", "port-version": 4 }, - "bde": { "version-string": "3.2.0.0", "port-version": 2 }, - "bdwgc": { "version-string": "8.0.4", "port-version": 1 }, - "beast": { "version-string": "0", "port-version": 0 }, - "behaviortree-cpp": { "version-string": "3.5.1", "port-version": 2 }, - "benchmark": { "version-string": "1.5.2", "port-version": 0 }, - "bento4": { "version-string": "1.5.1", "port-version": 628 }, - "berkeleydb": { "version-string": "4.8.30", "port-version": 5 }, - "bfgroup-lyra": { "version-string": "1.5", "port-version": 0 }, - "bigint": { "version-string": "2010.04.30", "port-version": 6 }, - "binn": { "version-string": "3.0", "port-version": 0 }, - "bitmagic": { "version-string": "6.4.0", "port-version": 0 }, - "bitserializer": { "version-string": "0.10", "port-version": 0 }, - "bitserializer-cpprestjson": { "version-string": "alias", "port-version": 0 }, - "bitserializer-pugixml": { "version-string": "alias", "port-version": 0 }, - "bitserializer-rapidjson": { "version-string": "alias", "port-version": 0 }, - "bitserializer-rapidyaml": { "version-string": "alias", "port-version": 0 }, - "bitsery": { "version-string": "5.1.0", "port-version": 0 }, - "blaze": { "version-string": "3.8", "port-version": 1 }, - "blend2d": { "version-string": "beta_2020-08-24", "port-version": 0 }, - "blitz": { "version-string": "2020-03-25", "port-version": 0 }, - "blosc": { "version-string": "1.18.1", "port-version": 1 }, - "bond": { "version-string": "9.0.3", "port-version": 0 }, - "boolinq": { "version-string": "2019-07-22", "port-version": 0 }, - "boost": { "version-string": "1.74.0", "port-version": 0 }, - "boost-accumulators": { "version-string": "1.74.0", "port-version": 0 }, - "boost-algorithm": { "version-string": "1.74.0", "port-version": 0 }, - "boost-align": { "version-string": "1.74.0", "port-version": 0 }, - "boost-any": { "version-string": "1.74.0", "port-version": 0 }, - "boost-array": { "version-string": "1.74.0", "port-version": 0 }, - "boost-asio": { "version-string": "1.74.0", "port-version": 0 }, - "boost-assert": { "version-string": "1.74.0", "port-version": 0 }, - "boost-assign": { "version-string": "1.74.0", "port-version": 0 }, - "boost-atomic": { "version-string": "1.74.0", "port-version": 0 }, - "boost-beast": { "version-string": "1.74.0", "port-version": 0 }, - "boost-bimap": { "version-string": "1.74.0", "port-version": 0 }, - "boost-bind": { "version-string": "1.74.0", "port-version": 0 }, - "boost-build": { "version-string": "1.74.0", "port-version": 0 }, - "boost-callable-traits": { "version-string": "1.74.0", "port-version": 0 }, - "boost-chrono": { "version-string": "1.74.0", "port-version": 0 }, - "boost-circular-buffer": { "version-string": "1.74.0", "port-version": 0 }, - "boost-compatibility": { "version-string": "1.74.0", "port-version": 0 }, - "boost-compute": { "version-string": "1.74.0", "port-version": 0 }, - "boost-concept-check": { "version-string": "1.74.0", "port-version": 0 }, - "boost-config": { "version-string": "1.74.0", "port-version": 0 }, - "boost-container": { "version-string": "1.74.0", "port-version": 0 }, - "boost-container-hash": { "version-string": "1.74.0", "port-version": 0 }, - "boost-context": { "version-string": "1.74.0", "port-version": 0 }, - "boost-contract": { "version-string": "1.74.0", "port-version": 0 }, - "boost-conversion": { "version-string": "1.74.0", "port-version": 0 }, - "boost-convert": { "version-string": "1.74.0", "port-version": 0 }, - "boost-core": { "version-string": "1.74.0", "port-version": 0 }, - "boost-coroutine": { "version-string": "1.74.0", "port-version": 0 }, - "boost-coroutine2": { "version-string": "1.74.0", "port-version": 0 }, - "boost-crc": { "version-string": "1.74.0", "port-version": 0 }, - "boost-date-time": { "version-string": "1.74.0", "port-version": 0 }, - "boost-detail": { "version-string": "1.74.0", "port-version": 0 }, - "boost-di": { "version-string": "1.1.0", "port-version": 1 }, - "boost-dll": { "version-string": "1.74.0", "port-version": 0 }, - "boost-dynamic-bitset": { "version-string": "1.74.0", "port-version": 0 }, - "boost-endian": { "version-string": "1.74.0", "port-version": 0 }, - "boost-exception": { "version-string": "1.74.0", "port-version": 0 }, - "boost-fiber": { "version-string": "1.74.0", "port-version": 0 }, - "boost-filesystem": { "version-string": "1.74.0", "port-version": 0 }, - "boost-flyweight": { "version-string": "1.74.0", "port-version": 0 }, - "boost-foreach": { "version-string": "1.74.0", "port-version": 0 }, - "boost-format": { "version-string": "1.74.0", "port-version": 0 }, - "boost-function": { "version-string": "1.74.0", "port-version": 0 }, - "boost-function-types": { "version-string": "1.74.0", "port-version": 0 }, - "boost-functional": { "version-string": "1.74.0", "port-version": 0 }, - "boost-fusion": { "version-string": "1.74.0", "port-version": 0 }, - "boost-geometry": { "version-string": "1.74.0", "port-version": 0 }, - "boost-gil": { "version-string": "1.74.0", "port-version": 0 }, - "boost-graph": { "version-string": "1.74.0", "port-version": 0 }, - "boost-graph-parallel": { "version-string": "1.74.0", "port-version": 0 }, - "boost-hana": { "version-string": "1.74.0", "port-version": 0 }, - "boost-heap": { "version-string": "1.74.0", "port-version": 0 }, - "boost-histogram": { "version-string": "1.74.0", "port-version": 0 }, - "boost-hof": { "version-string": "1.74.0", "port-version": 0 }, - "boost-icl": { "version-string": "1.74.0", "port-version": 0 }, - "boost-integer": { "version-string": "1.74.0", "port-version": 0 }, - "boost-interprocess": { "version-string": "1.74.0", "port-version": 0 }, - "boost-interval": { "version-string": "1.74.0", "port-version": 0 }, - "boost-intrusive": { "version-string": "1.74.0", "port-version": 0 }, - "boost-io": { "version-string": "1.74.0", "port-version": 0 }, - "boost-iostreams": { "version-string": "1.74.0", "port-version": 0 }, - "boost-iterator": { "version-string": "1.74.0", "port-version": 0 }, - "boost-lambda": { "version-string": "1.74.0", "port-version": 0 }, - "boost-lexical-cast": { "version-string": "1.74.0", "port-version": 0 }, - "boost-local-function": { "version-string": "1.74.0", "port-version": 0 }, - "boost-locale": { "version-string": "1.74.0", "port-version": 0 }, - "boost-lockfree": { "version-string": "1.74.0", "port-version": 0 }, - "boost-log": { "version-string": "1.74.0", "port-version": 0 }, - "boost-logic": { "version-string": "1.74.0", "port-version": 0 }, - "boost-math": { "version-string": "1.74.0", "port-version": 0 }, - "boost-metaparse": { "version-string": "1.74.0", "port-version": 0 }, - "boost-modular-build-helper": { "version-string": "1.74.0", "port-version": 1 }, - "boost-move": { "version-string": "1.74.0", "port-version": 0 }, - "boost-mp11": { "version-string": "1.74.0", "port-version": 0 }, - "boost-mpi": { "version-string": "1.74.0", "port-version": 0 }, - "boost-mpl": { "version-string": "1.74.0", "port-version": 0 }, - "boost-msm": { "version-string": "1.74.0", "port-version": 0 }, - "boost-multi-array": { "version-string": "1.74.0", "port-version": 0 }, - "boost-multi-index": { "version-string": "1.74.0", "port-version": 0 }, - "boost-multiprecision": { "version-string": "1.74.0", "port-version": 0 }, - "boost-nowide": { "version-string": "1.74.0", "port-version": 0 }, - "boost-numeric-conversion": { "version-string": "1.74.0", "port-version": 0 }, - "boost-odeint": { "version-string": "1.74.0", "port-version": 0 }, - "boost-optional": { "version-string": "1.74.0", "port-version": 0 }, - "boost-outcome": { "version-string": "1.74.0", "port-version": 0 }, - "boost-parameter": { "version-string": "1.74.0", "port-version": 0 }, - "boost-parameter-python": { "version-string": "1.74.0", "port-version": 0 }, - "boost-phoenix": { "version-string": "1.74.0", "port-version": 0 }, - "boost-poly-collection": { "version-string": "1.74.0", "port-version": 0 }, - "boost-polygon": { "version-string": "1.74.0", "port-version": 0 }, - "boost-pool": { "version-string": "1.74.0", "port-version": 0 }, - "boost-predef": { "version-string": "1.74.0", "port-version": 0 }, - "boost-preprocessor": { "version-string": "1.74.0", "port-version": 0 }, - "boost-process": { "version-string": "1.74.0", "port-version": 0 }, - "boost-program-options": { "version-string": "1.74.0", "port-version": 0 }, - "boost-property-map": { "version-string": "1.74.0", "port-version": 0 }, - "boost-property-tree": { "version-string": "1.74.0", "port-version": 0 }, - "boost-proto": { "version-string": "1.74.0", "port-version": 0 }, - "boost-ptr-container": { "version-string": "1.74.0", "port-version": 0 }, - "boost-python": { "version-string": "1.74.0", "port-version": 0 }, - "boost-qvm": { "version-string": "1.74.0", "port-version": 0 }, - "boost-random": { "version-string": "1.74.0", "port-version": 0 }, - "boost-range": { "version-string": "1.74.0", "port-version": 0 }, - "boost-ratio": { "version-string": "1.74.0", "port-version": 0 }, - "boost-rational": { "version-string": "1.74.0", "port-version": 0 }, - "boost-regex": { "version-string": "1.74.0", "port-version": 0 }, - "boost-safe-numerics": { "version-string": "1.74.0", "port-version": 0 }, - "boost-scope-exit": { "version-string": "1.74.0", "port-version": 0 }, - "boost-serialization": { "version-string": "1.74.0", "port-version": 0 }, - "boost-signals": { "version-string": "1.68.0", "port-version": 1 }, - "boost-signals2": { "version-string": "1.74.0", "port-version": 0 }, - "boost-smart-ptr": { "version-string": "1.74.0", "port-version": 0 }, - "boost-sort": { "version-string": "1.74.0", "port-version": 0 }, - "boost-spirit": { "version-string": "1.74.0", "port-version": 0 }, - "boost-stacktrace": { "version-string": "1.74.0", "port-version": 0 }, - "boost-statechart": { "version-string": "1.74.0", "port-version": 0 }, - "boost-static-assert": { "version-string": "1.74.0", "port-version": 0 }, - "boost-static-string": { "version-string": "1.74.0", "port-version": 0 }, - "boost-stl-interfaces": { "version-string": "1.74.0", "port-version": 0 }, - "boost-system": { "version-string": "1.74.0", "port-version": 0 }, - "boost-test": { "version-string": "1.74.0", "port-version": 0 }, - "boost-thread": { "version-string": "1.74.0", "port-version": 0 }, - "boost-throw-exception": { "version-string": "1.74.0", "port-version": 0 }, - "boost-timer": { "version-string": "1.74.0", "port-version": 0 }, - "boost-tokenizer": { "version-string": "1.74.0", "port-version": 0 }, - "boost-tti": { "version-string": "1.74.0", "port-version": 0 }, - "boost-tuple": { "version-string": "1.74.0", "port-version": 0 }, - "boost-type-erasure": { "version-string": "1.74.0", "port-version": 0 }, - "boost-type-index": { "version-string": "1.74.0", "port-version": 0 }, - "boost-type-traits": { "version-string": "1.74.0", "port-version": 0 }, - "boost-typeof": { "version-string": "1.74.0", "port-version": 0 }, - "boost-ublas": { "version-string": "1.74.0", "port-version": 0 }, - "boost-uninstall": { "version-string": "1.74.0", "port-version": 0 }, - "boost-units": { "version-string": "1.74.0", "port-version": 0 }, - "boost-unordered": { "version-string": "1.74.0", "port-version": 0 }, - "boost-utility": { "version-string": "1.74.0", "port-version": 0 }, - "boost-uuid": { "version-string": "1.74.0", "port-version": 0 }, - "boost-variant": { "version-string": "1.74.0", "port-version": 0 }, - "boost-variant2": { "version-string": "1.74.0", "port-version": 0 }, - "boost-vcpkg-helpers": { "version-string": "7", "port-version": 2 }, - "boost-vmd": { "version-string": "1.74.0", "port-version": 0 }, - "boost-wave": { "version-string": "1.74.0", "port-version": 0 }, - "boost-winapi": { "version-string": "1.74.0", "port-version": 0 }, - "boost-xpressive": { "version-string": "1.74.0", "port-version": 0 }, - "boost-yap": { "version-string": "1.74.0", "port-version": 0 }, - "boringssl": { "version-string": "2020-04-07", "port-version": 2 }, - "botan": { "version-string": "2.16.0", "port-version": 0 }, - "box2d": { "version-string": "2.4.0", "port-version": 0 }, - "breakpad": { "version-string": "2020-09-14", "port-version": 0 }, - "brigand": { "version-string": "1.3.0", "port-version": 0 }, - "brotli": { "version-string": "1.0.9", "port-version": 0 }, - "brpc": { "version-string": "0.9.7", "port-version": 0 }, - "brunocodutra-metal": { "version-string": "2.1.1", "port-version": 0 }, - "brynet": { "version-string": "1.0.7", "port-version": 0 }, - "bullet3": { "version-string": "2.89", "port-version": 1 }, - "bustache": { "version-string": "1.1.0", "port-version": 0 }, - "butteraugli": { "version-string": "2019-05-08", "port-version": 1 }, - "byte-lite": { "version-string": "0.2.0", "port-version": 0 }, - "bzip2": { "version-string": "1.0.8", "port-version": 1 }, - "c-ares": { "version-string": "2019-5-2", "port-version": 1 }, - "c4core": { "version-string": "2020-04-12", "port-version": 0 }, - "caf": { "version-string": "0.17.6", "port-version": 1 }, - "caffe2": { "version-string": "0.8.1", "port-version": 3 }, - "cairo": { "version-string": "1.16.0", "port-version": 8 }, - "cairomm": { "version-string": "1.15.3", "port-version": 5 }, - "capnproto": { "version-string": "0.8.0", "port-version": 0 }, - "capstone": { "version-string": "4.0.2", "port-version": 1 }, - "cartographer": { "version-string": "1.0.0", "port-version": 3 }, - "casclib": { "version-string": "1.50b", "port-version": 1 }, - "catch": { "version-string": "alias", "port-version": 0 }, - "catch-classic": { "version-string": "1.12.2", "port-version": 0 }, - "catch2": { "version-string": "2.13.1", "port-version": 0 }, - "cccapstone": { "version-string": "9b4128ee1153e78288a1b5433e2c06a0d47a4c4e", "port-version": 1 }, - "ccd": { "version-string": "2.1", "port-version": 4 }, - "ccfits": { "version-string": "2.5", "port-version": 6 }, - "cctz": { "version-string": "2.3", "port-version": 2 }, - "celero": { "version-string": "2.6.0", "port-version": 1 }, - "cello": { "version-string": "2019-07-23", "port-version": 0 }, - "cereal": { "version-string": "1.3.0", "port-version": 0 }, - "ceres": { "version-string": "1.14.0", "port-version": 10 }, - "cfitsio": { "version-string": "3.49", "port-version": 0 }, - "cgal": { "version-string": "5.1", "port-version": 0 }, - "cgicc": { "version-string": "3.2.19", "port-version": 4 }, - "cgl": { "version-string": "0.60.2", "port-version": 2 }, - "cgltf": { "version-string": "1.8", "port-version": 0 }, - "cgns": { "version-string": "3.4.0", "port-version": 1 }, - "chaiscript": { "version-string": "6.1.0", "port-version": 1 }, - "chakracore": { "version-string": "1.11.22", "port-version": 1 }, - "charls": { "version-string": "2.1.0", "port-version": 1 }, - "chartdir": { "version-string": "6.3.1", "port-version": 1 }, - "check": { "version-string": "0.15.2", "port-version": 0 }, - "chipmunk": { "version-string": "7.0.3", "port-version": 0 }, - "chmlib": { "version-string": "0.40", "port-version": 4 }, - "chromium-base": { "version-string": "86.0.4199.1", "port-version": 1 }, - "cimg": { "version-string": "2.6.2", "port-version": 0 }, - "cityhash": { "version-string": "2013-01-08", "port-version": 0 }, - "civetweb": { "version-string": "1.13", "port-version": 0 }, - "cjson": { "version-string": "2019-11-30", "port-version": 1 }, - "clapack": { "version-string": "3.2.1", "port-version": 15 }, - "clara": { "version-string": "1.1.5", "port-version": 0 }, - "clblas": { "version-string": "2.12", "port-version": 4 }, - "clblast": { "version-string": "1.5.1", "port-version": 0 }, - "clfft": { "version-string": "2.12.2", "port-version": 2 }, - "cli": { "version-string": "1.2.1", "port-version": 0 }, - "cli11": { "version-string": "1.9.1", "port-version": 0 }, - "clickhouse-cpp": { "version-string": "2019-05-22", "port-version": 0 }, - "clipp": { "version-string": "2019-04-30", "port-version": 0 }, - "clockutils": { "version-string": "1.1.1-3651f232c27074c4ceead169e223edf5f00247c5", "port-version": 3 }, - "clp": { "version-string": "1.17.6", "port-version": 0 }, - "clue": { "version-string": "1.0.0-alpha.7", "port-version": 0 }, - "cmark": { "version-string": "0.29.0", "port-version": 0 }, - "cmcstl2": { "version-string": "2019-07-20", "port-version": 0 }, - "cmocka": { "version-string": "2020-08-01", "port-version": 0 }, - "cnl": { "version-string": "2019-06-23", "port-version": 0 }, - "coin": { "version-string": "4.0.0", "port-version": 1 }, - "coinutils": { "version-string": "2.11.4", "port-version": 0 }, - "collada-dom": { "version-string": "2.5.0", "port-version": 3 }, - "colmap": { "version-string": "3.6", "port-version": 0 }, - "comms": { "version-string": "3.1.2", "port-version": 0 }, - "comms-ublox": { "version-string": "0.19.1", "port-version": 0 }, - "commsdsl": { "version-string": "3.5.3", "port-version": 0 }, - "concurrentqueue": { "version-string": "1.0.2", "port-version": 0 }, - "console-bridge": { "version-string": "1.0.1", "port-version": 1 }, - "constexpr": { "version-string": "1.0", "port-version": 1 }, - "constexpr-contracts": { "version-string": "2020-08-09", "port-version": 0 }, - "coolprop": { "version-string": "6.4.1", "port-version": 0 }, - "coroutine": { "version-string": "1.5.0", "port-version": 1 }, - "corrade": { "version-string": "2020.06", "port-version": 0 }, - "cpp-base64": { "version-string": "2019-06-19", "port-version": 0 }, - "cpp-httplib": { "version-string": "0.7.0", "port-version": 0 }, - "cpp-netlib": { "version-string": "0.13.0", "port-version": 4 }, - "cpp-peglib": { "version-string": "0.1.0", "port-version": 0 }, - "cpp-redis": { "version-string": "4.3.1", "port-version": 2 }, - "cpp-taskflow": { "version-string": "2.6.0", "port-version": 0 }, - "cppad": { "version-string": "20200000.3", "port-version": 0 }, - "cppcms": { "version-string": "1.2.1", "port-version": 1 }, - "cppcodec": { "version-string": "0.2", "port-version": 0 }, - "cppcoro": { "version-string": "2020-2-28", "port-version": 1 }, - "cppfs": { "version-string": "1.3.0", "port-version": 0 }, - "cppgraphqlgen": { "version-string": "3.2.4", "port-version": 0 }, - "cppitertools": { "version-string": "2.0", "port-version": 0 }, - "cppkafka": { "version-string": "0.3.1", "port-version": 2 }, - "cppmicroservices": { "version-string": "3.4.0", "port-version": 1 }, - "cpprestsdk": { "version-string": "2.10.16", "port-version": 3 }, - "cpptoml": { "version-string": "v0.1.1", "port-version": 0 }, - "cppunit": { "version-string": "1.14.0", "port-version": 1 }, - "cpputest": { "version-string": "2019-9-16", "port-version": 1 }, - "cppwinrt": { "version-string": "windows-sdk", "port-version": 0 }, - "cppzmq": { "version-string": "4.7.1", "port-version": 0 }, - "cpr": { "version-string": "1.5.2", "port-version": 0 }, - "cpu-features": { "version-string": "0.4.1", "port-version": 0 }, - "cpuid": { "version-string": "0.4.1", "port-version": 1 }, - "cpuinfo": { "version-string": "2019-07-28", "port-version": 1 }, - "cr": { "version-string": "2020-04-26", "port-version": 0 }, - "crashpad": { "version-string": "2020-03-18", "port-version": 0 }, - "crashrpt": { "version-string": "1.4.3", "port-version": 0 }, - "crc32c": { "version-string": "1.1.1", "port-version": 0 }, - "crfsuite": { "version-string": "2019-07-21", "port-version": 0 }, - "croncpp": { "version-string": "2020-09-04", "port-version": 1 }, - "crossguid": { "version-string": "0.2.2-2018-06-16", "port-version": 1 }, - "crow": { "version-string": "0.1", "port-version": 1 }, - "cryptopp": { "version-string": "8.2.0", "port-version": 2 }, - "cspice": { "version-string": "66", "port-version": 3 }, - "ctbignum": { "version-string": "2019-08-02", "port-version": 0 }, - "ctemplate": { "version-string": "2020-09-14", "port-version": 0 }, - "ctp": { "version-string": "6.3.15_20190220_se", "port-version": 0 }, - "ctre": { "version-string": "2.10", "port-version": 0 }, - "cub": { "version-string": "1.8.0", "port-version": 1 }, - "cuda": { "version-string": "10.1", "port-version": 4 }, - "cudnn": { "version-string": "7.6", "port-version": 2 }, - "cunit": { "version-string": "2.1.3", "port-version": 6 }, - "curl": { "version-string": "7.73.0", "port-version": 2 }, - "curlpp": { "version-string": "2018-06-15", "port-version": 3 }, - "cute-headers": { "version-string": "2019-09-20", "port-version": 0 }, - "cutelyst2": { "version-string": "2.12.0", "port-version": 0 }, - "cxxopts": { "version-string": "2.2.1", "port-version": 0 }, - "czmq": { "version-string": "2019-06-10", "port-version": 4 }, - "d3dx12": { "version-string": "may2020", "port-version": 0 }, - "darknet": { "version-string": "2020-08-30", "port-version": 1 }, - "darts-clone": { "version-string": "1767ab87cffe", "port-version": 1 }, - "dartsim": { "version-string": "6.9.4", "port-version": 0 }, - "dataframe": { "version-string": "1.12.0", "port-version": 0 }, - "date": { "version-string": "3.0.0", "port-version": 1 }, - "dbg-macro": { "version-string": "2019-07-11", "port-version": 0 }, - "dbghelp": { "version-string": "0.0", "port-version": 0 }, - "dbow2": { "version-string": "2019-08-05", "port-version": 0 }, - "dbow3": { "version-string": "1.0.0", "port-version": 0 }, - "dcmtk": { "version-string": "3.6.5+_20191213", "port-version": 0 }, - "decimal-for-cpp": { "version-string": "1.16", "port-version": 1 }, - "detours": { "version-string": "4.0.1", "port-version": 1 }, - "devicenameresolver": { "version-string": "2016-06-26-0850d88fa6", "port-version": 1 }, - "devil": { "version-string": "1.8.0", "port-version": 6 }, - "dimcli": { "version-string": "5.0.2", "port-version": 0 }, - "directxmesh": { "version-string": "aug2020", "port-version": 1 }, - "directxsdk": { "version-string": "jun10", "port-version": 0 }, - "directxtex": { "version-string": "sept2020", "port-version": 2 }, - "directxtk": { "version-string": "sept2020", "port-version": 1 }, - "directxtk12": { "version-string": "sept2020", "port-version": 1 }, - "dirent": { "version-string": "1.23.2", "port-version": 0 }, - "discord-game-sdk": { "version-string": "2.5.6", "port-version": 1 }, - "discord-rpc": { "version-string": "3.4.0", "port-version": 0 }, - "discount": { "version-string": "2.2.6", "port-version": 0 }, - "distorm": { "version-string": "3.4.1", "port-version": 0 }, - "dlfcn-win32": { "version-string": "1.1.1", "port-version": 4 }, - "dlib": { "version-string": "19.21", "port-version": 4 }, - "dmlc": { "version-string": "2019-08-12", "port-version": 4 }, - "docopt": { "version-string": "2018-11-01", "port-version": 0 }, - "doctest": { "version-string": "2.4.0", "port-version": 0 }, - "double-conversion": { "version-string": "3.1.5", "port-version": 0 }, - "dpdk": { "version-string": "19.02", "port-version": 0 }, - "draco": { "version-string": "1.3.6", "port-version": 0 }, - "drlibs": { "version-string": "2019-08-12", "port-version": 0 }, - "drogon": { "version-string": "1.1.0", "port-version": 0 }, - "dtl": { "version-string": "1.19", "port-version": 0 }, - "duckx": { "version-string": "1.0.0", "port-version": 0 }, - "duilib": { "version-string": "2019-4-28", "port-version": 2 }, - "duktape": { "version-string": "2.5.0", "port-version": 0 }, - "dx": { "version-string": "1.0.1", "port-version": 1 }, - "dxut": { "version-string": "11.14", "port-version": 3 }, - "eabase": { "version-string": "2.09.12", "port-version": 1 }, - "eastl": { "version-string": "3.16.07", "port-version": 0 }, - "easycl": { "version-string": "0.3", "port-version": 0 }, - "easyhook": { "version-string": "2.7.6789.0", "port-version": 0 }, - "easyloggingpp": { "version-string": "9.96.7", "port-version": 1 }, - "eathread": { "version-string": "1.32.09", "port-version": 1 }, - "ebml": { "version-string": "1.4.0", "port-version": 0 }, - "ecm": { "version-string": "5.74.0", "port-version": 0 }, - "ecos": { "version-string": "2.0.7", "port-version": 0 }, - "ecsutil": { "version-string": "1.0.7.15", "port-version": 0 }, - "edlib": { "version-string": "1.2.6", "port-version": 0 }, - "effolkronium-random": { "version-string": "1.3.1", "port-version": 0 }, - "efsw": { "version-string": "2020-06-08", "port-version": 1 }, - "egl-registry": { "version-string": "2020-02-20", "port-version": 0 }, - "eigen3": { "version-string": "3.3.7", "port-version": 8 }, - "elfio": { "version-string": "3.8", "port-version": 0 }, - "embree2": { "version-string": "2.17.7", "port-version": 0 }, - "embree3": { "version-string": "3.11.0", "port-version": 1 }, - "enet": { "version-string": "1.3.16", "port-version": 0 }, - "ensmallen": { "version-string": "2.14.2", "port-version": 0 }, - "entityx": { "version-string": "1.3.0", "port-version": 2 }, - "entt": { "version-string": "3.5.1", "port-version": 0 }, - "epsilon": { "version-string": "0.9.2", "port-version": 4 }, - "esaxx": { "version-string": "ca7cb332011ec37", "port-version": 0 }, - "evpp": { "version-string": "0.7.0", "port-version": 4 }, - "exiv2": { "version-string": "0.27.3", "port-version": 3 }, - "expat": { "version-string": "2020-08-18", "port-version": 0 }, - "expected-lite": { "version-string": "0.3.0", "port-version": 0 }, - "exprtk": { "version-string": "2020-09-14", "port-version": 0 }, - "ezc3d": { "version-string": "1.3.7", "port-version": 0 }, - "faad2": { "version-string": "2.9.1", "port-version": 2 }, - "fadbad": { "version-string": "2.1.0", "port-version": 0 }, - "faiss": { "version-string": "1.6.4", "port-version": 0 }, - "fann": { "version-string": "2.2.0", "port-version": 1 }, - "farmhash": { "version-string": "1.1", "port-version": 2 }, - "fast-cpp-csv-parser": { "version-string": "2019-08-14", "port-version": 0 }, - "fastcdr": { "version-string": "1.0.15", "port-version": 0 }, - "fastcgi": { "version-string": "2020-09-11", "port-version": 0 }, - "fastfeat": { "version-string": "391d5e9", "port-version": 1 }, - "fastlz": { "version-string": "1.0", "port-version": 3 }, - "fastrtps": { "version-string": "2.0.1", "port-version": 0 }, - "fbthrift": { "version-string": "2020.10.19.00", "port-version": 0 }, - "fcl": { "version-string": "0.6.1", "port-version": 0 }, - "fdk-aac": { "version-string": "2018-07-08", "port-version": 2 }, - "fdlibm": { "version-string": "5.3", "port-version": 4 }, - "ffmpeg": { "version-string": "4.3.1", "port-version": 7 }, - "ffnvcodec": { "version-string": "10.0.26.0", "port-version": 0 }, - "fftw3": { "version-string": "3.3.8", "port-version": 7 }, - "fftwpp": { "version-string": "2019-12-19", "port-version": 0 }, - "field3d": { "version-string": "1.7.3", "port-version": 1 }, - "fizz": { "version-string": "2020.10.19.00", "port-version": 0 }, - "flann": { "version-string": "2019-04-07", "port-version": 1 }, - "flatbuffers": { "version-string": "1.12.0", "port-version": 0 }, - "flint": { "version-string": "2.5.2", "port-version": 4 }, - "fltk": { "version-string": "1.3.5", "port-version": 3 }, - "fluidlite": { "version-string": "2020-08-27", "port-version": 0 }, - "fluidsynth": { "version-string": "2.1.4", "port-version": 0 }, - "fmem": { "version-string": "c-libs", "port-version": 2 }, - "fmi4cpp": { "version-string": "0.7.0", "port-version": 2 }, - "fmilib": { "version-string": "2.0.3", "port-version": 3 }, - "fmt": { "version-string": "7.1.2", "port-version": 0 }, - "folly": { "version-string": "2020.10.19.00", "port-version": 0 }, - "font-chef": { "version-string": "1.0.1", "port-version": 0 }, - "fontconfig": { "version-string": "2.13.1", "port-version": 0 }, - "foonathan-memory": { "version-string": "2019-07-21", "port-version": 1 }, - "forest": { "version-string": "12.1.0", "port-version": 0 }, - "forge": { "version-string": "1.0.5", "port-version": 0 }, - "fplus": { "version-string": "0.2.3-p0", "port-version": 0 }, - "freeglut": { "version-string": "3.2.1", "port-version": 4 }, - "freeimage": { "version-string": "3.18.0", "port-version": 17 }, - "freeopcua": { "version-string": "20190125", "port-version": 3 }, - "freerdp": { "version-string": "2.2.0", "port-version": 0 }, - "freetds": { "version-string": "1.2.5", "port-version": 0 }, - "freetype": { "version-string": "2.10.2", "port-version": 5 }, - "freetype-gl": { "version-string": "2020-09-14", "port-version": 0 }, - "freexl": { "version-string": "1.0.4", "port-version": 11 }, - "fribidi": { "version-string": "1.0.10", "port-version": 0 }, - "frozen": { "version-string": "1.0.0", "port-version": 0 }, - "fruit": { "version-string": "3.6.0", "port-version": 0 }, - "ftgl": { "version-string": "2.4.0", "port-version": 2 }, - "function2": { "version-string": "4.1.0", "port-version": 0 }, - "fuzzylite": { "version-string": "6.0", "port-version": 3 }, - "g2o": { "version-string": "2020-02-07", "port-version": 1 }, - "g3log": { "version-string": "2019-07-29", "port-version": 0 }, - "gainput": { "version-string": "1.0.0", "port-version": 3 }, - "gamedev-framework": { "version-string": "0.18.1", "port-version": 0 }, - "gamma": { "version-string": "gamma-2018-01-27", "port-version": 2 }, - "gasol": { "version-string": "2018-01-04", "port-version": 0 }, - "gaussianlib": { "version-string": "2019-08-04", "port-version": 0 }, - "gcem": { "version-string": "1.13.1", "port-version": 0 }, - "gdal": { "version-string": "2.4.1", "port-version": 14 }, - "gdcm": { "version-string": "3.0.7", "port-version": 0 }, - "gdcm2": { "version-string": "deprecated", "port-version": 0 }, - "gdk-pixbuf": { "version-string": "2.36.9-5", "port-version": 6 }, - "genann": { "version-string": "2019-07-10", "port-version": 0 }, - "geogram": { "version-string": "1.7.5", "port-version": 2 }, - "geographiclib": { "version-string": "1.50.1", "port-version": 0 }, - "geos": { "version-string": "3.8.1", "port-version": 1 }, - "geotrans": { "version-string": "3.7", "port-version": 0 }, - "getdns": { "version-string": "1.6.0", "port-version": 0 }, - "getopt": { "version-string": "0", "port-version": 0 }, - "getopt-win32": { "version-string": "0.1", "port-version": 0 }, - "gettext": { "version-string": "0.21", "port-version": 0 }, - "gettimeofday": { "version-string": "2017-10-14", "port-version": 3 }, - "gflags": { "version-string": "2.2.2", "port-version": 1 }, - "gherkin-c": { "version-string": "2019-10-07", "port-version": 1 }, - "giflib": { "version-string": "5.1.4", "port-version": 6 }, - "gl2ps": { "version-string": "1.4.0", "port-version": 3 }, - "gl3w": { "version-string": "2018-05-31", "port-version": 2 }, - "glad": { "version-string": "0.1.33", "port-version": 1 }, - "glbinding": { "version-string": "3.1.0", "port-version": 2 }, - "glew": { "version-string": "2.1.0", "port-version": 9 }, - "glfw3": { "version-string": "3.3.2", "port-version": 0 }, - "gli": { "version-string": "dd17acf", "port-version": 1 }, - "glib": { "version-string": "2.52.3", "port-version": 23 }, - "glibmm": { "version-string": "2.52.1", "port-version": 12 }, - "glm": { "version-string": "0.9.9.8", "port-version": 0 }, - "globjects": { "version-string": "1.1.0", "port-version": 3 }, - "glog": { "version-string": "0.4.0", "port-version": 3 }, - "glslang": { "version-string": "2019-03-05", "port-version": 1 }, - "glui": { "version-string": "2019-11-30", "port-version": 0 }, - "gmime": { "version-string": "3.2.6", "port-version": 1 }, - "gmmlib": { "version-string": "20.3.1", "port-version": 0 }, - "gmp": { "version-string": "6.2.0", "port-version": 5 }, - "google-cloud-cpp": { "version-string": "1.20.0", "port-version": 0 }, - "google-cloud-cpp-common": { "version-string": "alias", "port-version": 0 }, - "google-cloud-cpp-spanner": { "version-string": "alias", "port-version": 0 }, - "googleapis": { "version-string": "alias", "port-version": 0 }, - "gperf": { "version-string": "3.1", "port-version": 1 }, - "gperftools": { "version-string": "2019-09-02", "port-version": 0 }, - "gppanel": { "version-string": "2020-05-20", "port-version": 0 }, - "graphicsmagick": { "version-string": "1.3.35", "port-version": 2 }, - "graphite2": { "version-string": "1.3.14", "port-version": 0 }, - "graphqlparser": { "version-string": "0.7.0", "port-version": 1 }, - "greatest": { "version-string": "1.4.2", "port-version": 0 }, - "grpc": { "version-string": "1.33.1", "port-version": 0 }, - "grppi": { "version-string": "0.4.0", "port-version": 0 }, - "gsl": { "version-string": "2.6", "port-version": 0 }, - "gsl-lite": { "version-string": "0.37.0", "port-version": 0 }, - "gsoap": { "version-string": "2.8.105", "port-version": 0 }, - "gtest": { "version-string": "1.10.0", "port-version": 2 }, - "gtk": { "version-string": "3.22.19", "port-version": 4 }, - "gtkmm": { "version-string": "3.22.2", "port-version": 4 }, - "gts": { "version-string": "0.7.6", "port-version": 3 }, - "guetzli": { "version-string": "2020-09-14", "port-version": 0 }, - "gumbo": { "version-string": "0.10.1", "port-version": 3 }, - "gzip-hpp": { "version-string": "0.1.0", "port-version": 0 }, - "h3": { "version-string": "3.6.3", "port-version": 0 }, - "h5py-lzf": { "version-string": "2019-12-04", "port-version": 0 }, - "halide": { "version-string": "10.0.0", "port-version": 0 }, - "harfbuzz": { "version-string": "2.7.2", "port-version": 1 }, - "hayai": { "version-string": "2019-08-10", "port-version": 0 }, - "hdf5": { "version-string": "1.12.0", "port-version": 0 }, - "healpix": { "version-string": "1.12.10", "port-version": 7 }, - "hedley": { "version-string": "2019-05-08", "port-version": 1 }, - "hffix": { "version-string": "1.0.0", "port-version": 0 }, - "hfsm2": { "version-string": "beta7", "port-version": 0 }, - "hidapi": { "version-string": "2019-08-30", "port-version": 0 }, - "highfive": { "version-string": "2.2.2", "port-version": 0 }, - "hiredis": { "version-string": "2019-11-2", "port-version": 2 }, - "hpx": { "version-string": "1.5.1", "port-version": 1 }, - "http-parser": { "version-string": "2.9.4", "port-version": 0 }, - "hungarian": { "version-string": "v0.1.3", "port-version": 0 }, - "hunspell": { "version-string": "1.7.0", "port-version": 1 }, - "hwloc": { "version-string": "2.2.0", "port-version": 0 }, - "hyperscan": { "version-string": "5.3.0", "port-version": 0 }, - "hypre": { "version-string": "2.19.0", "port-version": 0 }, - "icu": { "version-string": "67.1", "port-version": 5 }, - "ideviceinstaller": { "version-string": "1.1.2.23", "port-version": 1 }, - "idevicerestore": { "version-string": "1.0.12", "port-version": 4 }, - "if97": { "version-string": "2.1.2", "port-version": 0 }, - "igloo": { "version-string": "1.1.1", "port-version": 0 }, - "ignition-cmake0": { "version-string": "0.6.2", "port-version": 2 }, - "ignition-cmake2": { "version-string": "2.5.0", "port-version": 0 }, - "ignition-common1": { "version-string": "1.1.1", "port-version": 1 }, - "ignition-fuel-tools1": { "version-string": "1.2.0", "port-version": 2 }, - "ignition-math4": { "version-string": "4.0.0", "port-version": 1 }, - "ignition-math6": { "version-string": "6.6.0", "port-version": 0 }, - "ignition-modularscripts": { "version-string": "2020-05-16", "port-version": 2 }, - "ignition-msgs1": { "version-string": "1.0.0", "port-version": 2 }, - "ignition-msgs5": { "version-string": "5.3.0", "port-version": 1 }, - "ignition-msgs6": { "version-string": "6.0.0", "port-version": 0 }, - "ignition-plugin1": { "version-string": "1.1.0", "port-version": 0 }, - "ignition-transport4": { "version-string": "4.0.0", "port-version": 2 }, - "ignition-transport8": { "version-string": "8.1.0", "port-version": 0 }, - "ignition-transport9": { "version-string": "9.0.0", "port-version": 0 }, - "ilmbase": { "version-string": "2.3.0", "port-version": 0 }, - "imgui": { "version-string": "1.79", "port-version": 1 }, - "imgui-sfml": { "version-string": "2.1", "port-version": 2 }, - "immer": { "version-string": "2019-06-07", "port-version": 0 }, - "implot": { "version-string": "0.8", "port-version": 0 }, - "indicators": { "version-string": "2020-10-30", "port-version": 0 }, - "infoware": { "version-string": "0.5.5", "port-version": 1 }, - "inih": { "version-string": "51", "port-version": 0 }, - "iniparser": { "version-string": "2020-04-06", "port-version": 0 }, - "inja": { "version-string": "3.0.0", "port-version": 0 }, - "intel-ipsec": { "version-string": "0.52", "port-version": 1 }, - "intel-mkl": { "version-string": "2020.0.0", "port-version": 0 }, - "intelrdfpmathlib": { "version-string": "20U2", "port-version": 1 }, - "io2d": { "version-string": "2020-09-14", "port-version": 1 }, - "irrlicht": { "version-string": "1.8.4", "port-version": 10 }, - "irrxml": { "version-string": "0", "port-version": 0 }, - "isal": { "version-string": "2.25.0", "port-version": 0 }, - "ismrmrd": { "version-string": "1.4.2", "port-version": 0 }, - "itk": { "version-string": "5.1.0", "port-version": 3 }, - "itpp": { "version-string": "4.3.1", "port-version": 5 }, - "ixwebsocket": { "version-string": "9.6.2", "port-version": 0 }, - "jack2": { "version-string": "1.9.14", "port-version": 0 }, - "jaeger-client-cpp": { "version-string": "0.5.1", "port-version": 1 }, - "jansson": { "version-string": "2.13.1", "port-version": 0 }, - "jasper": { "version-string": "2.0.20", "port-version": 0 }, - "jbig2dec": { "version-string": "0.19", "port-version": 0 }, - "jbigkit": { "version-string": "2.1", "port-version": 4 }, - "jemalloc": { "version-string": "4.3.1", "port-version": 4 }, - "jinja2cpplight": { "version-string": "2018-05-08", "port-version": 0 }, - "josuttis-jthread": { "version-string": "2020-07-21", "port-version": 1 }, - "jsmn": { "version-string": "2019-04-27", "port-version": 0 }, - "json-c": { "version-string": "2019-09-10", "port-version": 1 }, - "json-dto": { "version-string": "0.2.11", "port-version": 0 }, - "json-schema-validator": { "version-string": "2.1.0", "port-version": 0 }, - "json-spirit": { "version-string": "4.1.0", "port-version": 1 }, - "json11": { "version-string": "2017-06-20", "port-version": 2 }, - "json5-parser": { "version-string": "1.0.0", "port-version": 2 }, - "jsoncons": { "version-string": "0.158.0", "port-version": 0 }, - "jsoncpp": { "version-string": "1.9.4", "port-version": 0 }, - "jsonnet": { "version-string": "0.16.0", "port-version": 1 }, - "jwt-cpp": { "version-string": "0.4.0", "port-version": 0 }, - "jxrlib": { "version-string": "2019.10.9", "port-version": 2 }, - "kangaru": { "version-string": "4.2.4", "port-version": 0 }, - "kcp": { "version-string": "2019-09-20", "port-version": 0 }, - "kd-soap": { "version-string": "1.9.0", "port-version": 0 }, - "kealib": { "version-string": "1.4.11", "port-version": 3 }, - "kenlm": { "version-string": "20200924", "port-version": 1 }, - "keystone": { "version-string": "0.9.2", "port-version": 0 }, - "kf5archive": { "version-string": "5.74.0", "port-version": 0 }, - "kf5completion": { "version-string": "5.64.0", "port-version": 0 }, - "kf5config": { "version-string": "5.64.0", "port-version": 0 }, - "kf5coreaddons": { "version-string": "5.64.0", "port-version": 0 }, - "kf5crash": { "version-string": "5.64.0", "port-version": 0 }, - "kf5guiaddons": { "version-string": "5.64.0", "port-version": 0 }, - "kf5holidays": { "version-string": "5.74.0", "port-version": 0 }, - "kf5i18n": { "version-string": "5.64.0", "port-version": 1 }, - "kf5itemmodels": { "version-string": "5.64.0", "port-version": 0 }, - "kf5itemviews": { "version-string": "5.64.0", "port-version": 0 }, - "kf5plotting": { "version-string": "5.74.0", "port-version": 0 }, - "kf5syntaxhighlighting": { "version-string": "5.64.0", "port-version": 1 }, - "kf5widgetsaddons": { "version-string": "5.64.0", "port-version": 0 }, - "kf5windowsystem": { "version-string": "5.64.0", "port-version": 0 }, - "kfr": { "version-string": "2020-06-15", "port-version": 0 }, - "kinectsdk1": { "version-string": "1.8", "port-version": 2 }, - "kinectsdk2": { "version-string": "2.0", "port-version": 2 }, - "kissfft": { "version-string": "2020-03-30", "port-version": 0 }, - "knet": { "version-string": "1.0.1", "port-version": 1 }, - "krabsetw": { "version-string": "4.1.14", "port-version": 0 }, - "kubazip": { "version-string": "0.1.19", "port-version": 0 }, - "kvasir-mpl": { "version-string": "2019-08-06", "port-version": 0 }, - "lapack": { "version-string": "3", "port-version": 0 }, - "lapack-reference": { "version-string": "3.8.0", "port-version": 3 }, - "lastools": { "version-string": "2020-05-09", "port-version": 0 }, - "laszip": { "version-string": "3.4.3", "port-version": 0 }, - "lazy-importer": { "version-string": "2019-08-10", "port-version": 0 }, - "lcm": { "version-string": "1.4.0", "port-version": 1 }, - "lcms": { "version-string": "2.11", "port-version": 0 }, - "leaf": { "version-string": "0.2.2", "port-version": 0 }, - "lemon": { "version-string": "0", "port-version": 0 }, - "leptonica": { "version-string": "1.80.0", "port-version": 0 }, - "lerc": { "version-string": "2.2", "port-version": 1 }, - "lest": { "version-string": "1.35.1", "port-version": 1 }, - "leveldb": { "version-string": "1.22", "port-version": 1 }, - "levmar": { "version-string": "2.6", "port-version": 0 }, - "libaaplus": { "version-string": "2.12", "port-version": 1 }, - "libaiff": { "version-string": "5.0", "port-version": 6 }, - "libarchive": { "version-string": "3.4.3", "port-version": 2 }, - "libass": { "version-string": "0.14.0", "port-version": 3 }, - "libb2": { "version-string": "0.98.1", "port-version": 4 }, - "libbf": { "version-string": "1.0.0", "port-version": 1 }, - "libbson": { "version-string": "1.16.1", "port-version": 1 }, - "libcds": { "version-string": "2.3.3", "port-version": 0 }, - "libcerf": { "version-string": "1.13", "port-version": 0 }, - "libconfig": { "version-string": "1.7.2", "port-version": 2 }, - "libconfuse": { "version-string": "2019-07-14", "port-version": 0 }, - "libcopp": { "version-string": "1.3.2", "port-version": 0 }, - "libcrafter": { "version-string": "0.3", "port-version": 2 }, - "libcroco": { "version-string": "0.6.13", "port-version": 2 }, - "libcuckoo": { "version-string": "0.3", "port-version": 0 }, - "libdatrie": { "version-string": "0.2.10", "port-version": 3 }, - "libde265": { "version-string": "1.0.5", "port-version": 0 }, - "libdisasm": { "version-string": "0.23", "port-version": 7 }, - "libdivide": { "version-string": "3.0", "port-version": 0 }, - "libdshowcapture": { "version-string": "0.6.0", "port-version": 1 }, - "libepoxy": { "version-string": "1.5.4", "port-version": 2 }, - "libevent": { "version-string": "2.1.12", "port-version": 0 }, - "libevhtp": { "version-string": "1.2.18", "port-version": 0 }, - "libexif": { "version-string": "0.6.22", "port-version": 0 }, - "libfabric": { "version-string": "1.8.1", "port-version": 1 }, - "libffi": { "version-string": "3.3", "port-version": 6 }, - "libflac": { "version-string": "1.3.3", "port-version": 5 }, - "libfort": { "version-string": "0.4.1", "port-version": 0 }, - "libfreenect2": { "version-string": "0.2.0", "port-version": 5 }, - "libftdi": { "version-string": "0.20", "port-version": 1 }, - "libftdi1": { "version-string": "1.4", "port-version": 1 }, - "libgd": { "version-string": "2.2.5", "port-version": 4 }, - "libgeotiff": { "version-string": "1.6.0", "port-version": 0 }, - "libgit2": { "version-string": "1.1.0", "port-version": 0 }, - "libgo": { "version-string": "3.1", "port-version": 1 }, - "libgpod": { "version-string": "2019-08-29", "port-version": 2 }, - "libgta": { "version-string": "1.0.8", "port-version": 1 }, - "libguarded": { "version-string": "2019-08-27", "port-version": 1 }, - "libharu": { "version-string": "2017-08-15", "port-version": 9 }, - "libhdfs3": { "version-string": "2019-11-05", "port-version": 0 }, - "libheif": { "version-string": "1.7.0", "port-version": 1 }, - "libhsplasma": { "version-string": "2020.08.30", "port-version": 0 }, - "libhydrogen": { "version-string": "2019-08-11", "port-version": 0 }, - "libiconv": { "version-string": "1.16", "port-version": 6 }, - "libics": { "version-string": "1.6.4", "port-version": 0 }, - "libideviceactivation": { "version-string": "1.2.235", "port-version": 0 }, - "libidn2": { "version-string": "2.3.0", "port-version": 1 }, - "libigl": { "version-string": "2.2.0", "port-version": 3 }, - "libimobiledevice": { "version-string": "1.3.6", "port-version": 1 }, - "libirecovery": { "version-string": "1.0.25", "port-version": 2 }, - "libjpeg-turbo": { "version-string": "2.0.5", "port-version": 0 }, - "libjuice": { "version-string": "0.5.2", "port-version": 0 }, - "libkml": { "version-string": "1.3.0", "port-version": 6 }, - "liblas": { "version-string": "1.8.1", "port-version": 5 }, - "liblbfgs": { "version-string": "1.10", "port-version": 0 }, - "liblemon": { "version-string": "2019-06-13", "port-version": 1 }, - "liblinear": { "version-string": "241", "port-version": 0 }, - "liblo": { "version-string": "0.31", "port-version": 0 }, - "liblsl": { "version-string": "1.13.0-b11", "port-version": 1 }, - "liblzma": { "version-string": "5.2.5", "port-version": 1 }, - "libmad": { "version-string": "0.15.1", "port-version": 8 }, - "libmagic": { "version-string": "5.37", "port-version": 2 }, - "libmariadb": { "version-string": "3.1.10", "port-version": 3 }, - "libmaxminddb": { "version-string": "1.4.3", "port-version": 0 }, - "libmediainfo": { "version-string": "20.09", "port-version": 0 }, - "libmesh": { "version-string": "1.5.0", "port-version": 1 }, - "libmicrohttpd": { "version-string": "0.9.63", "port-version": 4 }, - "libmikmod": { "version-string": "3.3.11.1", "port-version": 8 }, - "libmodbus": { "version-string": "3.1.6", "port-version": 1 }, - "libmodman": { "version-string": "2.0.1", "port-version": 2 }, - "libmodplug": { "version-string": "0.8.9.0", "port-version": 6 }, - "libmorton": { "version-string": "0.2", "port-version": 0 }, - "libmpeg2": { "version-string": "0.5.1", "port-version": 0 }, - "libmspack": { "version-string": "0.10.1", "port-version": 3 }, - "libmupdf": { "version-string": "1.18.0", "port-version": 0 }, - "libmysql": { "version-string": "8.0.20", "port-version": 1 }, - "libnice": { "version-string": "0.1.15", "port-version": 6 }, - "libnoise": { "version-string": "1.0.0", "port-version": 1 }, - "libodb": { "version-string": "2.4.0", "port-version": 6 }, - "libodb-boost": { "version-string": "2.4.0", "port-version": 3 }, - "libodb-mysql": { "version-string": "2.4.0", "port-version": 7 }, - "libodb-pgsql": { "version-string": "2.4.0", "port-version": 3 }, - "libodb-sqlite": { "version-string": "2.4.0", "port-version": 7 }, - "libogg": { "version-string": "1.3.4", "port-version": 2 }, - "libopenmpt": { "version-string": "2017-01-28-cf2390140", "port-version": 1 }, - "libopusenc": { "version-string": "0.2.1", "port-version": 0 }, - "libosip2": { "version-string": "5.1.0", "port-version": 4 }, - "libosmium": { "version-string": "2.15.5", "port-version": 0 }, - "libosmscout": { "version-string": "1.1.1", "port-version": 0 }, - "libp7-baical": { "version-string": "replaced", "port-version": 0 }, - "libp7client": { "version-string": "5.6", "port-version": 0 }, - "libpcap": { "version-string": "1.9.1", "port-version": 2 }, - "libpff": { "version-string": "2018-07-14", "port-version": 1 }, - "libplist": { "version-string": "1.3.6", "port-version": 0 }, - "libpmemobj-cpp": { "version-string": "1.11", "port-version": 0 }, - "libpng": { "version-string": "1.6.37", "port-version": 13 }, - "libpopt": { "version-string": "1.16", "port-version": 13 }, - "libpq": { "version-string": "12.2", "port-version": 8 }, - "libpqxx": { "version-string": "7.2.0", "port-version": 0 }, - "libproxy": { "version-string": "0.4.15", "port-version": 2 }, - "libqcow": { "version-string": "20200928", "port-version": 0 }, - "libqglviewer": { "version-string": "2.7.2", "port-version": 3 }, - "libqrencode": { "version-string": "4.1.0", "port-version": 0 }, - "librabbitmq": { "version-string": "2020-06-03", "port-version": 0 }, - "libraqm": { "version-string": "0.7.0", "port-version": 2 }, - "libraw": { "version-string": "201903", "port-version": 3 }, - "librdkafka": { "version-string": "1.5.0", "port-version": 0 }, - "libressl": { "version-string": "2.9.1", "port-version": 3 }, - "librsvg": { "version-string": "2.40.20", "port-version": 2 }, - "librsync": { "version-string": "2020-09-16", "port-version": 0 }, - "librtmp": { "version-string": "2019-11", "port-version": 11 }, - "libsamplerate": { "version-string": "0.1.9.0", "port-version": 3 }, - "libsbml": { "version-string": "5.18.0", "port-version": 0 }, - "libsigcpp": { "version-string": "2.10", "port-version": 3 }, - "libsigcpp-3": { "version-string": "3.0.3", "port-version": 0 }, - "libsndfile": { "version-string": "1.0.30", "port-version": 1 }, - "libsodium": { "version-string": "1.0.18", "port-version": 2 }, - "libsoundio": { "version-string": "2.0.0", "port-version": 3 }, - "libspatialindex": { "version-string": "1.9.0", "port-version": 0 }, - "libspatialite": { "version-string": "4.3.0a", "port-version": 6 }, - "libspnav": { "version-string": "0.2.3", "port-version": 0 }, - "libsquish": { "version-string": "1.15", "port-version": 7 }, - "libsrt": { "version-string": "1.3.4", "port-version": 0 }, - "libsrtp": { "version-string": "2.2.0", "port-version": 0 }, - "libssh": { "version-string": "0.9.5", "port-version": 0 }, - "libssh2": { "version-string": "1.9.0", "port-version": 0 }, - "libstemmer": { "version-string": "2017-9", "port-version": 5 }, - "libstk": { "version-string": "4.6.1", "port-version": 0 }, - "libsvm": { "version-string": "323", "port-version": 1 }, - "libtheora": { "version-string": "1.2.0alpha1-20170719", "port-version": 2 }, - "libtins": { "version-string": "4.3", "port-version": 0 }, - "libtomcrypt": { "version-string": "1.18.2", "port-version": 1 }, - "libtommath": { "version-string": "1.2.0", "port-version": 1 }, - "libtorrent": { "version-string": "1.2.10", "port-version": 2 }, - "libu2f-server": { "version-string": "1.1.0", "port-version": 2 }, - "libudis86": { "version-string": "2018-01-28", "port-version": 56 }, - "libudns": { "version-string": "0.4", "port-version": 2 }, - "libui": { "version-string": "2018-11-03", "port-version": 1 }, - "libunibreak": { "version-string": "4.3", "port-version": 0 }, - "libusb": { "version-string": "1.0.23", "port-version": 3 }, - "libusb-win32": { "version-string": "1.2.6.0", "port-version": 6 }, - "libusbmuxd": { "version-string": "1.2.219", "port-version": 0 }, - "libuuid": { "version-string": "1.0.3", "port-version": 7 }, - "libuv": { "version-string": "1.39.0", "port-version": 0 }, - "libvmdk": { "version-string": "20200926", "port-version": 0 }, - "libvorbis": { "version-string": "1.3.7", "port-version": 1 }, - "libvpx": { "version-string": "1.9.0", "port-version": 3 }, - "libwandio": { "version-string": "4.2.1", "port-version": 3 }, - "libwebm": { "version-string": "1.0.0.27", "port-version": 5 }, - "libwebp": { "version-string": "1.1.0", "port-version": 1 }, - "libwebsockets": { "version-string": "4.1.3", "port-version": 1 }, - "libxdiff": { "version-string": "0.23", "port-version": 0 }, - "libxlsxwriter": { "version-string": "0.9.4", "port-version": 0 }, - "libxml2": { "version-string": "2.9.10", "port-version": 1 }, - "libxmlmm": { "version-string": "0.6.0", "port-version": 0 }, - "libxmlpp": { "version-string": "2.40.1", "port-version": 6 }, - "libxmp-lite": { "version-string": "4.4.1", "port-version": 6 }, - "libxslt": { "version-string": "1.1.33", "port-version": 8 }, - "libyaml": { "version-string": "0.2.5", "port-version": 0 }, - "libyuv": { "version-string": "fec9121", "port-version": 3 }, - "libzen": { "version-string": "0.4.38", "port-version": 0 }, - "libzip": { "version-string": "1.7.3", "port-version": 0 }, - "libzippp": { "version-string": "4.0-1.7.3", "port-version": 2 }, - "licensepp": { "version-string": "2020-05-19", "port-version": 1 }, - "lilv": { "version-string": "0.24.10", "port-version": 0 }, - "linalg": { "version-string": "2.1", "port-version": 0 }, - "linenoise-ng": { "version-string": "4754bee2d8eb3", "port-version": 1 }, - "live555": { "version-string": "latest", "port-version": 1 }, - "llgl": { "version-string": "2019-08-15", "port-version": 0 }, - "llvm": { "version-string": "10.0.0", "port-version": 7 }, - "lmdb": { "version-string": "0.9.24", "port-version": 0 }, - "lodepng": { "version-string": "2020-03-15", "port-version": 0 }, - "log4cplus": { "version-string": "2.0.5", "port-version": 1 }, - "log4cpp": { "version-string": "2.9.1", "port-version": 3 }, - "log4cxx": { "version-string": "0.11.0", "port-version": 1 }, - "loguru": { "version-string": "2.1.0", "port-version": 1 }, - "lpeg": { "version-string": "1.0.2", "port-version": 1 }, - "lua": { "version-string": "5.4.1", "port-version": 0 }, - "luabridge": { "version-string": "2.6", "port-version": 0 }, - "luafilesystem": { "version-string": "1.8.0", "port-version": 1 }, - "luajit": { "version-string": "2.0.5", "port-version": 3 }, - "luasocket": { "version-string": "2020-09-14", "port-version": 0 }, - "lv2": { "version-string": "1.18.0", "port-version": 0 }, - "lz4": { "version-string": "1.9.2", "port-version": 2 }, - "lzfse": { "version-string": "1.0", "port-version": 2 }, - "lzo": { "version-string": "2.10", "port-version": 5 }, - "lzokay": { "version-string": "2020-07-30", "port-version": 0 }, - "magic-enum": { "version-string": "0.7.0", "port-version": 0 }, - "magic-get": { "version-string": "2019-09-02", "port-version": 1 }, - "magnum": { "version-string": "2020.06", "port-version": 1 }, - "magnum-extras": { "version-string": "2020.06", "port-version": 0 }, - "magnum-integration": { "version-string": "2020.06", "port-version": 0 }, - "magnum-plugins": { "version-string": "2020.06", "port-version": 1 }, - "mapbox-variant": { "version-string": "1.2.0", "port-version": 0 }, - "marble": { "version-string": "19.08.2", "port-version": 0 }, - "marl": { "version-string": "2020-10-10", "port-version": 0 }, - "mathc": { "version-string": "2019-09-29", "port-version": 0 }, - "mathgl": { "version-string": "2.4.3", "port-version": 6 }, - "matio": { "version-string": "1.5.17", "port-version": 0 }, - "matplotlib-cpp": { "version-string": "2020-08-27", "port-version": 0 }, - "matroska": { "version-string": "1.6.2", "port-version": 0 }, - "mbedtls": { "version-string": "2.24.0", "port-version": 1 }, - "mcpp": { "version-string": "2.7.2.14", "port-version": 2 }, - "mdnsresponder": { "version-string": "765.30.11", "port-version": 2 }, - "mecab": { "version-string": "2019-09-25", "port-version": 1 }, - "memorymodule": { "version-string": "2019-12-31", "port-version": 0 }, - "meschach": { "version-string": "1.2b", "port-version": 3 }, - "meshoptimizer": { "version-string": "0.14", "port-version": 1 }, - "metis": { "version-string": "5.1.0", "port-version": 7 }, - "metrohash": { "version-string": "1.1.3", "port-version": 1 }, - "mgnlibs": { "version-string": "2019-09-29", "port-version": 0 }, - "mhook": { "version-string": "2.5.1", "port-version": 1 }, - "microsoft-signalr": { "version-string": "0.1.0-alpha1", "port-version": 1 }, - "mikktspace": { "version-string": "2020-10-06", "port-version": 0 }, - "milerius-sfml-imgui": { "version-string": "1.1", "port-version": 2 }, - "mimalloc": { "version-string": "1.6.4", "port-version": 0 }, - "minc": { "version-string": "2.4.03", "port-version": 0 }, - "minhook": { "version-string": "1.3.3", "port-version": 1 }, - "minifb": { "version-string": "2019-08-20", "port-version": 1 }, - "minimp3": { "version-string": "2019-07-24", "port-version": 1 }, - "minisat-master-keying": { "version-string": "2.2-mod", "port-version": 2 }, - "minitrace": { "version-string": "2019.02.06", "port-version": 0 }, - "miniupnpc": { "version-string": "2.1", "port-version": 1 }, - "miniz": { "version-string": "2.1.0", "port-version": 1 }, - "minizip": { "version-string": "1.2.11", "port-version": 7 }, - "mio": { "version-string": "2019-02-10", "port-version": 0 }, - "mlpack": { "version-string": "3.4.1", "port-version": 0 }, - "mman": { "version-string": "git-f5ff813", "port-version": 3 }, - "mmloader": { "version-string": "2020-05-15", "port-version": 0 }, - "mmx": { "version-string": "2019-09-29", "port-version": 0 }, - "modp-base64": { "version-string": "2020-09-26", "port-version": 0 }, - "mongo-c-driver": { "version-string": "1.16.1-1", "port-version": 1 }, - "mongo-cxx-driver": { "version-string": "3.4.0-5", "port-version": 1 }, - "mongoose": { "version-string": "6.15", "port-version": 2 }, - "monkeys-audio": { "version-string": "5.59", "port-version": 0 }, - "moos-core": { "version-string": "10.4.0", "port-version": 4 }, - "moos-essential": { "version-string": "10.0.1", "port-version": 2 }, - "moos-ui": { "version-string": "10.0.1", "port-version": 2 }, - "morton-nd": { "version-string": "3.0.0", "port-version": 0 }, - "mosquitto": { "version-string": "1.6.8", "port-version": 3 }, - "mozjpeg": { "version-string": "2020-06-02", "port-version": 1 }, - "mp-units": { "version-string": "0.6.0", "port-version": 0 }, - "mp3lame": { "version-string": "3.100", "port-version": 4 }, - "mpark-variant": { "version-string": "1.4.0", "port-version": 0 }, - "mpfr": { "version-string": "4.0.2", "port-version": 2 }, - "mpg123": { "version-string": "1.26.3", "port-version": 0 }, - "mpi": { "version-string": "1", "port-version": 0 }, - "mpir": { "version-string": "3.0.0", "port-version": 10 }, - "mpmcqueue": { "version-string": "2019-07-26", "port-version": 0 }, - "mqtt-cpp": { "version-string": "7.0.1", "port-version": 2 }, - "ms-angle": { "version-string": "alias", "port-version": 0 }, - "ms-gsl": { "version-string": "3.1.0", "port-version": 0 }, - "msgpack": { "version-string": "3.3.0", "port-version": 0 }, - "msgpack11": { "version-string": "0.0.10", "port-version": 1 }, - "msinttypes": { "version-string": "2018-02-25", "port-version": 0 }, - "msix": { "version-string": "1.7", "port-version": 2 }, - "msmpi": { "version-string": "10.1", "port-version": 0 }, - "mstch": { "version-string": "1.0.2", "port-version": 2 }, - "mujs": { "version-string": "2018-07-30", "port-version": 1 }, - "munit": { "version-string": "2019-04-06", "port-version": 0 }, - "muparser": { "version-string": "2.3.2", "port-version": 0 }, - "murmurhash": { "version-string": "2016-01-09", "port-version": 3 }, - "mygui": { "version-string": "2020-06-17", "port-version": 0 }, - "nameof": { "version-string": "0.9.4", "port-version": 0 }, - "nana": { "version-string": "1.7.4", "port-version": 0 }, - "nano-signal-slot": { "version-string": "2.0.1", "port-version": 0 }, - "nanobench": { "version-string": "4.0.0", "port-version": 0 }, - "nanodbc": { "version-string": "2.13.0", "port-version": 0 }, - "nanoflann": { "version-string": "1.3.1", "port-version": 0 }, - "nanogui": { "version-string": "2019-09-23", "port-version": 1 }, - "nanomsg": { "version-string": "1.1.5", "port-version": 2 }, - "nanopb": { "version-string": "2019-02-12", "port-version": 2 }, - "nanoprintf": { "version-string": "2020-05-27", "port-version": 0 }, - "nanorange": { "version-string": "0.0.0", "port-version": 0 }, - "nanort": { "version-string": "2019-08-20", "port-version": 1 }, - "nanovg": { "version-string": "2019-8-30", "port-version": 3 }, - "nativefiledialog": { "version-string": "2019-08-28", "port-version": 0 }, - "neargye-semver": { "version-string": "0.2.2", "port-version": 0 }, - "netcdf-c": { "version-string": "4.7.4", "port-version": 1 }, - "netcdf-cxx4": { "version-string": "4.3.1", "port-version": 2 }, - "nethost": { "version-string": "2019-12-21", "port-version": 0 }, - "nettle": { "version-string": "3.5.1", "port-version": 4 }, - "networkdirect-sdk": { "version-string": "2.0.1", "port-version": 0 }, - "nghttp2": { "version-string": "1.39.2", "port-version": 2 }, - "ngspice": { "version-string": "32", "port-version": 1 }, - "nifticlib": { "version-string": "2020-04-30", "port-version": 0 }, - "nlohmann-fifo-map": { "version-string": "2018.05.07", "port-version": 1 }, - "nlohmann-json": { "version-string": "3.9.1", "port-version": 0 }, - "nlopt": { "version-string": "2.6.2", "port-version": 1 }, - "nmap": { "version-string": "7.70", "port-version": 4 }, - "nmslib": { "version-string": "2.0.6", "port-version": 0 }, - "nng": { "version-string": "1.3.2", "port-version": 0 }, - "nngpp": { "version-string": "1.3.0", "port-version": 0 }, - "nonius": { "version-string": "2019-04-20", "port-version": 1 }, - "nowide": { "version-string": "11.0.0", "port-version": 0 }, - "nrf-ble-driver": { "version-string": "4.1.2", "port-version": 0 }, - "nt-wrapper": { "version-string": "2019-08-10", "port-version": 0 }, - "nuklear": { "version-string": "2020-09-14", "port-version": 0 }, - "numactl": { "version-string": "2.0.12", "port-version": 0 }, - "numcpp": { "version-string": "2.1.0", "port-version": 0 }, - "nuspell": { "version-string": "4.0.1", "port-version": 0 }, - "nvtt": { "version-string": "2.1.2", "port-version": 1 }, - "oatpp": { "version-string": "1.2.0", "port-version": 1 }, - "oatpp-consul": { "version-string": "1.2.0", "port-version": 1 }, - "oatpp-curl": { "version-string": "1.2.0", "port-version": 2 }, - "oatpp-libressl": { "version-string": "1.2.0", "port-version": 1 }, - "oatpp-mbedtls": { "version-string": "1.2.0", "port-version": 1 }, - "oatpp-mongo": { "version-string": "1.2.0", "port-version": 1 }, - "oatpp-postgresql": { "version-string": "1.2.0", "port-version": 1 }, - "oatpp-sqlite": { "version-string": "1.2.0", "port-version": 1 }, - "oatpp-swagger": { "version-string": "1.2.0", "port-version": 1 }, - "oatpp-websocket": { "version-string": "1.2.0", "port-version": 1 }, - "oatpp-zlib": { "version-string": "1.2.0", "port-version": 1 }, - "observer-ptr-lite": { "version-string": "0.4.0", "port-version": 0 }, - "ocilib": { "version-string": "4.7.1", "port-version": 0 }, - "octomap": { "version-string": "1.9.5", "port-version": 0 }, - "ode": { "version-string": "0.16.1", "port-version": 0 }, - "offscale-libetcd-cpp": { "version-string": "2019-07-10", "port-version": 1 }, - "ogdf": { "version-string": "2019-08-23", "port-version": 1 }, - "ogre": { "version-string": "1.12.9", "port-version": 3 }, - "ogre-next": { "version-string": "2019-10-20", "port-version": 1 }, - "ois": { "version-string": "1.5", "port-version": 1 }, - "ompl": { "version-string": "1.5.0", "port-version": 1 }, - "oniguruma": { "version-string": "6.9.4", "port-version": 0 }, - "onnxruntime-gpu": { "version-string": "1.5.1", "port-version": 0 }, - "open62541": { "version-string": "1.1.2", "port-version": 0 }, - "openal-soft": { "version-string": "1.20.1", "port-version": 5 }, - "openblas": { "version-string": "0.3.10", "port-version": 0 }, - "opencascade": { "version-string": "7.4.0", "port-version": 1 }, - "opencc": { "version-string": "2020-04-26", "port-version": 7 }, - "opencensus-cpp": { "version-string": "0.4.0", "port-version": 1 }, - "opencl": { "version-string": "2.2", "port-version": 5 }, - "opencolorio": { "version-string": "1.1.1", "port-version": 4 }, - "opencolorio-tools": { "version-string": "1.1.1", "port-version": 0 }, - "opencsg": { "version-string": "1.4.2", "port-version": 1 }, - "opencv": { "version-string": "4.3.0", "port-version": 0 }, - "opencv2": { "version-string": "2.4.13.7", "port-version": 3 }, - "opencv3": { "version-string": "3.4.10", "port-version": 2 }, - "opencv4": { "version-string": "4.3.0", "port-version": 4 }, - "opendnp3": { "version-string": "3.1.0", "port-version": 0 }, - "openexr": { "version-string": "2.5.0", "port-version": 1 }, - "opengl": { "version-string": "0.0", "port-version": 7 }, - "opengl-registry": { "version-string": "2020-03-25", "port-version": 0 }, - "openigtlink": { "version-string": "3.0", "port-version": 0 }, - "openimageio": { "version-string": "2.1.16.0", "port-version": 4 }, - "openjpeg": { "version-string": "2.3.1", "port-version": 2 }, - "openmama": { "version-string": "6.3.1", "port-version": 0 }, - "openmesh": { "version-string": "8.1", "port-version": 0 }, - "openmpi": { "version-string": "4.0.3", "port-version": 3 }, - "openmvg": { "version-string": "1.6", "port-version": 0 }, - "openmvs": { "version-string": "1.1", "port-version": 4 }, - "openni2": { "version-string": "2.2.0.33", "port-version": 11 }, - "openscap": { "version-string": "1.3.1", "port-version": 0 }, - "openssl": { "version-string": "1.1.1h", "port-version": 2 }, - "openssl-unix": { "version-string": "1.1.1h", "port-version": 1 }, - "openssl-uwp": { "version-string": "1.1.1h", "port-version": 1 }, - "openssl-windows": { "version-string": "1.1.1h", "port-version": 1 }, - "opensubdiv": { "version-string": "3.4.3", "port-version": 0 }, - "opentracing": { "version-string": "1.6.0", "port-version": 0 }, - "openvdb": { "version-string": "7.1.0", "port-version": 0 }, - "openvpn3": { "version-string": "3.4.1", "port-version": 1 }, - "openvr": { "version-string": "1.12.5", "port-version": 0 }, - "openxr-loader": { "version-string": "1.0.11", "port-version": 1 }, - "optional-bare": { "version-string": "1.1.0", "port-version": 0 }, - "optional-lite": { "version-string": "3.2.0", "port-version": 0 }, - "opus": { "version-string": "1.3.1", "port-version": 5 }, - "opusfile": { "version-string": "0.12", "port-version": 0 }, - "orc": { "version-string": "1.6.4", "port-version": 1 }, - "orocos-kdl": { "version-string": "1.4", "port-version": 3 }, - "osg": { "version-string": "3.6.5", "port-version": 3 }, - "osg-qt": { "version-string": "Qt4", "port-version": 3 }, - "osgearth": { "version-string": "3.0", "port-version": 2 }, - "osi": { "version-string": "0.108.6", "port-version": 0 }, - "otl": { "version-string": "4.0.455", "port-version": 0 }, - "outcome": { "version-string": "2.1.3", "port-version": 0 }, - "p-ranav-csv": { "version-string": "2019-07-11", "port-version": 0 }, - "p-ranav-csv2": { "version-string": "2020-06-02", "port-version": 0 }, - "paho-mqtt": { "version-string": "1.3.5", "port-version": 0 }, - "paho-mqttpp3": { "version-string": "1.1", "port-version": 1 }, - "pango": { "version-string": "1.40.11", "port-version": 8 }, - "pangolin": { "version-string": "0.5", "port-version": 11 }, - "pangomm": { "version-string": "2.40.1", "port-version": 3 }, - "parallel-hashmap": { "version-string": "1.32", "port-version": 0 }, - "parallelstl": { "version-string": "20200330", "port-version": 0 }, - "paraview": { "version-string": "5.8.0", "port-version": 3 }, - "parmetis": { "version-string": "4.0.3", "port-version": 3 }, - "parquet": { "version-string": "0", "port-version": 0 }, - "parson": { "version-string": "2020-09-14", "port-version": 0 }, - "pbc": { "version-string": "0.5.14", "port-version": 4 }, - "pcg": { "version-string": "0.98.1", "port-version": 0 }, - "pcl": { "version-string": "1.11.1", "port-version": 0 }, - "pcre": { "version-string": "8.44", "port-version": 8 }, - "pcre2": { "version-string": "10.35", "port-version": 2 }, - "pdal": { "version-string": "1.7.1", "port-version": 10 }, - "pdal-c": { "version-string": "1.8", "port-version": 2 }, - "pdcurses": { "version-string": "3.9", "port-version": 0 }, - "pdqsort": { "version-string": "2019-07-30", "port-version": 0 }, - "pe-parse": { "version-string": "1.2.0", "port-version": 0 }, - "pegtl": { "version-string": "3.0.0-pre", "port-version": 70971 }, - "pegtl-2": { "version-string": "2.8.3", "port-version": 0 }, - "pfring": { "version-string": "2019-10-17", "port-version": 2 }, - "pfultz2-linq": { "version-string": "2019-05-14", "port-version": 0 }, - "phnt": { "version-string": "2019-05-01", "port-version": 0 }, - "physfs": { "version-string": "3.0.2", "port-version": 2 }, - "physx": { "version-string": "4.1.1", "port-version": 6 }, - "picojson": { "version-string": "1.3.0", "port-version": 1 }, - "picosha2": { "version-string": "2018-07-30", "port-version": 0 }, - "piex": { "version-string": "2019-07-11", "port-version": 0 }, - "pistache": { "version-string": "2019-08-05", "port-version": 0 }, - "pixel": { "version-string": "0.3", "port-version": 1 }, - "pixman": { "version-string": "0.38.4", "port-version": 2 }, - "platform-folders": { "version-string": "4.0.0", "port-version": 6 }, - "plf-colony": { "version-string": "5.33", "port-version": 0 }, - "plf-list": { "version-string": "2019-08-10", "port-version": 0 }, - "plf-nanotimer": { "version-string": "2019-08-10", "port-version": 0 }, - "plf-stack": { "version-string": "2019-08-10", "port-version": 0 }, - "plib": { "version-string": "1.8.5", "port-version": 4 }, - "plibsys": { "version-string": "0.0.4", "port-version": 4 }, - "plog": { "version-string": "1.1.5", "port-version": 0 }, - "plplot": { "version-string": "5.13.0", "port-version": 9 }, - "plustache": { "version-string": "0.4.0", "port-version": 1 }, - "pmdk": { "version-string": "1.9", "port-version": 0 }, - "pngpp": { "version-string": "0.2.10", "port-version": 0 }, - "pngwriter": { "version-string": "0.7.0", "port-version": 2 }, - "poco": { "version-string": "1.10.1", "port-version": 1 }, - "podofo": { "version-string": "0.9.6", "port-version": 12 }, - "poly2tri": { "version-string": "2020-07-21", "port-version": 0 }, - "polyclipping": { "version-string": "6.4.2", "port-version": 6 }, - "polyhook2": { "version-string": "2020-09-22", "port-version": 0 }, - "polymorphic-value": { "version-string": "1.3.0", "port-version": 1 }, - "ponder": { "version-string": "3.0.0", "port-version": 1 }, - "portable-snippets": { "version-string": "2019-09-20", "port-version": 0 }, - "portaudio": { "version-string": "2020-02-02", "port-version": 2 }, - "portmidi": { "version-string": "0.234", "port-version": 0 }, - "ppconsul": { "version-string": "0.5", "port-version": 1 }, - "ppmagic": { "version-string": "2020-07-03", "port-version": 0 }, - "pprint": { "version-string": "2019-07-19", "port-version": 0 }, - "pqp": { "version-string": "1.3", "port-version": 4 }, - "proj": { "version-string": "0", "port-version": 0 }, - "proj4": { "version-string": "6.3.1", "port-version": 2 }, - "prometheus-cpp": { "version-string": "0.10.0", "port-version": 0 }, - "protobuf": { "version-string": "3.13.0", "port-version": 2 }, - "protobuf-c": { "version-string": "1.3.2", "port-version": 2 }, - "protopuf": { "version-string": "1.0.0", "port-version": 0 }, - "protozero": { "version-string": "1.6.8", "port-version": 0 }, - "proxygen": { "version-string": "2020.10.19.00", "port-version": 0 }, - "proxywrapper": { "version-string": "1.0.0", "port-version": 0 }, - "ptex": { "version-string": "2.3.2", "port-version": 2 }, - "pthread": { "version-string": "3.0.0", "port-version": 0 }, - "pthreads": { "version-string": "3.0.0", "port-version": 6 }, - "pugixml": { "version-string": "1.10", "port-version": 2 }, - "pybind11": { "version-string": "2.6.0", "port-version": 0 }, - "pystring": { "version-string": "1.1.3", "port-version": 2 }, - "python2": { "version-string": "2.7.15", "port-version": 2 }, - "python3": { "version-string": "3.8.3", "port-version": 2 }, - "qca": { "version-string": "2.3.1", "port-version": 2 }, - "qcustomplot": { "version-string": "2.0.1", "port-version": 4 }, - "qhull": { "version-string": "8.0.2", "port-version": 0 }, - "qpid-proton": { "version-string": "0.32.0", "port-version": 0 }, - "qscintilla": { "version-string": "2.11.4", "port-version": 2 }, - "qt-advanced-docking-system": { "version-string": "3.6.3", "port-version": 0 }, - "qt5": { "version-string": "5.15.1", "port-version": 0 }, - "qt5-3d": { "version-string": "5.15.1", "port-version": 0 }, - "qt5-activeqt": { "version-string": "5.15.1", "port-version": 0 }, - "qt5-androidextras": { "version-string": "5.15.1", "port-version": 0 }, - "qt5-base": { "version-string": "5.15.1", "port-version": 1 }, - "qt5-canvas3d": { "version-string": "0", "port-version": 0 }, - "qt5-charts": { "version-string": "5.15.1", "port-version": 0 }, - "qt5-connectivity": { "version-string": "5.15.1", "port-version": 1 }, - "qt5-datavis3d": { "version-string": "5.15.1", "port-version": 0 }, - "qt5-declarative": { "version-string": "5.15.1", "port-version": 0 }, - "qt5-doc": { "version-string": "5.15.1", "port-version": 0 }, - "qt5-gamepad": { "version-string": "5.15.1", "port-version": 0 }, - "qt5-graphicaleffects": { "version-string": "5.15.1", "port-version": 0 }, - "qt5-imageformats": { "version-string": "5.15.1", "port-version": 1 }, - "qt5-location": { "version-string": "5.15.1", "port-version": 1 }, - "qt5-macextras": { "version-string": "5.15.1", "port-version": 0 }, - "qt5-modularscripts": { "version-string": "deprecated", "port-version": 0 }, - "qt5-mqtt": { "version-string": "5.15.1", "port-version": 0 }, - "qt5-multimedia": { "version-string": "5.15.1", "port-version": 0 }, - "qt5-networkauth": { "version-string": "5.15.1", "port-version": 0 }, - "qt5-purchasing": { "version-string": "5.15.1", "port-version": 0 }, - "qt5-quickcontrols": { "version-string": "5.15.1", "port-version": 0 }, - "qt5-quickcontrols2": { "version-string": "5.15.1", "port-version": 0 }, - "qt5-remoteobjects": { "version-string": "5.15.1", "port-version": 0 }, - "qt5-script": { "version-string": "5.15.1", "port-version": 0 }, - "qt5-scxml": { "version-string": "5.15.1", "port-version": 0 }, - "qt5-sensors": { "version-string": "5.15.1", "port-version": 0 }, - "qt5-serialbus": { "version-string": "5.15.1", "port-version": 0 }, - "qt5-serialport": { "version-string": "5.15.1", "port-version": 0 }, - "qt5-speech": { "version-string": "5.15.1", "port-version": 0 }, - "qt5-svg": { "version-string": "5.15.1", "port-version": 0 }, - "qt5-tools": { "version-string": "5.15.1", "port-version": 0 }, - "qt5-translations": { "version-string": "5.15.1", "port-version": 0 }, - "qt5-virtualkeyboard": { "version-string": "5.15.1", "port-version": 0 }, - "qt5-wayland": { "version-string": "5.15.1", "port-version": 0 }, - "qt5-webchannel": { "version-string": "5.15.1", "port-version": 0 }, - "qt5-webengine": { "version-string": "5.15.1", "port-version": 1 }, - "qt5-webglplugin": { "version-string": "5.15.1", "port-version": 0 }, - "qt5-websockets": { "version-string": "5.15.1", "port-version": 0 }, - "qt5-webview": { "version-string": "5.15.1", "port-version": 0 }, - "qt5-winextras": { "version-string": "5.15.1", "port-version": 0 }, - "qt5-x11extras": { "version-string": "5.15.1", "port-version": 0 }, - "qt5-xmlpatterns": { "version-string": "5.15.1", "port-version": 0 }, - "qtkeychain": { "version-string": "0.11.1", "port-version": 0 }, - "quadtree": { "version-string": "2020-04-13", "port-version": 0 }, - "quantlib": { "version-string": "2019-09-02", "port-version": 0 }, - "quaternions": { "version-string": "1.0.0", "port-version": 0 }, - "quazip": { "version-string": "0.9.1", "port-version": 0 }, - "quickfast": { "version-string": "1.5", "port-version": 0 }, - "quickfix": { "version-string": "1.15.1", "port-version": 4 }, - "quill": { "version-string": "1.5.2", "port-version": 0 }, - "quirc": { "version-string": "1.1", "port-version": 0 }, - "qwt": { "version-string": "6.1.5", "port-version": 0 }, - "qwtw": { "version-string": "3.1.0", "port-version": 0 }, - "rabit": { "version-string": "0.1", "port-version": 2 }, - "ragel": { "version-string": "6.10", "port-version": 3 }, - "rang": { "version-string": "3.1.0", "port-version": 0 }, - "range-v3": { "version-string": "0.11.0", "port-version": 0 }, - "range-v3-vs2015": { "version-string": "20151130-vcpkg5", "port-version": 0 }, - "rapidcheck": { "version-string": "2020-08-25", "port-version": 0 }, - "rapidjson": { "version-string": "2020-09-14", "port-version": 0 }, - "rapidxml": { "version-string": "1.13", "port-version": 4 }, - "rapidxml-ns": { "version-string": "1.13.2", "port-version": 0 }, - "rappture": { "version-string": "1.9", "port-version": 0 }, - "raylib": { "version-string": "3.0.0", "port-version": 3 }, - "rbdl": { "version-string": "2.6.0", "port-version": 0 }, - "re2": { "version-string": "2020-10-01", "port-version": 0 }, - "readerwriterqueue": { "version-string": "1.0.3", "port-version": 0 }, - "readline": { "version-string": "0", "port-version": 0 }, - "readline-win32": { "version-string": "5.0", "port-version": 2 }, - "readosm": { "version-string": "1.1.0", "port-version": 3 }, - "realsense2": { "version-string": "2.39.0", "port-version": 0 }, - "recast": { "version-string": "1.5.1", "port-version": 3 }, - "redis-plus-plus": { "version-string": "1.2.1", "port-version": 0 }, - "refl-cpp": { "version-string": "0.12.0", "port-version": 0 }, - "refprop-headers": { "version-string": "2019-04-14", "port-version": 0 }, - "replxx": { "version-string": "0.0.2", "port-version": 2 }, - "reproc": { "version-string": "14.1.0", "port-version": 0 }, - "rest-rpc": { "version-string": "0.07", "port-version": 1 }, - "restbed": { "version-string": "4.7", "port-version": 0 }, - "restclient-cpp": { "version-string": "0.5.2", "port-version": 0 }, - "restinio": { "version-string": "0.6.12", "port-version": 0 }, - "rhash": { "version-string": "1.4.0", "port-version": 0 }, - "riffcpp": { "version-string": "2.2.4", "port-version": 0 }, - "ring-span-lite": { "version-string": "0.3.0", "port-version": 0 }, - "roaring": { "version-string": "2019-03-05", "port-version": 2 }, - "robin-hood-hashing": { "version-string": "3.9.0", "port-version": 0 }, - "robin-map": { "version-string": "0.6.3", "port-version": 0 }, - "rocksdb": { "version-string": "6.13.3", "port-version": 0 }, - "rpclib": { "version-string": "2.2.1", "port-version": 2 }, - "rply": { "version-string": "1.1.4", "port-version": 0 }, - "rs-core-lib": { "version-string": "2020-09-14", "port-version": 0 }, - "rsocket": { "version-string": "2020.05.04.00", "port-version": 1 }, - "rtabmap": { "version-string": "0.20.3", "port-version": 1 }, - "rtlsdr": { "version-string": "2020-04-16", "port-version": 1 }, - "rtmidi": { "version-string": "4.0.0", "port-version": 2 }, - "rttr": { "version-string": "0.9.6", "port-version": 2 }, - "rxcpp": { "version-string": "4.1.0", "port-version": 1 }, - "rxqt": { "version-string": "bb2138c", "port-version": 0 }, - "rxspencer": { "version-string": "2020-01-12", "port-version": 0 }, - "ryml": { "version-string": "2020-04-12", "port-version": 0 }, - "ryu": { "version-string": "2.0", "port-version": 2 }, - "safeint": { "version-string": "3.24", "port-version": 0 }, - "sais": { "version-string": "2.4.1", "port-version": 1 }, - "sajson": { "version-string": "2018-09-21", "port-version": 0 }, - "scintilla": { "version-string": "4.4.5", "port-version": 0 }, - "sciter": { "version-string": "4.4.3.20", "port-version": 0 }, - "scnlib": { "version-string": "0.3", "port-version": 0 }, - "scylla-wrapper": { "version-string": "2018-08-26", "port-version": 16 }, - "sdformat10": { "version-string": "10.0.0", "port-version": 0 }, - "sdformat6": { "version-string": "6.2.0", "port-version": 1 }, - "sdformat9": { "version-string": "9.2.0", "port-version": 1 }, - "sdl1": { "version-string": "1.2.15", "port-version": 12 }, - "sdl1-net": { "version-string": "1.2.8", "port-version": 3 }, - "sdl2": { "version-string": "2.0.12", "port-version": 7 }, - "sdl2-gfx": { "version-string": "1.0.4", "port-version": 7 }, - "sdl2-image": { "version-string": "2.0.5", "port-version": 0 }, - "sdl2-mixer": { "version-string": "2.0.4", "port-version": 10 }, - "sdl2-net": { "version-string": "2.0.1", "port-version": 8 }, - "sdl2-ttf": { "version-string": "2.0.15", "port-version": 3 }, - "sdl2pp": { "version-string": "0.16.1", "port-version": 0 }, - "seal": { "version-string": "3.5.9", "port-version": 0 }, - "secp256k1": { "version-string": "2017-19-10", "port-version": 3 }, - "selene": { "version-string": "0.3.1", "port-version": 3 }, - "sentencepiece": { "version-string": "v0.1.82", "port-version": 0 }, - "sentry-native": { "version-string": "0.4.4", "port-version": 0 }, - "septag-sx": { "version-string": "2019-05-07", "port-version": 2 }, - "seqan": { "version-string": "2.4.0", "port-version": 1 }, - "serd": { "version-string": "0.30.4", "port-version": 0 }, - "sf2cute": { "version-string": "0.2.0", "port-version": 1 }, - "sfgui": { "version-string": "0.4.0", "port-version": 3 }, - "sfml": { "version-string": "2.5.1", "port-version": 9 }, - "sfsexp": { "version-string": "1.3", "port-version": 0 }, - "shaderc": { "version-string": "2019-06-26", "port-version": 1 }, - "shaderwriter": { "version-string": "2020-10-15", "port-version": 0 }, - "shapelib": { "version-string": "1.5.0", "port-version": 0 }, - "shiva": { "version-string": "1.0", "port-version": 3 }, - "shiva-sfml": { "version-string": "1.0", "port-version": 1 }, - "shogun": { "version-string": "6.1.4", "port-version": 3 }, - "signalrclient": { "version-string": "1.0.0-beta1", "port-version": 9 }, - "sigslot": { "version-string": "1.0.0", "port-version": 3 }, - "simage": { "version-string": "1.8.0", "port-version": 0 }, - "simde": { "version-string": "2019-06-05", "port-version": 0 }, - "simdjson": { "version-string": "0.5.0", "port-version": 0 }, - "simple-fft": { "version-string": "2020-06-14", "port-version": 0 }, - "simpleini": { "version-string": "2018-08-31", "port-version": 4 }, - "skia": { "version-string": "2020-05-18", "port-version": 4 }, - "skyr-url": { "version-string": "1.13.0", "port-version": 0 }, - "slikenet": { "version-string": "2019-10-22", "port-version": 2 }, - "sltbench": { "version-string": "2.4.0", "port-version": 0 }, - "smpeg2": { "version-string": "2.0.0", "port-version": 6 }, - "snappy": { "version-string": "1.1.8", "port-version": 0 }, - "sndfile": { "version-string": "0", "port-version": 0 }, - "snowhouse": { "version-string": "5.0.0", "port-version": 0 }, - "so5extra": { "version-string": "1.4.1", "port-version": 0 }, - "sobjectizer": { "version-string": "5.7.1", "port-version": 0 }, - "soci": { "version-string": "4.0.0", "port-version": 1 }, - "socket-io-client": { "version-string": "1.6.1", "port-version": 1 }, - "sockpp": { "version-string": "0.7", "port-version": 0 }, - "soem": { "version-string": "1.4.0", "port-version": 0 }, - "soil": { "version-string": "2008.07.07", "port-version": 2 }, - "soil2": { "version-string": "release-1.11", "port-version": 1 }, - "sokol": { "version-string": "2019-09-09", "port-version": 0 }, - "sol2": { "version-string": "3.2.2", "port-version": 0 }, - "solid3": { "version-string": "3.5.8", "port-version": 0 }, - "sophus": { "version-string": "1.0.0", "port-version": 6 }, - "soqt": { "version-string": "1.6.0", "port-version": 1 }, - "sord": { "version-string": "0.16.4", "port-version": 0 }, - "soundtouch": { "version-string": "2.0.0", "port-version": 6 }, - "soxr": { "version-string": "0.1.3", "port-version": 3 }, - "spaceland": { "version-string": "7.8.2", "port-version": 4 }, - "span-lite": { "version-string": "0.8.1", "port-version": 0 }, - "sparsehash": { "version-string": "2.0.3", "port-version": 0 }, - "sparsepp": { "version-string": "1.22", "port-version": 1 }, - "spatialite-tools": { "version-string": "4.3.0", "port-version": 5 }, - "spdk": { "version-string": "19.01.1", "port-version": 1 }, - "spdk-dpdk": { "version-string": "20181124", "port-version": 0 }, - "spdk-ipsec": { "version-string": "20180711", "port-version": 0 }, - "spdk-isal": { "version-string": "20181006", "port-version": 0 }, - "spdlog": { "version-string": "1.8.0", "port-version": 1 }, - "spectra": { "version-string": "0.9.0", "port-version": 0 }, - "speex": { "version-string": "1.2.0", "port-version": 7 }, - "speexdsp": { "version-string": "1.2.0", "port-version": 2 }, - "spirit-po": { "version-string": "1.1.2", "port-version": 1 }, - "spirv-cross": { "version-string": "2020-02-26", "port-version": 0 }, - "spirv-headers": { "version-string": "1.5.1", "port-version": 0 }, - "spirv-tools": { "version-string": "2020.1", "port-version": 1 }, - "sprout": { "version-string": "2019-06-20", "port-version": 0 }, - "spscqueue": { "version-string": "1.0", "port-version": 0 }, - "sqlcipher": { "version-string": "4.4.0", "port-version": 1 }, - "sqlite-modern-cpp": { "version-string": "3.2", "port-version": 936 }, - "sqlite-orm": { "version-string": "1.5", "port-version": 2 }, - "sqlite3": { "version-string": "3.33.0", "port-version": 0 }, - "sqlitecpp": { "version-string": "3.1.1", "port-version": 1 }, - "sqlpp11": { "version-string": "0.60", "port-version": 0 }, - "sqlpp11-connector-mysql": { "version-string": "0.29", "port-version": 1 }, - "sqlpp11-connector-sqlite3": { "version-string": "0.30", "port-version": 0 }, - "sratom": { "version-string": "0.6.4", "port-version": 0 }, - "status-value-lite": { "version-string": "1.1.0", "port-version": 0 }, - "stb": { "version-string": "2020-09-14", "port-version": 0 }, - "stlab": { "version-string": "1.5.2", "port-version": 1 }, - "stormlib": { "version-string": "2019-05-10", "port-version": 2 }, - "strict-variant": { "version-string": "0.5", "port-version": 0 }, - "string-theory": { "version-string": "3.4", "port-version": 0 }, - "string-view-lite": { "version-string": "1.3.0", "port-version": 0 }, - "strtk": { "version-string": "2020-09-14", "port-version": 0 }, - "stx": { "version-string": "1.0.1", "port-version": 0 }, - "stxxl": { "version-string": "2018-11-15", "port-version": 2 }, - "suitesparse": { "version-string": "5.8.0", "port-version": 0 }, - "sundials": { "version-string": "3.1.1", "port-version": 2 }, - "superlu": { "version-string": "2020-01-07", "port-version": 2 }, - "symengine": { "version-string": "2020-05-25", "port-version": 0 }, - "systemc": { "version-string": "2.3.3", "port-version": 4 }, - "szip": { "version-string": "2.1.1", "port-version": 6 }, - "tabulate": { "version-string": "2019-01-06", "port-version": 0 }, - "tacopie": { "version-string": "3.2.0", "port-version": 2 }, - "taglib": { "version-string": "1.11.1", "port-version": 20190531 }, - "taocpp-json": { "version-string": "2020-09-14", "port-version": 0 }, - "tap-windows6": { "version-string": "9.21.2", "port-version": 0 }, - "taskflow": { "version-string": "2.6.0", "port-version": 0 }, - "tbb": { "version-string": "2020_U3", "port-version": 2 }, - "tcl": { "version-string": "core-9-0-a1", "port-version": 1 }, - "tclap": { "version-string": "1.2.2", "port-version": 3 }, - "teemo": { "version-string": "2.1", "port-version": 0 }, - "telnetpp": { "version-string": "2.0", "port-version": 4 }, - "tensorflow-cc": { "version-string": "2.3.1", "port-version": 0 }, - "tesseract": { "version-string": "4.1.1", "port-version": 2 }, - "tfhe": { "version-string": "1.0.1", "port-version": 1 }, - "tgbot-cpp": { "version-string": "1.2.1", "port-version": 0 }, - "tgc": { "version-string": "2019-08-11", "port-version": 1 }, - "tgui": { "version-string": "0.8.8", "port-version": 0 }, - "theia": { "version-string": "0.8", "port-version": 3 }, - "think-cell-range": { "version-string": "498839d", "port-version": 1 }, - "thor": { "version-string": "2.0", "port-version": 3 }, - "threadpool": { "version-string": "0.2.5", "port-version": 1 }, - "thrift": { "version-string": "0.13.0", "port-version": 0 }, - "tidy-html5": { "version-string": "5.7.28", "port-version": 2 }, - "tiff": { "version-string": "4.1.0", "port-version": 0 }, - "tinkerforge": { "version-string": "2.1.25", "port-version": 0 }, - "tiny-aes-c": { "version-string": "2019-07-31", "port-version": 0 }, - "tiny-bignum-c": { "version-string": "2019-07-31", "port-version": 0 }, - "tiny-dnn": { "version-string": "2018-10-25", "port-version": 0 }, - "tiny-process-library": { "version-string": "2018-12-06", "port-version": 0 }, - "tiny-regex-c": { "version-string": "2019-07-31", "port-version": 0 }, - "tinycthread": { "version-string": "2019-08-06", "port-version": 0 }, - "tinydir": { "version-string": "1.2.4", "port-version": 0 }, - "tinyexif": { "version-string": "1.0.2", "port-version": 6 }, - "tinyexpr": { "version-string": "2020-09-25", "port-version": 0 }, - "tinyexr": { "version-string": "2020-03-15", "port-version": 0 }, - "tinyfiledialogs": { "version-string": "3.6.3", "port-version": 0 }, - "tinygltf": { "version-string": "2020-07-28", "port-version": 0 }, - "tinynpy": { "version-string": "1.0.0", "port-version": 3 }, - "tinyobjloader": { "version-string": "2.0.0-rc2", "port-version": 0 }, - "tinyply": { "version-string": "2020-05-22", "port-version": 0 }, - "tinyspline": { "version-string": "0.2.0", "port-version": 3 }, - "tinythread": { "version-string": "1.1", "port-version": 3 }, - "tinytoml": { "version-string": "20180219", "port-version": 1 }, - "tinyutf8": { "version-string": "4.0.2", "port-version": 0 }, - "tinyxml": { "version-string": "2.6.2", "port-version": 7 }, - "tinyxml2": { "version-string": "8.0.0", "port-version": 1 }, - "tl-expected": { "version-string": "1.0.0", "port-version": 1 }, - "tl-function-ref": { "version-string": "1.0.0", "port-version": 1 }, - "tl-optional": { "version-string": "1.0.0", "port-version": 1 }, - "tlx": { "version-string": "0.5.20191212", "port-version": 0 }, - "tmx": { "version-string": "1.0.0", "port-version": 2 }, - "tmxlite": { "version-string": "2019-03-05", "port-version": 0 }, - "tmxparser": { "version-string": "2.1.0", "port-version": 4 }, - "toml11": { "version-string": "3.5.0", "port-version": 0 }, - "tomlplusplus": { "version-string": "2.2.0", "port-version": 0 }, - "tool-meson": { "version-string": "0.56.0", "port-version": 0 }, - "torch-th": { "version-string": "2019-04-19", "port-version": 2 }, - "trantor": { "version-string": "1.1.0", "port-version": 0 }, - "tre": { "version-string": "0.8.0", "port-version": 1 }, - "treehopper": { "version-string": "1.11.3", "port-version": 4 }, - "triangle": { "version-string": "1.6", "port-version": 0 }, - "trompeloeil": { "version-string": "38", "port-version": 0 }, - "tsl-hopscotch-map": { "version-string": "2.3.0", "port-version": 0 }, - "tsl-ordered-map": { "version-string": "1.0.0", "port-version": 0 }, - "tsl-sparse-map": { "version-string": "0.6.2", "port-version": 0 }, - "turbobase64": { "version-string": "2020-01-12", "port-version": 0 }, - "tweeny": { "version-string": "3.0", "port-version": 0 }, - "type-lite": { "version-string": "0.1.0", "port-version": 0 }, - "uchardet": { "version-string": "2020-04-26", "port-version": 0 }, - "umock-c": { "version-string": "2020-06-17", "port-version": 1 }, - "unicorn": { "version-string": "2020-09-14", "port-version": 0 }, - "unicorn-lib": { "version-string": "2020-03-02", "port-version": 0 }, - "units": { "version-string": "2.3.1", "port-version": 0 }, - "unittest-cpp": { "version-string": "2.0.0", "port-version": 1 }, - "unixodbc": { "version-string": "2.3.7", "port-version": 2 }, - "unqlite": { "version-string": "1.1.9", "port-version": 0 }, - "unrar": { "version-string": "5.8.1", "port-version": 0 }, - "upb": { "version-string": "2020-08-19", "port-version": 0 }, - "urdfdom": { "version-string": "1.0.4", "port-version": 3 }, - "urdfdom-headers": { "version-string": "1.0.5", "port-version": 1 }, - "uriparser": { "version-string": "0.9.4", "port-version": 0 }, - "usbmuxd": { "version-string": "1.2.235", "port-version": 0 }, - "usd": { "version-string": "20.08", "port-version": 0 }, - "usockets": { "version-string": "0.6.0", "port-version": 0 }, - "usrsctp": { "version-string": "0db9691", "port-version": 0 }, - "utf8h": { "version-string": "2020-06-14", "port-version": 0 }, - "utf8proc": { "version-string": "2.5.0", "port-version": 0 }, - "utfcpp": { "version-string": "3.1.2", "port-version": 1 }, - "utfz": { "version-string": "1.2", "port-version": 1 }, - "uthenticode": { "version-string": "1.0.4", "port-version": 0 }, - "uvatlas": { "version-string": "aug2020", "port-version": 0 }, - "uvw": { "version-string": "2.7.0", "port-version": 0 }, - "uwebsockets": { "version-string": "18.13.0", "port-version": 0 }, - "v-hacd": { "version-string": "3.2.0", "port-version": 1 }, - "v8": { "version-string": "8.6.395.17", "port-version": 0 }, - "valijson": { "version-string": "2018-11-17", "port-version": 1 }, - "value-ptr-lite": { "version-string": "0.2.1", "port-version": 0 }, - "variant-lite": { "version-string": "1.2.2", "port-version": 0 }, - "vc": { "version-string": "1.4.1", "port-version": 0 }, - "vcglib": { "version-string": "1.0.1", "port-version": 0 }, - "vcpkg-gfortran": { "version-string": "3", "port-version": 0 }, - "vectorclass": { "version-string": "2.00.01", "port-version": 0 }, - "visit-struct": { "version-string": "1.0", "port-version": 1 }, - "vlfeat": { "version-string": "2020-07-10", "port-version": 0 }, - "vlpp": { "version-string": "0.11.0.0", "port-version": 0 }, - "volk": { "version-string": "2019-09-26", "port-version": 0 }, - "vs-yasm": { "version-string": "0.5.0", "port-version": 1 }, - "vtk": { "version-string": "9.0.1", "port-version": 2 }, - "vtk-dicom": { "version-string": "0.8.12", "port-version": 1 }, - "vtk-m": { "version-string": "1.5.0", "port-version": 0 }, - "vulkan": { "version-string": "1.1.82.1", "port-version": 1 }, - "vulkan-headers": { "version-string": "1.2.157", "port-version": 0 }, - "vulkan-hpp": { "version-string": "2019-05-11", "port-version": 1 }, - "vulkan-memory-allocator": { "version-string": "2.3.0", "port-version": 0 }, - "vxl": { "version-string": "2.0.2", "port-version": 2 }, - "wampcc": { "version-string": "2019-09-04", "port-version": 0 }, - "wangle": { "version-string": "2020.10.19.00", "port-version": 0 }, - "wavelib": { "version-string": "2020-05-29", "port-version": 0 }, - "wavpack": { "version-string": "5.3.0", "port-version": 0 }, - "websocketpp": { "version-string": "0.8.2", "port-version": 0 }, - "wepoll": { "version-string": "1.5.8", "port-version": 0 }, - "wg21-sg14": { "version-string": "2019-08-13", "port-version": 0 }, - "wil": { "version-string": "2020-05-19", "port-version": 0 }, - "wildmidi": { "version-string": "0.4.3", "port-version": 1 }, - "wincrypt": { "version-string": "0.0", "port-version": 2 }, - "winpcap": { "version-string": "4.1.3", "port-version": 4 }, - "winreg": { "version-string": "3.1.0", "port-version": 0 }, - "winsock2": { "version-string": "0.0", "port-version": 2 }, - "wintoast": { "version-string": "1.2.0", "port-version": 0 }, - "woff2": { "version-string": "1.0.2", "port-version": 0 }, - "wordnet": { "version-string": "3.0", "port-version": 0 }, - "wpilib": { "version-string": "2020.3.2", "port-version": 0 }, - "wren": { "version-string": "2019-07-01", "port-version": 0 }, - "wt": { "version-string": "4.4.0", "port-version": 0 }, - "wtl": { "version-string": "10.0.10077", "port-version": 0 }, - "wxchartdir": { "version-string": "1.0.0", "port-version": 0 }, - "wxwidgets": { "version-string": "3.1.4", "port-version": 3 }, - "x-plane": { "version-string": "3.0.1", "port-version": 1 }, - "x264": { "version-string": "157-303c484ec828ed0", "port-version": 13 }, - "x265": { "version-string": "3.4", "port-version": 0 }, - "xalan-c": { "version-string": "1.11", "port-version": 12 }, - "xbyak": { "version-string": "5.97", "port-version": 0 }, - "xerces-c": { "version-string": "3.2.3", "port-version": 1 }, - "xeus": { "version-string": "0.24.3", "port-version": 0 }, - "xframe": { "version-string": "0.3.0", "port-version": 0 }, - "xlnt": { "version-string": "1.5.0", "port-version": 0 }, - "xmlsec": { "version-string": "1.2.30", "port-version": 1 }, - "xmsh": { "version-string": "0.5.2", "port-version": 1 }, - "xorstr": { "version-string": "2020-02-11", "port-version": 0 }, - "xproperty": { "version-string": "0.8.1", "port-version": 0 }, - "xsimd": { "version-string": "7.4.9", "port-version": 0 }, - "xtensor": { "version-string": "0.21.9", "port-version": 0 }, - "xtensor-blas": { "version-string": "0.17.2", "port-version": 0 }, - "xtensor-fftw": { "version-string": "2019-11-30", "port-version": 0 }, - "xtensor-io": { "version-string": "0.9.0", "port-version": 1 }, - "xtl": { "version-string": "0.6.21", "port-version": 0 }, - "xxhash": { "version-string": "0.8.0", "port-version": 1 }, - "yajl": { "version-string": "2.1.0", "port-version": 1 }, - "yaml-cpp": { "version-string": "0.6.3", "port-version": 0 }, - "yara": { "version-string": "4.0.2", "port-version": 0 }, - "yas": { "version-string": "7.0.5", "port-version": 0 }, - "yasm": { "version-string": "1.3.0", "port-version": 0 }, - "yasm-tool": { "version-string": "2020-10-12", "port-version": 0 }, - "yasm-tool-helper": { "version-string": "2020-10-12", "port-version": 0 }, - "yato": { "version-string": "1.0", "port-version": 2 }, - "yoga": { "version-string": "1.18.0", "port-version": 1 }, - "z3": { "version-string": "4.8.9", "port-version": 0 }, - "z85": { "version-string": "1.0", "port-version": 0 }, - "zeromq": { "version-string": "2019-09-20", "port-version": 1 }, - "zfp": { "version-string": "0.5.5", "port-version": 2 }, - "zkpp": { "version-string": "0.2.3", "port-version": 0 }, - "zlib": { "version-string": "1.2.11", "port-version": 9 }, - "zookeeper": { "version-string": "3.5.5", "port-version": 1 }, - "zopfli": { "version-string": "1.0.3", "port-version": 0 }, - "zserge-webview": { "version-string": "2019-04-27", "port-version": 2 }, - "zstd": { "version-string": "1.4.5", "port-version": 1 }, - "zstr": { "version-string": "1.0.4", "port-version": 0 }, - "zxing-cpp": { "version-string": "3.3.3", "port-version": 8 }, - "zydis": { "version-string": "3.1.0", "port-version": 1 }, - "zyre": { "version-string": "2019-07-07", "port-version": 1 }, - "zziplib": { "version-string": "0.13.71", "port-version": 0 } - } -} \ No newline at end of file diff --git a/port_versions/c-/cpprestsdk.json b/port_versions/c-/cpprestsdk.json deleted file mode 100644 index 94d3bee03307b0..00000000000000 --- a/port_versions/c-/cpprestsdk.json +++ /dev/null @@ -1 +0,0 @@ -{"versions": [{"git-tree": "1fb06431492f382bb54834c567db83bcb6cabe0b", "version-string": "2.10.16", "port-version": 3}, {"git-tree": "17cb3f7a61a5091087d53dbce2a8c2d328342ee8", "version-string": "2.10.16", "port-version": 2}, {"git-tree": "9e6aa1f352765cab12b207b4c195221bdf43c28b", "version-string": "2.10.16", "port-version": 1}, {"git-tree": "140c63764a9d13e325b065e30fb119d3f3d010a3", "version-string": "2.10.16", "port-version": 0}, {"git-tree": "e47b918125027860a9fff53282af5b5429019c7b", "version-string": "2.10.15", "port-version": 1}, {"git-tree": "2de6826ede1e8e28e1fa1f92afa1aaf0982fcede", "version-string": "2.10.15", "port-version": 0}, {"git-tree": "62ba6e5405bdf0806d8e8408a547e5872b8cba5d", "version-string": "2.10.14", "port-version": 1}, {"git-tree": "9f2e01f4c876c5915b7a685fd431a9ad98fb780f", "version-string": "2.10.14", "port-version": 0}, {"git-tree": "338cfcef457aaff1a329f7feeab92e21b9c96e5a", "version-string": "2.10.13", "port-version": 1}, {"git-tree": "e35cbfd7d6956d26a77f5cd607b129065856bb82", "version-string": "2.10.13", "port-version": 0}, {"git-tree": "64aa62b7a6fbbcdbb81588d23665a8c9f1e933aa", "version-string": "2.10.12", "port-version": 0}, {"git-tree": "4f987cafc2d3ab844221d48a077a766d9a3ee29e", "version-string": "2.10.11", "port-version": 0}, {"git-tree": "191b71a47f0e6220785677363f5d5cea098b5955", "version-string": "2.10.10", "port-version": 0}, {"git-tree": "2b2d0ceec9678fc5e7db0e7556745d8972395b0e", "version-string": "2.10.7", "port-version": 0}, {"git-tree": "d069e89c749dedcbafcef8f7e81e8b45d0658df2", "version-string": "2.10.6", "port-version": 3}, {"git-tree": "172a3a97fcd45e292496211fe91e574176bc66cf", "version-string": "2.10.6", "port-version": 2}, {"git-tree": "124a27eb315f4dc7c6239ab7922472e44e9154ec", "version-string": "2.10.6", "port-version": 1}, {"git-tree": "4598e0984e115a80d224b3fdf1c93f6af248daff", "version-string": "2.10.6", "port-version": 0}, {"git-tree": "3657c1899d91376fab9f85237f0869eaf7956673", "version-string": "2.10.5", "port-version": 0}, {"git-tree": "564f603510f30b61eae4daa39988950ed7d28bbf", "version-string": "2.10.4", "port-version": 0}, {"git-tree": "01dc05ee45ec6244d05ff645f494d6e9c9a8d109", "version-string": "2.10.3", "port-version": 1}, {"git-tree": "46e51015a1c082a2d5c05832ad39924f0470f526", "version-string": "2.10.2", "port-version": 1}, {"git-tree": "8431a5fe877e18bb6429a94ae05bf472d116e032", "version-string": "2.10.2", "port-version": 0}, {"git-tree": "78735f0f239560b88ec3ff1edd961a07f8d50e4e", "version-string": "2.10.1", "port-version": 1}, {"git-tree": "28426fb1d9d848d07082a0d3e3c7e0496a4c065a", "version-string": "2.10.1", "port-version": 0}, {"git-tree": "589c3b533d10da50f6f69cae7dde72fa78827c4e", "version-string": "2.10.0", "port-version": 0}, {"git-tree": "fa4bd515204c443f85bae314d0913ddc02332756", "version-string": "2.9.0", "port-version": 4}, {"git-tree": "0d9a0686badbc54f5ab73213aec95db2dbae88c3", "version-string": "2.9.0", "port-version": 3}, {"git-tree": "6696c08718d02424257e824f37b07bff3f54eff4", "version-string": "2.9.0", "port-version": 2}, {"git-tree": "c3fe95100142c708c7ba0386d2bb6e4671c3f4ed", "version-string": "2.9.0", "port-version": 1}, {"git-tree": "662d0903cce0892f8322bf3a273f865572ed6f31", "version-string": "2.9.0", "port-version": 0}, {"git-tree": "284d94938a84aa0380cf2f2f97c81281a2f0598a", "version-string": "2.8", "port-version": 0}]} \ No newline at end of file diff --git a/port_versions/o-/openssl-unix.json b/port_versions/o-/openssl-unix.json deleted file mode 100644 index 4c4931862f20cd..00000000000000 --- a/port_versions/o-/openssl-unix.json +++ /dev/null @@ -1 +0,0 @@ -{"versions": [{"git-tree": "dda72388849087e4edb2be900f5448376a6f5215", "version-string": "1.1.1h", "port-version": 1}, {"git-tree": "a5b077133a17a5f5462f7207d4877ca6bf841958", "version-string": "1.1.1h", "port-version": 0}, {"git-tree": "1cc8e80ce46c8cede6d950dce347212c6312189c", "version-string": "1.1.1g", "port-version": 4}, {"git-tree": "e748f5c8aed72f12c497a9221da925a7d6a7cd57", "version-string": "1.1.1g", "port-version": 3}, {"git-tree": "6d04f385c7123a4b2984f7787a28a5b72295b811", "version-string": "1.1.1g", "port-version": 2}, {"git-tree": "c54172f82c408954edffbd786e96b0b36ff9ccad", "version-string": "1.1.1g", "port-version": 1}, {"git-tree": "79e66433bc9077347892e042225a9205d64d283e", "version-string": "1.1.1g", "port-version": 0}, {"git-tree": "cd64682e77b61d0ce90a3e7d56f8df8f787b9548", "version-string": "1.1.1d", "port-version": 4}, {"git-tree": "1487efaaf621741639191e356e947a4118739035", "version-string": "1.1.1d", "port-version": 3}, {"git-tree": "b287227ab19c508b3257da5e6b7072278121b335", "version-string": "1.1.1d", "port-version": 2}, {"git-tree": "9d3d306d309bc95abfb88bbfa5fd46e473f016d2", "version-string": "1.1.1d", "port-version": 1}, {"git-tree": "d76be8657a6e5128eb8769d468524aea99635832", "version-string": "1.0.2s", "port-version": 1}, {"git-tree": "34b9a3c2530b7a4e7cbdae74181098427c076a26", "version-string": "1.0.2s", "port-version": 0}, {"git-tree": "68f20b0128ed20998e8f641abca309eb27ab881c", "version-string": "1.0.2q", "port-version": 0}, {"git-tree": "532c0cc2adbcf0800c9dad5df9c900a28672cdf6", "version-string": "1.0.2s", "port-version": 0}, {"git-tree": "d4a71f9592772e1e82ea73a04a1b06790297fade", "version-string": "1.0.2q", "port-version": 1}, {"git-tree": "add5af6cc06c5bb82af3f88f7665e34622cf65a5", "version-string": "1.0.2q", "port-version": 0}, {"git-tree": "7ae3ef68f38c470d094bde9c5f934e99dd764ee4", "version-string": "1.0.2p", "port-version": 1}, {"git-tree": "3ac5f3a46d740a87e1fa9b3245b4e6ed14a9b096", "version-string": "1.0.2p", "port-version": 0}, {"git-tree": "8a6c268d6cf86abad746a527d1c982d77e6957a2", "version-string": "1.0.2o", "port-version": 1}, {"git-tree": "78634dddc1ad87f08f58fcf5b0b83ba575e924eb", "version-string": "1.0.2o", "port-version": 0}]} \ No newline at end of file diff --git a/port_versions/o-/openssl-uwp.json b/port_versions/o-/openssl-uwp.json deleted file mode 100644 index cf521a110ea402..00000000000000 --- a/port_versions/o-/openssl-uwp.json +++ /dev/null @@ -1 +0,0 @@ -{"versions": [{"git-tree": "84398c4b851a28c5ca622c249d51c17d023518b7", "version-string": "1.1.1h", "port-version": 1}, {"git-tree": "f84d47f34d9789ef793f45431c06ed4085f43e34", "version-string": "1.1.1h", "port-version": 0}, {"git-tree": "e3a2926149036f4d8aa134ce92a8517702ee37c0", "version-string": "1.1.1h", "port-version": 1}, {"git-tree": "a69449619d734794b6385c36b3a5d00f108d9dd3", "version-string": "1.1.1h", "port-version": 0}, {"git-tree": "fba260d6fcf7baa0e925c0a7e551f9d6e1082dcc", "version-string": "1.1.1g", "port-version": 1}, {"git-tree": "87f250780a2f75d91e9ed8c0b4ba3a18669780a5", "version-string": "1.1.1g", "port-version": 0}, {"git-tree": "1bcb70f892ae3a4a8c221f39a5139b479a407e7f", "version-string": "1.1.1d", "port-version": 1}, {"git-tree": "fa8cdbc92010c7e9b6e30f41cb0f543e95023973", "version-string": "1.1.1d", "port-version": 0}, {"git-tree": "8d0505ed5d06120e35c08eb9296b19e8bb8506eb", "version-string": "1.0.2r", "port-version": 1}, {"git-tree": "677fd281086ecd5e0a6801306f2741e7718c8093", "version-string": "1.0.2r", "port-version": 0}, {"git-tree": "8b88b0ffaf55e0d3804807cf92c0e57f579b9c73", "version-string": "1.0.2q-winrt", "port-version": 2}, {"git-tree": "85472d04fa7e3002ccdfc7729557a9c1bd583c60", "version-string": "1.0.2q-winrt", "port-version": 1}, {"git-tree": "5596ed33ca4b2be4d1d190b963ed6f19cf45b510", "version-string": "1.0.2q-winrt", "port-version": 0}, {"git-tree": "8b22d47210619fd3b6a38bdc999a6f6cb7ee23b1", "version-string": "1.0.2l-winrt", "port-version": 0}]} \ No newline at end of file diff --git a/port_versions/o-/openssl-windows.json b/port_versions/o-/openssl-windows.json deleted file mode 100644 index 65477de2f85139..00000000000000 --- a/port_versions/o-/openssl-windows.json +++ /dev/null @@ -1 +0,0 @@ -{"versions": [{"git-tree": "526d4688d5ca8cdcbac22b8ff18f9aac10a8c695", "version-string": "1.1.1h", "port-version": 1}, {"git-tree": "3243016be13f2cd1c0ab38519b59f4660770acf5", "version-string": "1.1.1h", "port-version": 0}, {"git-tree": "22c37a71ae89dd3856bb6c81f0e59f804873acba", "version-string": "1.1.1g", "port-version": 1}, {"git-tree": "054a2e92258c48208eecda2bdbc32c9dcdc52dfb", "version-string": "1.1.1g", "port-version": 0}, {"git-tree": "3918271375b0ff99b187ef3d357b3d391bc42050", "version-string": "1.1.1d", "port-version": 2}, {"git-tree": "dfe5545ce043f440d9d4ab06e7548c495b334e36", "version-string": "1.1.1d", "port-version": 1}, {"git-tree": "aa4cf0f1e723b452cdfce53989bbf73bb4acc847", "version-string": "1.1.1d", "port-version": 0}, {"git-tree": "911361ba8124500e840b359ab0972887b65c69ae", "version-string": "1.0.2s", "port-version": 2}, {"git-tree": "cab1a598632203ea232d8794fe1cb0d9489c62ee", "version-string": "1.0.2s", "port-version": 1}, {"git-tree": "3c70e410a627bb3b67a34c0d8e79f784641f7dea", "version-string": "1.0.2q", "port-version": 2}, {"git-tree": "4f32bcc4a79399ed840a045165a572d7c16446f9", "version-string": "1.0.2s", "port-version": 1}, {"git-tree": "d3793cca46af28305e662afcf896e55b73396638", "version-string": "1.0.2q", "port-version": 2}, {"git-tree": "ec5d01d75cd9ab48966220fdb644a63764c30cea", "version-string": "1.0.2q", "port-version": 1}, {"git-tree": "12c1959ae6532da0ad5d6531d59eb107c9f94df8", "version-string": "1.0.2q", "port-version": 0}, {"git-tree": "6f75c8b4121807afd813459d36d752c019cdae8b", "version-string": "1.0.2p", "port-version": 1}, {"git-tree": "35f88f577589285a0a1cf5346fc1a2e71260eacd", "version-string": "1.0.2p", "port-version": 0}, {"git-tree": "508bde2de594176023af6270986da999919ab8af", "version-string": "1.0.2o", "port-version": 0}]} \ No newline at end of file diff --git a/port_versions/o-/openssl.json b/port_versions/o-/openssl.json deleted file mode 100644 index 9b09add2f11da1..00000000000000 --- a/port_versions/o-/openssl.json +++ /dev/null @@ -1 +0,0 @@ -{"versions": [{"git-tree": "fb63ac09918a0e4feffc60057dd5da4b9d6143f4", "version-string": "1.1.1h", "port-version": 2}, {"git-tree": "3d5b8bfd0984b72b432b3d2fb4447dd306e41d0a", "version-string": "1.1.1h", "port-version": 1}, {"git-tree": "10b21b67d6f259baa92845ba0ba06ebb480fe0f7", "version-string": "1.1.1g", "port-version": 1}, {"git-tree": "e96ecf6eebbc0c8356771548127c077e3e7bc676", "version-string": "1.1.1g", "port-version": 0}, {"git-tree": "a54c371df1a58c492721227b808bef69d4c0b6bd", "version-string": "1.1.1d", "port-version": 0}, {"git-tree": "0848995115a67c1818f5f9f2b667083d74dda046", "version-string": "1", "port-version": 0}, {"git-tree": "0a8165857ba19bdc061ef32acd6b7bad442480ed", "version-string": "0", "port-version": 0}, {"git-tree": "39d1773390a9817dd776d1d90e809d873437daa7", "version-string": "1.0.2o", "port-version": 3}, {"git-tree": "86a392547f55fe99da0105cfdb2ce012e0fa5f94", "version-string": "1.0.2o", "port-version": 2}, {"git-tree": "0ae9343f2814cfcfdef9445990d7b0c90495db52", "version-string": "1.0.2o", "port-version": 1}, {"git-tree": "74c8e8bdb3ecafc4d95aabbd076dfbb41db0a366", "version-string": "1.0.2o", "port-version": 0}, {"git-tree": "b0c5618831af164aab62f9b446b225fbf2b33b5e", "version-string": "1.0.2n", "port-version": 3}, {"git-tree": "f1cb0e39d975d255b9dfa2e55802cab0b9fc8355", "version-string": "1.0.2n", "port-version": 2}, {"git-tree": "cd538938214a1f0865641dfbcc9700182e1e5bd9", "version-string": "1.0.2n", "port-version": 1}, {"git-tree": "096e9e1bda009fd51e1b62a6c4b0f0808f22ca02", "version-string": "1.0.2n", "port-version": 0}, {"git-tree": "ae1fc122ee308f89f77bf72f6156ea48ad903e79", "version-string": "1.0.2m", "port-version": 0}, {"git-tree": "799259eabc46bde9958f9d285e4e3695836dec4d", "version-string": "1.0.2l", "port-version": 3}, {"git-tree": "06e68e4988301123770548bbe51a3f2a61993d0f", "version-string": "1.0.2l", "port-version": 2}, {"git-tree": "71c0ea9b022834e916b553b9239cf9e8df4af53b", "version-string": "1.0.2l", "port-version": 1}, {"git-tree": "4bbe7d4ddd39dbaa01b0d1920fa1cbf40e6eea4f", "version-string": "1.0.21", "port-version": 1}, {"git-tree": "c09f7eeae92108f42f6a7b8f887ee48152478697", "version-string": "1.0.2k", "port-version": 5}, {"git-tree": "91a923bc001d2dd39c52ed8ad976da371d47856a", "version-string": "1.0.2k", "port-version": 4}, {"git-tree": "fad4170dd59ac0c0690fee44ccae3b8f6a8e67c5", "version-string": "1.0.2k", "port-version": 3}, {"git-tree": "d78f2dceb034c24a9f19f48dda80181fc6500a3a", "version-string": "1.0.2k", "port-version": 2}, {"git-tree": "f8f125d46bd3e1a3680f33d0d7c7fcf59870efaa", "version-string": "1.0.2k", "port-version": 1}, {"git-tree": "53caaba6ea0df814d3c90589ca9d93a327adaac5", "version-string": "1.0.2j", "port-version": 2}, {"git-tree": "799207c0101ea8fb8e97b59c1855b1cae3148bd4", "version-string": "1.0.2j", "port-version": 1}, {"git-tree": "f18f7a91cacba1703f571e5c0a06c0f6b0d2a13f", "version-string": "1.0.2j", "port-version": 0}, {"git-tree": "c6ad91dbdec35b4d6cb404f39a5a2af454d2ea4d", "version-string": "1.0.2h", "port-version": 1}, {"git-tree": "818861b2d2b76893b113cdfef7c2bd54fae75272", "version-string": "1.0.2j", "port-version": 0}, {"git-tree": "12fd1375cd5c644b9eccc11415eff7e056f58d58", "version-string": "1.0.2h", "port-version": 1}, {"git-tree": "3e5163bcf41573dd2bc14130db52e77599f4131b", "version-string": "1.0.2h", "port-version": 0}]} \ No newline at end of file diff --git a/port_versions/r-/rapidjson.json b/port_versions/r-/rapidjson.json deleted file mode 100644 index fc15b2fcf1d64e..00000000000000 --- a/port_versions/r-/rapidjson.json +++ /dev/null @@ -1 +0,0 @@ -{"versions": [{"git-tree": "85e20cbcb5a3a60d6f64064055d149e2c2f01534", "version-string": "2020-09-14", "port-version": 0}, {"git-tree": "774a98d1e6f1f3ef3c209842e90c2887178ad8c8", "version-string": "2020-02-08", "port-version": 0}, {"git-tree": "88bad907ef9b4c572dbeca11c491ddb205ae01ef", "version-string": "2019-06-28", "port-version": 0}, {"git-tree": "ed6ea2be90d867ac327d6b89f8813c73e37d40b8", "version-string": "d87b698", "port-version": 1}, {"git-tree": "fa4095045d898afd3a3d64e6b1b3453a7ca99070", "version-string": "d87b698 ", "port-version": 0}, {"git-tree": "19a7ffcae9b4d393546e516274ad8ace062242f6", "version-string": "1.1.0", "port-version": 3}, {"git-tree": "f7425f3a260c69a9bfa207b2cae3ef6a1f57f635", "version-string": "1.1.0", "port-version": 2}, {"git-tree": "70185e740a69c90ef95e1c3cd2081d037dbc54c2", "version-string": "1.1.0", "port-version": 1}, {"git-tree": "d59e788caf8f5d28507589447072d827f0d68fbb", "version-string": "1.1.0", "port-version": 0}, {"git-tree": "c0d8c86470921ef424f9f779ace8d4fda9987c64", "version-string": "1.0.2", "port-version": 1}]} \ No newline at end of file diff --git a/port_versions/z-/zlib.json b/port_versions/z-/zlib.json deleted file mode 100644 index 61c3d197cd10f0..00000000000000 --- a/port_versions/z-/zlib.json +++ /dev/null @@ -1 +0,0 @@ -{"versions": [{"git-tree": "827111046e37c98153d9d82bb6fa4183b6d728e4", "version-string": "1.2.11", "port-version": 9}, {"git-tree": "068430e3e24fa228c302c808ba99f8a48d126557", "version-string": "1.2.11", "port-version": 8}, {"git-tree": "6a24abc8d789ceacc8aaf7c81e2a3faf1f037d14", "version-string": "1.2.11", "port-version": 7}, {"git-tree": "0efe4e4647fa585e6ac34a250df2d9989825bb90", "version-string": "1.2.11", "port-version": 6}, {"git-tree": "548fc3e95e4755b329cdd40cde7d83a409182469", "version-string": "1.2.11", "port-version": 5}, {"git-tree": "568cdfb5144c8de58daac62bace38cf7d5040e4a", "version-string": "1.2.11", "port-version": 3}, {"git-tree": "6ada5449a413aa717545457cb6e674d1590f1573", "version-string": "1.2.11", "port-version": 2}, {"git-tree": "51525f628e33dc6aa8fd00db8a7b53bc2f392da4", "version-string": "1.2.11", "port-version": 1}, {"git-tree": "356c8b9d736b19e30f83d7ef735d21e0c063c6ca", "version-string": "1.2.11", "port-version": 0}, {"git-tree": "a516e5ee220c8250f21821077d0e3dd517f02631", "version-string": "1.2.10", "port-version": 0}, {"git-tree": "3309ec82cd96d752ff890c441cb20ef49b52bf94", "version-string": "1.2.8", "port-version": 0}]} \ No newline at end of file From c8f570d194f0972528904d3151862f5e69e9a555 Mon Sep 17 00:00:00 2001 From: Victor Romero Date: Mon, 23 Nov 2020 13:36:06 -0800 Subject: [PATCH 34/42] Update .gitignore --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index e30b43a9d99288..d12fd1363f3bab 100644 --- a/.gitignore +++ b/.gitignore @@ -296,7 +296,7 @@ __pycache__/ /toolsrc/windows-bootstrap/msbuild.x64.debug/ /toolsrc/windows-bootstrap/msbuild.x64.release/ #ignore db -#/port_versions/ +/port_versions/ #ignore custom triplets /triplets/* #add vcpkg-designed triplets back in From 50535d26b26f4f4d179a0ecb9247c23ba273a46a Mon Sep 17 00:00:00 2001 From: Victor Romero Date: Mon, 23 Nov 2020 15:56:42 -0800 Subject: [PATCH 35/42] Some PR review comments --- toolsrc/include/vcpkg/vcpkgpaths.h | 14 +++- toolsrc/include/vcpkg/versiondeserializers.h | 6 +- toolsrc/include/vcpkg/versions.h | 6 +- toolsrc/src/vcpkg/portfileprovider.cpp | 7 +- toolsrc/src/vcpkg/vcpkgpaths.cpp | 68 +++++++------------- 5 files changed, 45 insertions(+), 56 deletions(-) diff --git a/toolsrc/include/vcpkg/vcpkgpaths.h b/toolsrc/include/vcpkg/vcpkgpaths.h index 6531d39659404d..20f61fc725b124 100644 --- a/toolsrc/include/vcpkg/vcpkgpaths.h +++ b/toolsrc/include/vcpkg/vcpkgpaths.h @@ -102,14 +102,24 @@ namespace vcpkg fs::path vcpkg_dir_info; fs::path vcpkg_dir_updates; + fs::path baselines_dot_git_dir; + fs::path baselines_work_tree; + fs::path baselines_output; + + fs::path versions_dot_git_dir; + fs::path versions_work_tree; + fs::path versions_output; + fs::path ports_cmake; const fs::path& get_tool_exe(const std::string& tool) const; const std::string& get_tool_version(const std::string& tool) const; // Git manipulation - fs::path git_checkout_baseline(const std::string& commit_sha) const; - fs::path git_checkout_port(const std::string& port_name, const std::string& git_tree) const; + fs::path git_checkout_baseline(Files::Filesystem& filesystem, const std::string& commit_sha) const; + fs::path git_checkout_port(Files::Filesystem& filesystem, + const std::string& port_name, + const std::string& git_tree) const; Optional get_manifest() const; Optional get_manifest_path() const; diff --git a/toolsrc/include/vcpkg/versiondeserializers.h b/toolsrc/include/vcpkg/versiondeserializers.h index 9a9d653e622e58..5e859e514f25ae 100644 --- a/toolsrc/include/vcpkg/versiondeserializers.h +++ b/toolsrc/include/vcpkg/versiondeserializers.h @@ -12,9 +12,9 @@ namespace vcpkg { struct VersionDbEntry { - const VersionT version; - const Versions::Scheme scheme; - const std::string git_tree; + VersionT version; + Versions::Scheme scheme; + std::string git_tree; VersionDbEntry(const std::string& version_string, int port_version, diff --git a/toolsrc/include/vcpkg/versions.h b/toolsrc/include/vcpkg/versions.h index 7c37fe2d35889c..7d5b573c23cb9f 100644 --- a/toolsrc/include/vcpkg/versions.h +++ b/toolsrc/include/vcpkg/versions.h @@ -14,9 +14,9 @@ namespace vcpkg::Versions struct VersionSpec { - const std::string port_name; - const VersionT version; - const Scheme scheme; + std::string port_name; + VersionT version; + Scheme scheme; VersionSpec(const std::string& port_name, const VersionT& version, Scheme scheme); diff --git a/toolsrc/src/vcpkg/portfileprovider.cpp b/toolsrc/src/vcpkg/portfileprovider.cpp index cfae4a7668535d..c5f506289f40d7 100644 --- a/toolsrc/src/vcpkg/portfileprovider.cpp +++ b/toolsrc/src/vcpkg/portfileprovider.cpp @@ -33,7 +33,7 @@ namespace Optional get_baseline_json_path(const VcpkgPaths& paths, const std::string& baseline_commit_sha) { - const auto baseline_json = paths.git_checkout_baseline(baseline_commit_sha); + const auto baseline_json = paths.git_checkout_baseline(paths.get_filesystem(), baseline_commit_sha); return paths.get_filesystem().exists(baseline_json) ? make_optional(baseline_json) : nullopt; } } @@ -359,7 +359,7 @@ namespace vcpkg::PortFileProvider for (const auto& version : db_entries) { - std::regex is_commit_sha("^[\\da-f]{40}$"); + std::regex is_commit_sha("^[\\da-fA-F]{40}$"); Checks::check_exit(VCPKG_LINE_INFO, std::regex_match(version.git_tree, is_commit_sha), "Invalid commit SHA in `git-tree` for %s %s: %s", @@ -396,7 +396,8 @@ namespace vcpkg::PortFileProvider } const std::string git_tree = git_tree_cache_it->second; - auto port_directory = m_impl->paths.git_checkout_port(version_spec.port_name, git_tree); + auto port_directory = + m_impl->paths.git_checkout_port(m_impl->paths.get_filesystem(), version_spec.port_name, git_tree); auto maybe_control_file = Paragraphs::try_load_port(m_impl->paths.get_filesystem(), port_directory); if (auto scf = maybe_control_file.get()) diff --git a/toolsrc/src/vcpkg/vcpkgpaths.cpp b/toolsrc/src/vcpkg/vcpkgpaths.cpp index c4f8f3fea52873..cf780dce256129 100644 --- a/toolsrc/src/vcpkg/vcpkgpaths.cpp +++ b/toolsrc/src/vcpkg/vcpkgpaths.cpp @@ -223,37 +223,6 @@ namespace vcpkg Configuration m_config; FeatureFlagSettings m_ff_settings; - - // Versioning paths - fs::path baselines_dot_git_dir(const VcpkgPaths& paths) - { - return versioning_tmp(paths) / fs::u8path(".baselines.git"); - } - fs::path baselines_worktree(const VcpkgPaths& paths) - { - return versioning_tmp(paths) / fs::u8path("baselines-worktree"); - } - fs::path baselines_output(const VcpkgPaths& paths) - { - return versioning_output(paths) / fs::u8path("baselines"); - } - - fs::path versions_dot_git_dir(const VcpkgPaths& paths) - { - return versioning_tmp(paths) / fs::u8path(".versions.git"); - } - fs::path versions_worktree(const VcpkgPaths& paths) - { - return versioning_tmp(paths) / fs::u8path("versions-worktree"); - } - fs::path versions_output(const VcpkgPaths& paths) - { - return versioning_output(paths) / fs::u8path("versions"); - } - - private: - fs::path versioning_tmp(const VcpkgPaths& paths) { return paths.buildtrees / fs::u8path("versioning_tmp"); } - fs::path versioning_output(const VcpkgPaths& paths) { return paths.buildtrees / fs::u8path("versioning"); } }; } @@ -393,6 +362,18 @@ If you wish to silence this error and use classic mode, you can: vcpkg_dir_info = vcpkg_dir / fs::u8path("info"); vcpkg_dir_updates = vcpkg_dir / fs::u8path("updates"); + // Versioning paths + const auto versioning_tmp = buildtrees / fs::u8path("versioning_tmp"); + const auto versioning_output = buildtrees / fs::u8path("versioning"); + + baselines_dot_git_dir = versioning_tmp / fs::u8path(".baselines.git"); + baselines_work_tree = versioning_tmp / fs::u8path("baselines-worktree"); + baselines_output = versioning_output / fs::u8path("baselines"); + + versions_dot_git_dir = versioning_tmp / fs::u8path(".versions.git"); + versions_work_tree = versioning_tmp / fs::u8path("versions-worktree"); + versions_output = versioning_output / fs::u8path("versions"); + ports_cmake = filesystem.canonical(VCPKG_LINE_INFO, scripts / fs::u8path("ports.cmake")); for (auto&& overlay_triplets_dir : args.overlay_triplets) @@ -628,26 +609,28 @@ If you wish to silence this error and use classic mode, you can: } } - fs::path VcpkgPaths::git_checkout_baseline(const std::string& commit_sha) const + fs::path VcpkgPaths::git_checkout_baseline(Files::Filesystem& fs, const std::string& commit_sha) const { const fs::path local_repo = this->root; - const fs::path destination = m_pimpl->baselines_output(*this) / commit_sha / fs::u8path("baseline.json"); + const fs::path destination = this->baselines_output / commit_sha / fs::u8path("baseline.json"); const fs::path baseline_subpath = fs::u8path("port_versions") / fs::u8path("baseline.json"); - if (!get_filesystem().exists(destination)) + if (!fs.exists(destination)) { git_checkout_subpath(*this, commit_sha, baseline_subpath, local_repo, destination, - m_pimpl->baselines_dot_git_dir(*this), - m_pimpl->baselines_worktree(*this)); + this->baselines_dot_git_dir, + this->baselines_work_tree); } return destination; } - fs::path VcpkgPaths::git_checkout_port(const std::string& port_name, const std::string& git_tree) const + fs::path VcpkgPaths::git_checkout_port(Files::Filesystem& fs, + const std::string& port_name, + const std::string& git_tree) const { /* Clone a new vcpkg repository instance using the local instance as base. * @@ -658,17 +641,12 @@ If you wish to silence this error and use classic mode, you can: * Because of that, it makes sense to use the git hash as the name for the directory. */ const fs::path local_repo = this->root; - const fs::path destination = m_pimpl->versions_output(*this) / fs::u8path(git_tree) / fs::u8path(port_name); + const fs::path destination = this->versions_output / fs::u8path(git_tree) / fs::u8path(port_name); - Files::Filesystem& fs = get_filesystem(); if (!fs.exists(destination / "CONTROL") && !fs.exists(destination / "vcpkg.json")) { - git_checkout_object(*this, - git_tree, - local_repo, - destination, - m_pimpl->versions_dot_git_dir(*this), - m_pimpl->versions_worktree(*this)); + git_checkout_object( + *this, git_tree, local_repo, destination, this->versions_dot_git_dir, this->versions_work_tree); } return destination; } From b946647db79feb697b1a65db0a4853b1c7bfcecd Mon Sep 17 00:00:00 2001 From: Victor Romero Date: Mon, 23 Nov 2020 16:56:42 -0800 Subject: [PATCH 36/42] Use StringView --- toolsrc/include/vcpkg/vcpkgpaths.h | 10 ++++------ toolsrc/src/vcpkg/vcpkgpaths.cpp | 12 +++++------- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/toolsrc/include/vcpkg/vcpkgpaths.h b/toolsrc/include/vcpkg/vcpkgpaths.h index 20f61fc725b124..c85eff0ca38025 100644 --- a/toolsrc/include/vcpkg/vcpkgpaths.h +++ b/toolsrc/include/vcpkg/vcpkgpaths.h @@ -116,10 +116,8 @@ namespace vcpkg const std::string& get_tool_version(const std::string& tool) const; // Git manipulation - fs::path git_checkout_baseline(Files::Filesystem& filesystem, const std::string& commit_sha) const; - fs::path git_checkout_port(Files::Filesystem& filesystem, - const std::string& port_name, - const std::string& git_tree) const; + fs::path git_checkout_baseline(Files::Filesystem& filesystem, StringView commit_sha) const; + fs::path git_checkout_port(Files::Filesystem& filesystem, StringView port_name, StringView git_tree) const; Optional get_manifest() const; Optional get_manifest_path() const; @@ -149,7 +147,7 @@ namespace vcpkg std::unique_ptr m_pimpl; static void git_checkout_subpath(const VcpkgPaths& paths, - const std::string& commit_sha, + StringView commit_sha, const fs::path& subpath, const fs::path& local_repo, const fs::path& destination, @@ -157,7 +155,7 @@ namespace vcpkg const fs::path& work_tree); static void git_checkout_object(const VcpkgPaths& paths, - const std::string& git_object, + StringView git_object, const fs::path& local_repo, const fs::path& destination, const fs::path& dot_git_dir, diff --git a/toolsrc/src/vcpkg/vcpkgpaths.cpp b/toolsrc/src/vcpkg/vcpkgpaths.cpp index cf780dce256129..5b33b8db44e47b 100644 --- a/toolsrc/src/vcpkg/vcpkgpaths.cpp +++ b/toolsrc/src/vcpkg/vcpkgpaths.cpp @@ -478,7 +478,7 @@ If you wish to silence this error and use classic mode, you can: } void VcpkgPaths::git_checkout_subpath(const VcpkgPaths& paths, - const std::string& commit_sha, + StringView commit_sha, const fs::path& subpath, const fs::path& local_repo, const fs::path& destination, @@ -540,7 +540,7 @@ If you wish to silence this error and use classic mode, you can: } void VcpkgPaths::git_checkout_object(const VcpkgPaths& paths, - const std::string& git_object, + StringView git_object, const fs::path& local_repo, const fs::path& destination, const fs::path& dot_git_dir, @@ -609,10 +609,10 @@ If you wish to silence this error and use classic mode, you can: } } - fs::path VcpkgPaths::git_checkout_baseline(Files::Filesystem& fs, const std::string& commit_sha) const + fs::path VcpkgPaths::git_checkout_baseline(Files::Filesystem& fs, StringView commit_sha) const { const fs::path local_repo = this->root; - const fs::path destination = this->baselines_output / commit_sha / fs::u8path("baseline.json"); + const fs::path destination = this->baselines_output / fs::u8path(commit_sha) / fs::u8path("baseline.json"); const fs::path baseline_subpath = fs::u8path("port_versions") / fs::u8path("baseline.json"); if (!fs.exists(destination)) @@ -628,9 +628,7 @@ If you wish to silence this error and use classic mode, you can: return destination; } - fs::path VcpkgPaths::git_checkout_port(Files::Filesystem& fs, - const std::string& port_name, - const std::string& git_tree) const + fs::path VcpkgPaths::git_checkout_port(Files::Filesystem& fs, StringView port_name, StringView git_tree) const { /* Clone a new vcpkg repository instance using the local instance as base. * From 37233ba3a4589501ce8a39b199c402437c56c5a8 Mon Sep 17 00:00:00 2001 From: Victor Romero Date: Mon, 23 Nov 2020 17:06:51 -0800 Subject: [PATCH 37/42] More StringView conversions --- scripts/generatePortVersionsDb.py | 7 ++++--- toolsrc/include/vcpkg/portfileprovider.h | 9 ++++----- toolsrc/src/vcpkg/portfileprovider.cpp | 22 +++++++++++----------- 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/scripts/generatePortVersionsDb.py b/scripts/generatePortVersionsDb.py index cf05352a6669c4..e3c338c64ebcdc 100644 --- a/scripts/generatePortVersionsDb.py +++ b/scripts/generatePortVersionsDb.py @@ -92,7 +92,7 @@ def main(ports_path, db_path): if not revision: print('Couldn\'t fetch current Git revision', file=sys.stderr) sys.exit(1) - + rev_file = os.path.join(db_path, revision) if os.path.exists(rev_file): print(f'Database files already exist for commit {revision}') @@ -103,11 +103,12 @@ def main(ports_path, db_path): shutil.rmtree(db_path) except OSError as e: print(f'Could not delete folder: {db_path}.\nError: {e.strerror}') - + generate_port_versions_db(ports_path=ports_path, - db_path=db_path, + db_path=db_path, revision=revision) + if __name__ == "__main__": main(ports_path=os.path.join(SCRIPT_DIRECTORY, '../ports'), db_path=os.path.join(SCRIPT_DIRECTORY, '../port_versions')) diff --git a/toolsrc/include/vcpkg/portfileprovider.h b/toolsrc/include/vcpkg/portfileprovider.h index a5488595b23a35..f4adebdc2caeff 100644 --- a/toolsrc/include/vcpkg/portfileprovider.h +++ b/toolsrc/include/vcpkg/portfileprovider.h @@ -40,8 +40,7 @@ namespace vcpkg::PortFileProvider struct IVersionedPortfileProvider { - virtual const std::vector& get_port_versions( - const std::string& port_spec) const = 0; + virtual const std::vector& get_port_versions(StringView port_name) const = 0; virtual ExpectedS get_control_file( const vcpkg::Versions::VersionSpec& version_spec) const = 0; @@ -49,7 +48,7 @@ namespace vcpkg::PortFileProvider struct IBaselineProvider { - virtual Optional get_baseline_version(const std::string& port_name) const = 0; + virtual Optional get_baseline_version(StringView port_name) const = 0; }; namespace details @@ -63,7 +62,7 @@ namespace vcpkg::PortFileProvider explicit VersionedPortfileProvider(const vcpkg::VcpkgPaths& paths); ~VersionedPortfileProvider(); - const std::vector& get_port_versions(const std::string& port_spec) const override; + const std::vector& get_port_versions(StringView port_name) const override; ExpectedS get_control_file( const vcpkg::Versions::VersionSpec& version_spec) const override; @@ -77,7 +76,7 @@ namespace vcpkg::PortFileProvider explicit BaselineProvider(const vcpkg::VcpkgPaths& paths, const std::string& baseline); ~BaselineProvider(); - Optional get_baseline_version(const std::string& port_name) const override; + Optional get_baseline_version(StringView port_name) const override; private: const std::map& get_baseline_cache() const; diff --git a/toolsrc/src/vcpkg/portfileprovider.cpp b/toolsrc/src/vcpkg/portfileprovider.cpp index c5f506289f40d7..1170102e10ad71 100644 --- a/toolsrc/src/vcpkg/portfileprovider.cpp +++ b/toolsrc/src/vcpkg/portfileprovider.cpp @@ -19,10 +19,10 @@ using namespace Versions; namespace { - Optional get_versions_json_path(const VcpkgPaths& paths, const std::string& port_name) + Optional get_versions_json_path(const VcpkgPaths& paths, StringView port_name) { - const auto port_versions_dir_path = paths.root / "port_versions"; - const auto subpath = Strings::concat(port_name[0], "-/", port_name, ".json"); + const auto port_versions_dir_path = paths.root / fs::u8path("port_versions"); + const auto subpath = Strings::concat(port_name.substr(0, 1), "-/", port_name, ".json"); const auto json_path = port_versions_dir_path / subpath; if (paths.get_filesystem().exists(json_path)) { @@ -31,7 +31,7 @@ namespace return nullopt; } - Optional get_baseline_json_path(const VcpkgPaths& paths, const std::string& baseline_commit_sha) + Optional get_baseline_json_path(const VcpkgPaths& paths, StringView baseline_commit_sha) { const auto baseline_json = paths.git_checkout_baseline(paths.get_filesystem(), baseline_commit_sha); return paths.get_filesystem().exists(baseline_json) ? make_optional(baseline_json) : nullopt; @@ -322,9 +322,9 @@ namespace vcpkg::PortFileProvider } VersionedPortfileProvider::~VersionedPortfileProvider() { } - const std::vector& VersionedPortfileProvider::get_port_versions(const std::string& port_name) const + const std::vector& VersionedPortfileProvider::get_port_versions(StringView port_name) const { - auto cache_it = m_impl->versions_cache.find(port_name); + auto cache_it = m_impl->versions_cache.find(port_name.to_string()); if (cache_it != m_impl->versions_cache.end()) { return cache_it->second; @@ -367,12 +367,12 @@ namespace vcpkg::PortFileProvider version.version.to_string(), version.git_tree); - VersionSpec spec(port_name, version.version, version.scheme); - m_impl->versions_cache[port_name].push_back(spec); + VersionSpec spec(port_name.to_string(), version.version, version.scheme); + m_impl->versions_cache[port_name.to_string()].push_back(spec); m_impl->git_tree_cache[spec] = version.git_tree; } } - return m_impl->versions_cache.at(port_name); + return m_impl->versions_cache.at(port_name.to_string()); } ExpectedS VersionedPortfileProvider::get_control_file( @@ -425,10 +425,10 @@ namespace vcpkg::PortFileProvider } BaselineProvider::~BaselineProvider() { } - Optional BaselineProvider::get_baseline_version(const std::string& port_name) const + Optional BaselineProvider::get_baseline_version(StringView port_name) const { const auto& cache = get_baseline_cache(); - auto it = cache.find(port_name); + auto it = cache.find(port_name.to_string()); if (it != cache.end()) { return it->second; From 222cdd52f74531a2d8533b6690e72cd5635bf0ea Mon Sep 17 00:00:00 2001 From: Victor Romero Date: Mon, 23 Nov 2020 18:37:28 -0800 Subject: [PATCH 38/42] More refactoring --- toolsrc/src/vcpkg/portfileprovider.cpp | 89 +++++++++++++------------- 1 file changed, 46 insertions(+), 43 deletions(-) diff --git a/toolsrc/src/vcpkg/portfileprovider.cpp b/toolsrc/src/vcpkg/portfileprovider.cpp index 1170102e10ad71..3bfcddb50e7aa0 100644 --- a/toolsrc/src/vcpkg/portfileprovider.cpp +++ b/toolsrc/src/vcpkg/portfileprovider.cpp @@ -302,6 +302,47 @@ namespace vcpkg::PortFileProvider { } ~BaselineProviderImpl() { } + + const std::map& get_baseline_cache() const + { + return baseline_cache.get_lazy([&]() -> auto { + auto maybe_baseline_file = get_baseline_json_path(paths, baseline); + Checks::check_exit(VCPKG_LINE_INFO, maybe_baseline_file.has_value(), "Couldn't find baseline.json"); + auto baseline_file = maybe_baseline_file.value_or_exit(VCPKG_LINE_INFO); + + auto value = Json::parse_file(VCPKG_LINE_INFO, paths.get_filesystem(), baseline_file); + if (!value.first.is_object()) + { + Checks::exit_with_message(VCPKG_LINE_INFO, + "Error: `baseline.json` does not have a top-level object."); + } + + const auto& obj = value.first.object(); + auto baseline_value = obj.get("default"); + if (!baseline_value) + { + Checks::exit_with_message( + VCPKG_LINE_INFO, "Error: `baseline.json` does not contain the baseline \"%s\"", "default"); + } + + Json::Reader r; + std::map> result; + r.visit_in_key(*baseline_value, "default", result, BaselineDeserializer::instance); + if (!r.errors().empty()) + { + Checks::exit_with_message(VCPKG_LINE_INFO, + "Error: failed to parse `baseline.json`:\n%s", + Strings::join("\n", r.errors())); + } + + std::map cache; + for (auto&& kv_pair : result) + { + cache.emplace(kv_pair.first, VersionSpec(kv_pair.first, kv_pair.second, Scheme::String)); + } + return cache; + }); + } }; struct VersionedPortfileProviderImpl @@ -349,6 +390,7 @@ namespace vcpkg::PortFileProvider maybe_versions_array != nullptr && maybe_versions_array->is_array(), "Error: `%s.json` does not contain a versions array.", port_name); + const auto port = port_name.to_string(); // Avoid warning treated as error. if (maybe_versions_array != nullptr) @@ -367,12 +409,12 @@ namespace vcpkg::PortFileProvider version.version.to_string(), version.git_tree); - VersionSpec spec(port_name.to_string(), version.version, version.scheme); - m_impl->versions_cache[port_name.to_string()].push_back(spec); + VersionSpec spec(port, version.version, version.scheme); + m_impl->versions_cache[port].push_back(spec); m_impl->git_tree_cache[spec] = version.git_tree; } } - return m_impl->versions_cache.at(port_name.to_string()); + return m_impl->versions_cache.at(port); } ExpectedS VersionedPortfileProvider::get_control_file( @@ -427,7 +469,7 @@ namespace vcpkg::PortFileProvider Optional BaselineProvider::get_baseline_version(StringView port_name) const { - const auto& cache = get_baseline_cache(); + const auto& cache = m_impl->get_baseline_cache(); auto it = cache.find(port_name.to_string()); if (it != cache.end()) { @@ -435,43 +477,4 @@ namespace vcpkg::PortFileProvider } return nullopt; } - - const std::map& BaselineProvider::get_baseline_cache() const - { - return m_impl->baseline_cache.get_lazy([&]() -> auto { - auto maybe_baseline_file = get_baseline_json_path(m_impl->paths, m_impl->baseline); - Checks::check_exit(VCPKG_LINE_INFO, maybe_baseline_file.has_value(), "Couldn't find baseline.json"); - auto baseline_file = maybe_baseline_file.value_or_exit(VCPKG_LINE_INFO); - - auto value = Json::parse_file(VCPKG_LINE_INFO, m_impl->paths.get_filesystem(), baseline_file); - if (!value.first.is_object()) - { - Checks::exit_with_message(VCPKG_LINE_INFO, "Error: `baseline.json` does not have a top-level object."); - } - - const auto& obj = value.first.object(); - auto baseline_value = obj.get("default"); - if (!baseline_value) - { - Checks::exit_with_message( - VCPKG_LINE_INFO, "Error: `baseline.json` does not contain the baseline \"%s\"", "default"); - } - - Json::Reader r; - std::map> result; - r.visit_in_key(*baseline_value, "default", result, BaselineDeserializer::instance); - if (!r.errors().empty()) - { - Checks::exit_with_message( - VCPKG_LINE_INFO, "Error: failed to parse `baseline.json`:\n%s", Strings::join("\n", r.errors())); - } - - std::map cache; - for (auto&& kv_pair : result) - { - cache.emplace(kv_pair.first, VersionSpec(kv_pair.first, kv_pair.second, Scheme::String)); - } - return cache; - }); - } } From 26bd2127dec1fe06bc9da4161e3cecf3a5e58799 Mon Sep 17 00:00:00 2001 From: Victor Romero Date: Tue, 24 Nov 2020 14:21:31 -0800 Subject: [PATCH 39/42] Make some implementation members private --- toolsrc/src/vcpkg/portfileprovider.cpp | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/toolsrc/src/vcpkg/portfileprovider.cpp b/toolsrc/src/vcpkg/portfileprovider.cpp index 3bfcddb50e7aa0..5952db34106d56 100644 --- a/toolsrc/src/vcpkg/portfileprovider.cpp +++ b/toolsrc/src/vcpkg/portfileprovider.cpp @@ -292,11 +292,6 @@ namespace vcpkg::PortFileProvider { struct BaselineProviderImpl { - const VcpkgPaths& paths; - const std::string baseline; - - Lazy> baseline_cache; - BaselineProviderImpl(const VcpkgPaths& paths, const std::string& baseline) : paths(paths), baseline(baseline) { @@ -343,17 +338,27 @@ namespace vcpkg::PortFileProvider return cache; }); } + + private: + const VcpkgPaths& paths; + const std::string baseline; + Lazy> baseline_cache; }; struct VersionedPortfileProviderImpl { - const VcpkgPaths& paths; std::map> versions_cache; std::unordered_map git_tree_cache; std::unordered_map control_cache; VersionedPortfileProviderImpl(const VcpkgPaths& paths) : paths(paths) { } ~VersionedPortfileProviderImpl() { } + + const VcpkgPaths& get_paths() const { return paths; } + Files::Filesystem& get_filesystem() const { return paths.get_filesystem(); } + + private: + const VcpkgPaths& paths; }; } @@ -371,14 +376,14 @@ namespace vcpkg::PortFileProvider return cache_it->second; } - auto maybe_versions_json_path = get_versions_json_path(m_impl->paths, port_name); + auto maybe_versions_json_path = get_versions_json_path(m_impl->get_paths(), port_name); Checks::check_exit(VCPKG_LINE_INFO, maybe_versions_json_path.has_value(), "Couldn't find a versions database file: %s.json.", port_name); auto versions_json_path = maybe_versions_json_path.value_or_exit(VCPKG_LINE_INFO); - auto versions_json = Json::parse_file(VCPKG_LINE_INFO, m_impl->paths.get_filesystem(), versions_json_path); + auto versions_json = Json::parse_file(VCPKG_LINE_INFO, m_impl->get_filesystem(), versions_json_path); Checks::check_exit(VCPKG_LINE_INFO, versions_json.first.is_object(), "Error: `%s.json` does not have a top level object.", @@ -439,9 +444,9 @@ namespace vcpkg::PortFileProvider const std::string git_tree = git_tree_cache_it->second; auto port_directory = - m_impl->paths.git_checkout_port(m_impl->paths.get_filesystem(), version_spec.port_name, git_tree); + m_impl->get_paths().git_checkout_port(m_impl->get_filesystem(), version_spec.port_name, git_tree); - auto maybe_control_file = Paragraphs::try_load_port(m_impl->paths.get_filesystem(), port_directory); + auto maybe_control_file = Paragraphs::try_load_port(m_impl->get_filesystem(), port_directory); if (auto scf = maybe_control_file.get()) { if (scf->get()->core_paragraph->name == version_spec.port_name) From c12a53c2f57e207cd20593244557832d7946409b Mon Sep 17 00:00:00 2001 From: Victor Romero Date: Tue, 24 Nov 2020 22:36:44 -0800 Subject: [PATCH 40/42] Functions for parsing baseline and version files --- toolsrc/include/vcpkg/versiondeserializers.h | 8 ++ toolsrc/src/vcpkg/portfileprovider.cpp | 90 +++++--------------- toolsrc/src/vcpkg/versiondeserializers.cpp | 78 ++++++++++++++++- 3 files changed, 108 insertions(+), 68 deletions(-) diff --git a/toolsrc/include/vcpkg/versiondeserializers.h b/toolsrc/include/vcpkg/versiondeserializers.h index 5e859e514f25ae..600e9fe4ca5b61 100644 --- a/toolsrc/include/vcpkg/versiondeserializers.h +++ b/toolsrc/include/vcpkg/versiondeserializers.h @@ -25,6 +25,14 @@ namespace vcpkg } }; + ExpectedS> parse_baseline_file(Files::Filesystem& fs, + StringView baseline_name, + const fs::path& baseline_file_path); + + ExpectedS> parse_versions_file(Files::Filesystem& fs, + StringView port_name, + const fs::path& versions_file_path); + struct VersionTDeserializer final : Json::IDeserializer { StringView type_name() const override { return "a version object"; } diff --git a/toolsrc/src/vcpkg/portfileprovider.cpp b/toolsrc/src/vcpkg/portfileprovider.cpp index 5952db34106d56..56d5a0f6f0a03a 100644 --- a/toolsrc/src/vcpkg/portfileprovider.cpp +++ b/toolsrc/src/vcpkg/portfileprovider.cpp @@ -305,37 +305,15 @@ namespace vcpkg::PortFileProvider Checks::check_exit(VCPKG_LINE_INFO, maybe_baseline_file.has_value(), "Couldn't find baseline.json"); auto baseline_file = maybe_baseline_file.value_or_exit(VCPKG_LINE_INFO); - auto value = Json::parse_file(VCPKG_LINE_INFO, paths.get_filesystem(), baseline_file); - if (!value.first.is_object()) - { - Checks::exit_with_message(VCPKG_LINE_INFO, - "Error: `baseline.json` does not have a top-level object."); - } - - const auto& obj = value.first.object(); - auto baseline_value = obj.get("default"); - if (!baseline_value) - { - Checks::exit_with_message( - VCPKG_LINE_INFO, "Error: `baseline.json` does not contain the baseline \"%s\"", "default"); - } - - Json::Reader r; - std::map> result; - r.visit_in_key(*baseline_value, "default", result, BaselineDeserializer::instance); - if (!r.errors().empty()) - { - Checks::exit_with_message(VCPKG_LINE_INFO, - "Error: failed to parse `baseline.json`:\n%s", - Strings::join("\n", r.errors())); - } - - std::map cache; - for (auto&& kv_pair : result) - { - cache.emplace(kv_pair.first, VersionSpec(kv_pair.first, kv_pair.second, Scheme::String)); - } - return cache; + auto maybe_baselines_map = parse_baseline_file(paths.get_filesystem(), "default", baseline_file); + Checks::check_exit(VCPKG_LINE_INFO, + maybe_baselines_map.has_value(), + "Error: Couldn't parse baseline `%s` from `%s`", + "default", + fs::u8string(baseline_file)); + auto baselines_map = *maybe_baselines_map.get(); + + return std::move(baselines_map); }); } @@ -376,48 +354,26 @@ namespace vcpkg::PortFileProvider return cache_it->second; } - auto maybe_versions_json_path = get_versions_json_path(m_impl->get_paths(), port_name); + auto maybe_versions_file_path = get_versions_json_path(m_impl->get_paths(), port_name); Checks::check_exit(VCPKG_LINE_INFO, - maybe_versions_json_path.has_value(), - "Couldn't find a versions database file: %s.json.", + maybe_versions_file_path.has_value(), + "Error: Couldn't find a versions database file: %s.json.", port_name); - auto versions_json_path = maybe_versions_json_path.value_or_exit(VCPKG_LINE_INFO); + auto versions_file_path = maybe_versions_file_path.value_or_exit(VCPKG_LINE_INFO); - auto versions_json = Json::parse_file(VCPKG_LINE_INFO, m_impl->get_filesystem(), versions_json_path); + auto maybe_version_entries = parse_versions_file(m_impl->get_filesystem(), port_name, versions_file_path); Checks::check_exit(VCPKG_LINE_INFO, - versions_json.first.is_object(), - "Error: `%s.json` does not have a top level object.", - port_name); - - const auto& versions_object = versions_json.first.object(); - auto maybe_versions_array = versions_object.get("versions"); - Checks::check_exit(VCPKG_LINE_INFO, - maybe_versions_array != nullptr && maybe_versions_array->is_array(), - "Error: `%s.json` does not contain a versions array.", - port_name); - const auto port = port_name.to_string(); + maybe_version_entries.has_value(), + "Error: Couldn't parse versions from file: %s", + fs::u8string(versions_file_path)); + auto version_entries = maybe_version_entries.value_or_exit(VCPKG_LINE_INFO); - // Avoid warning treated as error. - if (maybe_versions_array != nullptr) + auto port = port_name.to_string(); + for (auto&& version_entry : version_entries) { - Json::Reader r; - std::vector db_entries; - r.visit_in_key(*maybe_versions_array, "versions", db_entries, VersionDbEntryArrayDeserializer::instance); - - for (const auto& version : db_entries) - { - std::regex is_commit_sha("^[\\da-fA-F]{40}$"); - Checks::check_exit(VCPKG_LINE_INFO, - std::regex_match(version.git_tree, is_commit_sha), - "Invalid commit SHA in `git-tree` for %s %s: %s", - port_name, - version.version.to_string(), - version.git_tree); - - VersionSpec spec(port, version.version, version.scheme); - m_impl->versions_cache[port].push_back(spec); - m_impl->git_tree_cache[spec] = version.git_tree; - } + VersionSpec spec(port, version_entry.version, version_entry.scheme); + m_impl->versions_cache[port].push_back(spec); + m_impl->git_tree_cache.emplace(std::move(spec), std::move(version_entry.git_tree)); } return m_impl->versions_cache.at(port); } diff --git a/toolsrc/src/vcpkg/versiondeserializers.cpp b/toolsrc/src/vcpkg/versiondeserializers.cpp index f97101be582741..f0ffadcdbb145a 100644 --- a/toolsrc/src/vcpkg/versiondeserializers.cpp +++ b/toolsrc/src/vcpkg/versiondeserializers.cpp @@ -1,10 +1,86 @@ #include using namespace vcpkg; +using namespace vcpkg::Versions; + +namespace vcpkg +{ + ExpectedS> parse_baseline_file(Files::Filesystem& fs, + StringView baseline_name, + const fs::path& baseline_file_path) + { + if (!fs.exists(baseline_file_path)) + { + return Strings::format("Couldn't find `%s`", fs::u8string(baseline_file_path)); + } + + auto value = Json::parse_file(VCPKG_LINE_INFO, fs, baseline_file_path); + if (!value.first.is_object()) + { + return Strings::format("Error: `%s` does not have a top-level object.", fs::u8string(baseline_file_path)); + } + + const auto& obj = value.first.object(); + auto baseline_value = obj.get(baseline_name); + if (!baseline_value) + { + return Strings::format( + "Error: `%s` does not contain the baseline \"%s\"", fs::u8string(baseline_file_path), baseline_name); + } + + Json::Reader r; + std::map> result; + r.visit_in_key(*baseline_value, baseline_name, result, BaselineDeserializer::instance); + if (!r.errors().empty()) + { + return Strings::format( + "Error: failed to parse `%s`:\n%s", fs::u8string(baseline_file_path), Strings::join("\n", r.errors())); + } + + std::map baseline_versions; + for (auto&& kv_pair : result) + { + baseline_versions.emplace(kv_pair.first, VersionSpec(kv_pair.first, kv_pair.second, Scheme::String)); + } + return baseline_versions; + } + + ExpectedS> parse_versions_file(Files::Filesystem& fs, + StringView port_name, + const fs::path& versions_file_path) + { + (void)port_name; + if (!fs.exists(versions_file_path)) + { + return Strings::format("Couldn't find the versions database file: %s", fs::u8string(versions_file_path)); + } + + auto versions_json = Json::parse_file(VCPKG_LINE_INFO, fs, versions_file_path); + if (!versions_json.first.is_object()) + { + return Strings::format("Error: `%s` does not have a top level object.", fs::u8string(versions_file_path)); + } + + const auto& versions_object = versions_json.first.object(); + auto maybe_versions_array = versions_object.get("versions"); + if (!maybe_versions_array || !maybe_versions_array->is_array()) + { + return Strings::format("Error: `%s` does not contain a versions array.", fs::u8string(versions_file_path)); + } + + std::vector db_entries; + // Avoid warning treated as error. + if (maybe_versions_array != nullptr) + { + Json::Reader r; + r.visit_in_key(*maybe_versions_array, "versions", db_entries, VersionDbEntryArrayDeserializer::instance); + } + return db_entries; + } +} VersionTDeserializer VersionTDeserializer::instance; BaselineDeserializer BaselineDeserializer::instance; VersionDbEntryDeserializer VersionDbEntryDeserializer::instance; VersionDbEntryArrayDeserializer VersionDbEntryArrayDeserializer::instance; - Json::StringDeserializer VersionTDeserializer::version_deserializer{"version"}; From 3a0e613138d5ed6710a92d6dc1a13435db3f8099 Mon Sep 17 00:00:00 2001 From: Victor Romero Date: Wed, 25 Nov 2020 15:56:19 -0800 Subject: [PATCH 41/42] Hide deserializers implementation --- toolsrc/include/vcpkg/base/jsonreader.h | 3 +- toolsrc/include/vcpkg/portfileprovider.h | 6 +- toolsrc/include/vcpkg/versiondeserializers.h | 129 +-------------- toolsrc/src/vcpkg/portfileprovider.cpp | 7 +- toolsrc/src/vcpkg/registries.cpp | 25 +-- toolsrc/src/vcpkg/versiondeserializers.cpp | 156 +++++++++++++++++-- 6 files changed, 158 insertions(+), 168 deletions(-) diff --git a/toolsrc/include/vcpkg/base/jsonreader.h b/toolsrc/include/vcpkg/base/jsonreader.h index cdd0299d2ff6ad..02c1936e251e57 100644 --- a/toolsrc/include/vcpkg/base/jsonreader.h +++ b/toolsrc/include/vcpkg/base/jsonreader.h @@ -23,7 +23,7 @@ namespace vcpkg::Json Optional visit(Reader&, const Value&); Optional visit(Reader&, const Object&); - protected: + public: virtual Optional visit_null(Reader&); virtual Optional visit_boolean(Reader&, bool); virtual Optional visit_integer(Reader& r, int64_t i); @@ -33,6 +33,7 @@ namespace vcpkg::Json virtual Optional visit_object(Reader&, const Object&); virtual View valid_fields() const; + protected: IDeserializer() = default; IDeserializer(const IDeserializer&) = default; IDeserializer& operator=(const IDeserializer&) = default; diff --git a/toolsrc/include/vcpkg/portfileprovider.h b/toolsrc/include/vcpkg/portfileprovider.h index f4adebdc2caeff..610ecb73507278 100644 --- a/toolsrc/include/vcpkg/portfileprovider.h +++ b/toolsrc/include/vcpkg/portfileprovider.h @@ -48,7 +48,7 @@ namespace vcpkg::PortFileProvider struct IBaselineProvider { - virtual Optional get_baseline_version(StringView port_name) const = 0; + virtual Optional get_baseline_version(StringView port_name) const = 0; }; namespace details @@ -76,11 +76,9 @@ namespace vcpkg::PortFileProvider explicit BaselineProvider(const vcpkg::VcpkgPaths& paths, const std::string& baseline); ~BaselineProvider(); - Optional get_baseline_version(StringView port_name) const override; + Optional get_baseline_version(StringView port_name) const override; private: - const std::map& get_baseline_cache() const; - std::unique_ptr m_impl; }; } diff --git a/toolsrc/include/vcpkg/versiondeserializers.h b/toolsrc/include/vcpkg/versiondeserializers.h index 600e9fe4ca5b61..f5ffda101e2293 100644 --- a/toolsrc/include/vcpkg/versiondeserializers.h +++ b/toolsrc/include/vcpkg/versiondeserializers.h @@ -25,136 +25,13 @@ namespace vcpkg } }; - ExpectedS> parse_baseline_file(Files::Filesystem& fs, + Json::IDeserializer& get_versiont_deserializer_instance(); + + ExpectedS>> parse_baseline_file(Files::Filesystem& fs, StringView baseline_name, const fs::path& baseline_file_path); ExpectedS> parse_versions_file(Files::Filesystem& fs, StringView port_name, const fs::path& versions_file_path); - - struct VersionTDeserializer final : Json::IDeserializer - { - StringView type_name() const override { return "a version object"; } - View valid_fields() const override - { - static const StringView t[] = {"version-string", "port-version"}; - return t; - } - - Optional visit_object(Json::Reader& r, const Json::Object& obj) override - { - std::string version; - int port_version = 0; - - r.required_object_field(type_name(), obj, "version-string", version, version_deserializer); - r.optional_object_field(obj, "port-version", port_version, Json::NaturalNumberDeserializer::instance); - - return VersionT{std::move(version), port_version}; - } - - static Json::StringDeserializer version_deserializer; - static VersionTDeserializer instance; - }; - - struct VersionDbEntryDeserializer final : Json::IDeserializer - { - static constexpr StringLiteral VERSION_RELAXED = "version"; - static constexpr StringLiteral VERSION_SEMVER = "version-semver"; - static constexpr StringLiteral VERSION_STRING = "version-string"; - static constexpr StringLiteral VERSION_DATE = "version-date"; - static constexpr StringLiteral PORT_VERSION = "port-version"; - static constexpr StringLiteral GIT_TREE = "git-tree"; - - StringView type_name() const override { return "a version database entry"; } - View valid_fields() const override - { - static const StringView t[] = { - VERSION_RELAXED, VERSION_SEMVER, VERSION_STRING, VERSION_DATE, PORT_VERSION, GIT_TREE}; - return t; - } - - Optional visit_object(Json::Reader& r, const Json::Object& obj) override - { - std::string version; - int port_version = 0; - std::string git_tree; - Versions::Scheme version_scheme = Versions::Scheme::String; - - // Code copy-and-paste'd from sourceparagraph.cpp - static Json::StringDeserializer version_exact_deserializer{"an exact version string"}; - static Json::StringDeserializer version_relaxed_deserializer{"a relaxed version string"}; - static Json::StringDeserializer version_semver_deserializer{"a semantic version string"}; - static Json::StringDeserializer version_date_deserializer{"a date version string"}; - static Json::StringDeserializer git_tree_deserializer("a git object SHA"); - - bool has_exact = r.optional_object_field(obj, VERSION_STRING, version, version_exact_deserializer); - bool has_relax = r.optional_object_field(obj, VERSION_RELAXED, version, version_relaxed_deserializer); - bool has_semver = r.optional_object_field(obj, VERSION_SEMVER, version, version_semver_deserializer); - bool has_date = r.optional_object_field(obj, VERSION_DATE, version, version_date_deserializer); - int num_versions = (int)has_exact + (int)has_relax + (int)has_semver + (int)has_date; - if (num_versions == 0) - { - r.add_generic_error(type_name(), "expected a versioning field (example: ", VERSION_STRING, ")"); - } - else if (num_versions > 1) - { - r.add_generic_error(type_name(), "expected only one versioning field"); - } - else - { - if (has_exact) - version_scheme = Versions::Scheme::String; - else if (has_relax) - version_scheme = Versions::Scheme::Relaxed; - else if (has_semver) - version_scheme = Versions::Scheme::Semver; - else if (has_date) - version_scheme = Versions::Scheme::Date; - else - Checks::unreachable(VCPKG_LINE_INFO); - } - r.optional_object_field(obj, PORT_VERSION, port_version, Json::NaturalNumberDeserializer::instance); - r.required_object_field(type_name(), obj, GIT_TREE, git_tree, git_tree_deserializer); - - return VersionDbEntry(version, port_version, version_scheme, git_tree); - } - - static VersionDbEntryDeserializer instance; - }; - - struct VersionDbEntryArrayDeserializer final : Json::IDeserializer> - { - virtual StringView type_name() const override { return "an array of versions"; } - - virtual Optional> visit_array(Json::Reader& r, const Json::Array& arr) override - { - return r.array_elements(arr, VersionDbEntryDeserializer::instance); - } - - static VersionDbEntryArrayDeserializer instance; - }; - - struct BaselineDeserializer final : Json::IDeserializer>> - { - StringView type_name() const override { return "a baseline object"; } - - Optional visit_object(Json::Reader& r, const Json::Object& obj) override - { - std::map> result; - - for (auto&& pr : obj) - { - const auto& version_value = pr.second; - VersionT version; - r.visit_in_key(version_value, pr.first, version, VersionTDeserializer::instance); - - result.emplace(pr.first.to_string(), std::move(version)); - } - - return std::move(result); - } - - static BaselineDeserializer instance; - }; } \ No newline at end of file diff --git a/toolsrc/src/vcpkg/portfileprovider.cpp b/toolsrc/src/vcpkg/portfileprovider.cpp index 56d5a0f6f0a03a..e3053bfa627be1 100644 --- a/toolsrc/src/vcpkg/portfileprovider.cpp +++ b/toolsrc/src/vcpkg/portfileprovider.cpp @@ -298,7 +298,7 @@ namespace vcpkg::PortFileProvider } ~BaselineProviderImpl() { } - const std::map& get_baseline_cache() const + const std::map>& get_baseline_cache() const { return baseline_cache.get_lazy([&]() -> auto { auto maybe_baseline_file = get_baseline_json_path(paths, baseline); @@ -312,7 +312,6 @@ namespace vcpkg::PortFileProvider "default", fs::u8string(baseline_file)); auto baselines_map = *maybe_baselines_map.get(); - return std::move(baselines_map); }); } @@ -320,7 +319,7 @@ namespace vcpkg::PortFileProvider private: const VcpkgPaths& paths; const std::string baseline; - Lazy> baseline_cache; + Lazy>> baseline_cache; }; struct VersionedPortfileProviderImpl @@ -428,7 +427,7 @@ namespace vcpkg::PortFileProvider } BaselineProvider::~BaselineProvider() { } - Optional BaselineProvider::get_baseline_version(StringView port_name) const + Optional BaselineProvider::get_baseline_version(StringView port_name) const { const auto& cache = m_impl->get_baseline_cache(); auto it = cache.find(port_name.to_string()); diff --git a/toolsrc/src/vcpkg/registries.cpp b/toolsrc/src/vcpkg/registries.cpp index 8b496f33c82c14..2002dcc8ea53b4 100644 --- a/toolsrc/src/vcpkg/registries.cpp +++ b/toolsrc/src/vcpkg/registries.cpp @@ -84,7 +84,7 @@ namespace { fs::path registry_path; - auto version = VersionTDeserializer::instance.visit_object(r, obj); + auto version = get_versiont_deserializer_instance().visit_object(r, obj); r.required_object_field( "version entry", obj, "registry-path", registry_path, Json::PathDeserializer::instance); @@ -261,26 +261,17 @@ namespace Checks::exit_with_message(VCPKG_LINE_INFO, "Error: `baseline.json` does not have a top-level object."); } - const auto& obj = value.first.object(); - auto baseline_value = obj.get("default"); - if (!baseline_value) + auto maybe_baseline_versions = parse_baseline_file(paths.get_filesystem(), "default", baseline_file); + if (auto baseline_versions = maybe_baseline_versions.get()) { - Checks::exit_with_message( - VCPKG_LINE_INFO, "Error: `baseline.json` does not contain the baseline \"%s\"", "default"); - } - - Json::Reader r; - std::map> result; - r.visit_in_key(*baseline_value, "default", result, BaselineDeserializer::instance); - - if (r.errors().empty()) - { - return result; + return std::move(*baseline_versions); } else { - Checks::exit_with_message( - VCPKG_LINE_INFO, "Error: failed to parse `baseline.json`:\n%s", Strings::join("\n", r.errors())); + Checks::exit_with_message(VCPKG_LINE_INFO, + "Error: failed to parse `%s`:\n%s", + fs::u8string(baseline_file), + maybe_baseline_versions.error()); } } diff --git a/toolsrc/src/vcpkg/versiondeserializers.cpp b/toolsrc/src/vcpkg/versiondeserializers.cpp index f0ffadcdbb145a..276b70e4fa817a 100644 --- a/toolsrc/src/vcpkg/versiondeserializers.cpp +++ b/toolsrc/src/vcpkg/versiondeserializers.cpp @@ -3,11 +3,147 @@ using namespace vcpkg; using namespace vcpkg::Versions; +namespace +{ + struct VersionDbEntryDeserializer final : Json::IDeserializer + { + static constexpr StringLiteral VERSION_RELAXED = "version"; + static constexpr StringLiteral VERSION_SEMVER = "version-semver"; + static constexpr StringLiteral VERSION_STRING = "version-string"; + static constexpr StringLiteral VERSION_DATE = "version-date"; + static constexpr StringLiteral PORT_VERSION = "port-version"; + static constexpr StringLiteral GIT_TREE = "git-tree"; + + StringView type_name() const override { return "a version database entry"; } + View valid_fields() const override + { + static const StringView t[] = { + VERSION_RELAXED, VERSION_SEMVER, VERSION_STRING, VERSION_DATE, PORT_VERSION, GIT_TREE}; + return t; + } + + Optional visit_object(Json::Reader& r, const Json::Object& obj) override + { + std::string version; + int port_version = 0; + std::string git_tree; + Versions::Scheme version_scheme = Versions::Scheme::String; + + // Code copy-and-paste'd from sourceparagraph.cpp + static Json::StringDeserializer version_exact_deserializer{"an exact version string"}; + static Json::StringDeserializer version_relaxed_deserializer{"a relaxed version string"}; + static Json::StringDeserializer version_semver_deserializer{"a semantic version string"}; + static Json::StringDeserializer version_date_deserializer{"a date version string"}; + static Json::StringDeserializer git_tree_deserializer("a git object SHA"); + + bool has_exact = r.optional_object_field(obj, VERSION_STRING, version, version_exact_deserializer); + bool has_relax = r.optional_object_field(obj, VERSION_RELAXED, version, version_relaxed_deserializer); + bool has_semver = r.optional_object_field(obj, VERSION_SEMVER, version, version_semver_deserializer); + bool has_date = r.optional_object_field(obj, VERSION_DATE, version, version_date_deserializer); + int num_versions = (int)has_exact + (int)has_relax + (int)has_semver + (int)has_date; + if (num_versions == 0) + { + r.add_generic_error(type_name(), "expected a versioning field (example: ", VERSION_STRING, ")"); + } + else if (num_versions > 1) + { + r.add_generic_error(type_name(), "expected only one versioning field"); + } + else + { + if (has_exact) + version_scheme = Versions::Scheme::String; + else if (has_relax) + version_scheme = Versions::Scheme::Relaxed; + else if (has_semver) + version_scheme = Versions::Scheme::Semver; + else if (has_date) + version_scheme = Versions::Scheme::Date; + else + Checks::unreachable(VCPKG_LINE_INFO); + } + r.optional_object_field(obj, PORT_VERSION, port_version, Json::NaturalNumberDeserializer::instance); + r.required_object_field(type_name(), obj, GIT_TREE, git_tree, git_tree_deserializer); + + return VersionDbEntry(version, port_version, version_scheme, git_tree); + } + + static VersionDbEntryDeserializer instance; + }; + + struct VersionDbEntryArrayDeserializer final : Json::IDeserializer> + { + virtual StringView type_name() const override { return "an array of versions"; } + + virtual Optional> visit_array(Json::Reader& r, const Json::Array& arr) override + { + return r.array_elements(arr, VersionDbEntryDeserializer::instance); + } + + static VersionDbEntryArrayDeserializer instance; + }; + + VersionDbEntryDeserializer VersionDbEntryDeserializer::instance; + VersionDbEntryArrayDeserializer VersionDbEntryArrayDeserializer::instance; + + struct BaselineDeserializer final : Json::IDeserializer>> + { + StringView type_name() const override { return "a baseline object"; } + + Optional visit_object(Json::Reader& r, const Json::Object& obj) override + { + std::map> result; + + for (auto&& pr : obj) + { + const auto& version_value = pr.second; + VersionT version; + r.visit_in_key(version_value, pr.first, version, get_versiont_deserializer_instance()); + + result.emplace(pr.first.to_string(), std::move(version)); + } + + return std::move(result); + } + + static BaselineDeserializer instance; + }; + BaselineDeserializer BaselineDeserializer::instance; + + struct VersionTDeserializer final : Json::IDeserializer + { + StringView type_name() const override { return "a version object"; } + View valid_fields() const override + { + static const StringView t[] = {"version-string", "port-version"}; + return t; + } + + Optional visit_object(Json::Reader& r, const Json::Object& obj) override + { + std::string version; + int port_version = 0; + + r.required_object_field(type_name(), obj, "version-string", version, version_deserializer); + r.optional_object_field(obj, "port-version", port_version, Json::NaturalNumberDeserializer::instance); + + return VersionT{std::move(version), port_version}; + } + + static Json::StringDeserializer version_deserializer; + static VersionTDeserializer instance; + }; + Json::StringDeserializer VersionTDeserializer::version_deserializer{"version"}; + VersionTDeserializer VersionTDeserializer::instance; +} + namespace vcpkg { - ExpectedS> parse_baseline_file(Files::Filesystem& fs, - StringView baseline_name, - const fs::path& baseline_file_path) + Json::IDeserializer& get_versiont_deserializer_instance() { return VersionTDeserializer::instance; } + + ExpectedS>> parse_baseline_file(Files::Filesystem& fs, + StringView baseline_name, + const fs::path& baseline_file_path) { if (!fs.exists(baseline_file_path)) { @@ -36,13 +172,7 @@ namespace vcpkg return Strings::format( "Error: failed to parse `%s`:\n%s", fs::u8string(baseline_file_path), Strings::join("\n", r.errors())); } - - std::map baseline_versions; - for (auto&& kv_pair : result) - { - baseline_versions.emplace(kv_pair.first, VersionSpec(kv_pair.first, kv_pair.second, Scheme::String)); - } - return baseline_versions; + return result; } ExpectedS> parse_versions_file(Files::Filesystem& fs, @@ -78,9 +208,3 @@ namespace vcpkg return db_entries; } } - -VersionTDeserializer VersionTDeserializer::instance; -BaselineDeserializer BaselineDeserializer::instance; -VersionDbEntryDeserializer VersionDbEntryDeserializer::instance; -VersionDbEntryArrayDeserializer VersionDbEntryArrayDeserializer::instance; -Json::StringDeserializer VersionTDeserializer::version_deserializer{"version"}; From 143ea210991e65608bb6fa6d100f5f8ba3b892de Mon Sep 17 00:00:00 2001 From: Victor Romero Date: Wed, 25 Nov 2020 16:18:34 -0800 Subject: [PATCH 42/42] Check for `versions` feature flag in registries. --- toolsrc/src/vcpkg/registries.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/toolsrc/src/vcpkg/registries.cpp b/toolsrc/src/vcpkg/registries.cpp index 2002dcc8ea53b4..7794ed9b016326 100644 --- a/toolsrc/src/vcpkg/registries.cpp +++ b/toolsrc/src/vcpkg/registries.cpp @@ -5,6 +5,7 @@ #include #include +#include #include #include #include @@ -218,6 +219,12 @@ namespace Optional get_baseline_version(const VcpkgPaths& paths, StringView port_name) const override { + if (!paths.get_feature_flags().versions) + { + Checks::check_exit(VCPKG_LINE_INFO, + "This invocation failed because the `versions` feature flag is not enabled."); + } + const auto& baseline_cache = baseline.get([this, &paths] { return load_baseline_versions(paths); }); auto it = baseline_cache.find(port_name); if (it != baseline_cache.end())