summaryrefslogtreecommitdiffstats
path: root/Source/cmInstallRuntimeDependencySet.cxx
diff options
context:
space:
mode:
authorKyle Edwards <kyle.edwards@kitware.com>2021-05-19 14:29:17 (GMT)
committerKyle Edwards <kyle.edwards@kitware.com>2021-06-04 12:52:01 (GMT)
commitf2617cf8e6aca6ec0f8c7df6999c1f713c6d7474 (patch)
treea6474fcf1e26db8e014161e15d1680b4a421a656 /Source/cmInstallRuntimeDependencySet.cxx
parent9f6cfe716918d7c28ddc906c49b75b922e36a8cf (diff)
downloadCMake-f2617cf8e6aca6ec0f8c7df6999c1f713c6d7474.zip
CMake-f2617cf8e6aca6ec0f8c7df6999c1f713c6d7474.tar.gz
CMake-f2617cf8e6aca6ec0f8c7df6999c1f713c6d7474.tar.bz2
Source: Add cmInstallRuntimeDependencySet
Diffstat (limited to 'Source/cmInstallRuntimeDependencySet.cxx')
-rw-r--r--Source/cmInstallRuntimeDependencySet.cxx95
1 files changed, 95 insertions, 0 deletions
diff --git a/Source/cmInstallRuntimeDependencySet.cxx b/Source/cmInstallRuntimeDependencySet.cxx
new file mode 100644
index 0000000..0cef49a
--- /dev/null
+++ b/Source/cmInstallRuntimeDependencySet.cxx
@@ -0,0 +1,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);
+}