CMake Nightly Date Stamp
[kiteware-cmake.git] / Source / cmInstallRuntimeDependencySet.h
blob7f5162458571c14bd88ef60cadc036a17901919b
1 /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
2 file Copyright.txt or https://cmake.org/licensing for details. */
3 #pragma once
5 #include <map>
6 #include <set>
7 #include <string>
8 #include <vector>
10 #include <cm/memory>
11 #include <cm/string_view>
12 #include <cmext/string_view>
14 class cmGeneratorTarget;
15 class cmInstallImportedRuntimeArtifactsGenerator;
16 class cmInstallTargetGenerator;
18 class cmInstallRuntimeDependencySet
20 public:
21 cmInstallRuntimeDependencySet(std::string name = "");
23 cmInstallRuntimeDependencySet(const cmInstallRuntimeDependencySet&) = delete;
24 cmInstallRuntimeDependencySet& operator=(
25 const cmInstallRuntimeDependencySet&) = delete;
27 cm::string_view GetName() const { return this->Name; }
29 cm::string_view GetDisplayName() const
31 if (this->Name.empty()) {
32 return "<anonymous>"_s;
34 return this->Name;
37 class Item
39 public:
40 virtual ~Item() = default;
42 virtual std::string GetItemPath(const std::string& config) const = 0;
44 virtual void AddPostExcludeFiles(
45 const std::string& /*config*/, std::set<std::string>& /*files*/,
46 cmInstallRuntimeDependencySet* /*set*/) const
51 class TargetItem : public Item
53 public:
54 TargetItem(cmInstallTargetGenerator* target)
55 : Target(target)
59 std::string GetItemPath(const std::string& config) const override;
61 void AddPostExcludeFiles(
62 const std::string& config, std::set<std::string>& files,
63 cmInstallRuntimeDependencySet* set) const override;
65 private:
66 cmInstallTargetGenerator* Target;
69 class ImportedTargetItem : public Item
71 public:
72 ImportedTargetItem(cmInstallImportedRuntimeArtifactsGenerator* target)
73 : Target(target)
77 std::string GetItemPath(const std::string& config) const override;
79 private:
80 cmInstallImportedRuntimeArtifactsGenerator* Target;
83 void AddExecutable(std::unique_ptr<Item> executable);
84 void AddLibrary(std::unique_ptr<Item> library);
85 void AddModule(std::unique_ptr<Item> module);
86 bool AddBundleExecutable(std::unique_ptr<Item> bundleExecutable);
88 void AddExecutable(cmInstallTargetGenerator* executable)
90 this->AddExecutable(cm::make_unique<TargetItem>(executable));
93 void AddLibrary(cmInstallTargetGenerator* library)
95 this->AddLibrary(cm::make_unique<TargetItem>(library));
98 void AddModule(cmInstallTargetGenerator* module)
100 this->AddModule(cm::make_unique<TargetItem>(module));
103 bool AddBundleExecutable(cmInstallTargetGenerator* bundleExecutable)
105 return this->AddBundleExecutable(
106 cm::make_unique<TargetItem>(bundleExecutable));
109 void AddExecutable(cmInstallImportedRuntimeArtifactsGenerator* executable)
111 this->AddExecutable(cm::make_unique<ImportedTargetItem>(executable));
114 void AddLibrary(cmInstallImportedRuntimeArtifactsGenerator* library)
116 this->AddLibrary(cm::make_unique<ImportedTargetItem>(library));
119 void AddModule(cmInstallImportedRuntimeArtifactsGenerator* module)
121 this->AddModule(cm::make_unique<ImportedTargetItem>(module));
124 bool AddBundleExecutable(
125 cmInstallImportedRuntimeArtifactsGenerator* bundleExecutable)
127 return this->AddBundleExecutable(
128 cm::make_unique<ImportedTargetItem>(bundleExecutable));
131 const std::vector<std::unique_ptr<Item>>& GetExecutables() const
133 return this->Executables;
136 const std::vector<std::unique_ptr<Item>>& GetLibraries() const
138 return this->Libraries;
141 const std::vector<std::unique_ptr<Item>>& GetModules() const
143 return this->Modules;
146 Item* GetBundleExecutable() const { return this->BundleExecutable; }
148 bool Empty() const
150 return this->Executables.empty() && this->Libraries.empty() &&
151 this->Modules.empty();
154 private:
155 std::string Name;
156 std::vector<std::unique_ptr<Item>> Executables;
157 std::vector<std::unique_ptr<Item>> Libraries;
158 std::vector<std::unique_ptr<Item>> Modules;
159 Item* BundleExecutable = nullptr;
161 std::map<const cmGeneratorTarget*, std::set<const cmGeneratorTarget*>>
162 TargetDepends;