You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
2.8 KiB
96 lines
2.8 KiB
3 years ago
|
/* 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);
|
||
|
}
|