| /* 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); | |
| } |