diff options
| author | Robert Schumacher <roschuma@microsoft.com> | 2020-02-24 14:38:51 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-02-24 14:38:51 -0800 |
| commit | f6d52648ecdd5d57a9ca592e1425950d465aeef5 (patch) | |
| tree | 4f8d4c99a3e62e11b8101d827085797c630ca53f /toolsrc/include | |
| parent | ef60f1d9b97fab6fcc61651936196866bb6553d0 (diff) | |
| download | vcpkg-f6d52648ecdd5d57a9ca592e1425950d465aeef5.tar.gz vcpkg-f6d52648ecdd5d57a9ca592e1425950d465aeef5.zip | |
[vcpkg] Fix issue #9916; `vcpkg upgrade` did not `load_tag_vars()` (#10202)
Diffstat (limited to 'toolsrc/include')
| -rw-r--r-- | toolsrc/include/vcpkg/cmakevars.h | 53 |
1 files changed, 12 insertions, 41 deletions
diff --git a/toolsrc/include/vcpkg/cmakevars.h b/toolsrc/include/vcpkg/cmakevars.h index 8d131d45e..1c02376b9 100644 --- a/toolsrc/include/vcpkg/cmakevars.h +++ b/toolsrc/include/vcpkg/cmakevars.h @@ -1,15 +1,21 @@ #pragma once -#include <vcpkg/base/hash.h> -#include <vcpkg/base/system.process.h> +#include <vcpkg/base/optional.h> #include <vcpkg/portfileprovider.h> #include <vcpkg/vcpkgpaths.h> +namespace vcpkg::Dependencies +{ + struct ActionPlan; +} + namespace vcpkg::CMakeVars { struct CMakeVarProvider { + virtual ~CMakeVarProvider() = default; + virtual Optional<const std::unordered_map<std::string, std::string>&> get_generic_triplet_vars( Triplet triplet) const = 0; @@ -25,45 +31,10 @@ namespace vcpkg::CMakeVars virtual void load_tag_vars(Span<const FullPackageSpec> specs, const PortFileProvider::PortFileProvider& port_provider) const = 0; - }; - - struct TripletCMakeVarProvider : Util::ResourceBase, CMakeVarProvider - { - private: - fs::path create_tag_extraction_file( - const Span<const std::pair<const FullPackageSpec*, std::string>>& spec_abi_settings) const; - - fs::path create_dep_info_extraction_file(const Span<const PackageSpec> specs) const; - - void launch_and_split(const fs::path& script_path, - std::vector<std::vector<std::pair<std::string, std::string>>>& vars) const; - public: - explicit TripletCMakeVarProvider(const vcpkg::VcpkgPaths& paths) : paths(paths) {} - - void load_generic_triplet_vars(Triplet triplet) const override; - - void load_dep_info_vars(Span<const PackageSpec> specs) const override; - - void load_tag_vars(Span<const FullPackageSpec> specs, - const PortFileProvider::PortFileProvider& port_provider) const override; - - Optional<const std::unordered_map<std::string, std::string>&> get_generic_triplet_vars( - Triplet triplet) const override; - - Optional<const std::unordered_map<std::string, std::string>&> get_dep_info_vars( - const PackageSpec& spec) const override; - - Optional<const std::unordered_map<std::string, std::string>&> get_tag_vars( - const PackageSpec& spec) const override; - - private: - const VcpkgPaths& paths; - const fs::path& cmake_exe_path = paths.get_tool_exe(Tools::CMAKE); - const fs::path get_tags_path = paths.scripts / "vcpkg_get_tags.cmake"; - const fs::path get_dep_info_path = paths.scripts / "vcpkg_get_dep_info.cmake"; - mutable std::unordered_map<PackageSpec, std::unordered_map<std::string, std::string>> dep_resolution_vars; - mutable std::unordered_map<PackageSpec, std::unordered_map<std::string, std::string>> tag_vars; - mutable std::unordered_map<Triplet, std::unordered_map<std::string, std::string>> generic_triplet_vars; + void load_tag_vars(const vcpkg::Dependencies::ActionPlan& action_plan, + const PortFileProvider::PortFileProvider& port_provider) const; }; + + std::unique_ptr<CMakeVarProvider> make_triplet_cmake_var_provider(const vcpkg::VcpkgPaths& paths); } |
