aboutsummaryrefslogtreecommitdiff
path: root/toolsrc/include
diff options
context:
space:
mode:
authorRobert Schumacher <roschuma@microsoft.com>2020-02-24 14:38:51 -0800
committerGitHub <noreply@github.com>2020-02-24 14:38:51 -0800
commitf6d52648ecdd5d57a9ca592e1425950d465aeef5 (patch)
tree4f8d4c99a3e62e11b8101d827085797c630ca53f /toolsrc/include
parentef60f1d9b97fab6fcc61651936196866bb6553d0 (diff)
downloadvcpkg-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.h53
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);
}