/* 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 #include #include #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 executable) { this->Executables.push_back(std::move(executable)); } void cmInstallRuntimeDependencySet::AddLibrary(std::unique_ptr library) { this->Libraries.push_back(std::move(library)); } void cmInstallRuntimeDependencySet::AddModule(std::unique_ptr module) { this->Modules.push_back(std::move(module)); } bool cmInstallRuntimeDependencySet::AddBundleExecutable( std::unique_ptr 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& GetTargetDependsClosure( std::map>& 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& 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); }