1 /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
2 file Copyright.txt or https://cmake.org/licensing for details. */
11 #include <cm/string_view>
12 #include <cmext/string_view>
14 class cmGeneratorTarget
;
15 class cmInstallImportedRuntimeArtifactsGenerator
;
16 class cmInstallTargetGenerator
;
18 class cmInstallRuntimeDependencySet
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
;
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
54 TargetItem(cmInstallTargetGenerator
* 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
;
66 cmInstallTargetGenerator
* Target
;
69 class ImportedTargetItem
: public Item
72 ImportedTargetItem(cmInstallImportedRuntimeArtifactsGenerator
* target
)
77 std::string
GetItemPath(const std::string
& config
) const override
;
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
; }
150 return this->Executables
.empty() && this->Libraries
.empty() &&
151 this->Modules
.empty();
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
*>>