blob: 0cef49a2a076a707f44833be8dc8212c357f6f4a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
file Copyright.txt or https://cmake.org/licensing for details. */
#include "cmInstallRuntimeDependencySet.h"
#include <set>
#include <string>
#include <utility>
#include "cmGeneratorTarget.h"
#include "cmGlobalGenerator.h"
#include "cmInstallImportedRuntimeArtifactsGenerator.h"
#include "cmInstallTargetGenerator.h"
#include "cmStateTypes.h"
#include "cmTargetDepend.h"
cmInstallRuntimeDependencySet::cmInstallRuntimeDependencySet(std::string name)
: Name(std::move(name))
{
}
void cmInstallRuntimeDependencySet::AddExecutable(
std::unique_ptr<Item> executable)
{
this->Executables.push_back(std::move(executable));
}
void cmInstallRuntimeDependencySet::AddLibrary(std::unique_ptr<Item> library)
{
this->Libraries.push_back(std::move(library));
}
void cmInstallRuntimeDependencySet::AddModule(std::unique_ptr<Item> module)
{
this->Modules.push_back(std::move(module));
}
bool cmInstallRuntimeDependencySet::AddBundleExecutable(
std::unique_ptr<Item> bundleExecutable)
{
if (this->BundleExecutable) {
return false;
}
this->BundleExecutable = bundleExecutable.get();
this->AddExecutable(std::move(bundleExecutable));
return true;
}
std::string cmInstallRuntimeDependencySet::TargetItem::GetItemPath(
const std::string& config) const
{
return this->Target->GetTarget()->GetFullPath(config);
}
namespace {
const std::set<const cmGeneratorTarget*>& GetTargetDependsClosure(
std::map<const cmGeneratorTarget*, std::set<const cmGeneratorTarget*>>&
targetDepends,
const cmGeneratorTarget* tgt)
{
auto it = targetDepends.insert({ tgt, {} });
auto& retval = it.first->second;
if (it.second) {
auto const& deps = tgt->GetGlobalGenerator()->GetTargetDirectDepends(tgt);
for (auto const& dep : deps) {
if (!dep.IsCross() && dep.IsLink()) {
auto type = dep->GetType();
if (type == cmStateEnums::EXECUTABLE ||
type == cmStateEnums::SHARED_LIBRARY ||
type == cmStateEnums::MODULE_LIBRARY) {
retval.insert(dep);
}
auto const& depDeps = GetTargetDependsClosure(targetDepends, dep);
retval.insert(depDeps.begin(), depDeps.end());
}
}
}
return retval;
}
}
void cmInstallRuntimeDependencySet::TargetItem::AddPostExcludeFiles(
const std::string& config, std::set<std::string>& files,
cmInstallRuntimeDependencySet* set) const
{
for (auto const* dep : GetTargetDependsClosure(set->TargetDepends,
this->Target->GetTarget())) {
files.insert(dep->GetFullPath(config));
}
}
std::string cmInstallRuntimeDependencySet::ImportedTargetItem::GetItemPath(
const std::string& config) const
{
return this->Target->GetTarget()->GetFullPath(config);
}
|