/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying file Copyright.txt or https://cmake.org/licensing for details. */ #pragma once #include #include #include #include #include #include #include class cmGeneratorTarget; class cmInstallImportedRuntimeArtifactsGenerator; class cmInstallTargetGenerator; class cmInstallRuntimeDependencySet { public: cmInstallRuntimeDependencySet(std::string name = ""); cmInstallRuntimeDependencySet(const cmInstallRuntimeDependencySet&) = delete; cmInstallRuntimeDependencySet& operator=( const cmInstallRuntimeDependencySet&) = delete; cm::string_view GetName() const { return this->Name; } cm::string_view GetDisplayName() const { if (this->Name.empty()) { return ""_s; } return this->Name; } class Item { public: virtual ~Item() = default; virtual std::string GetItemPath(const std::string& config) const = 0; virtual void AddPostExcludeFiles( const std::string& /*config*/, std::set& /*files*/, cmInstallRuntimeDependencySet* /*set*/) const { } }; class TargetItem : public Item { public: TargetItem(cmInstallTargetGenerator* target) : Target(target) { } std::string GetItemPath(const std::string& config) const override; void AddPostExcludeFiles( const std::string& config, std::set& files, cmInstallRuntimeDependencySet* set) const override; private: cmInstallTargetGenerator* Target; }; class ImportedTargetItem : public Item { public: ImportedTargetItem(cmInstallImportedRuntimeArtifactsGenerator* target) : Target(target) { } std::string GetItemPath(const std::string& config) const override; private: cmInstallImportedRuntimeArtifactsGenerator* Target; }; void AddExecutable(std::unique_ptr executable); void AddLibrary(std::unique_ptr library); void AddModule(std::unique_ptr module); bool AddBundleExecutable(std::unique_ptr bundleExecutable); void AddExecutable(cmInstallTargetGenerator* executable) { this->AddExecutable(cm::make_unique(executable)); } void AddLibrary(cmInstallTargetGenerator* library) { this->AddLibrary(cm::make_unique(library)); } void AddModule(cmInstallTargetGenerator* module) { this->AddModule(cm::make_unique(module)); } bool AddBundleExecutable(cmInstallTargetGenerator* bundleExecutable) { return this->AddBundleExecutable( cm::make_unique(bundleExecutable)); } void AddExecutable(cmInstallImportedRuntimeArtifactsGenerator* executable) { this->AddExecutable(cm::make_unique(executable)); } void AddLibrary(cmInstallImportedRuntimeArtifactsGenerator* library) { this->AddLibrary(cm::make_unique(library)); } void AddModule(cmInstallImportedRuntimeArtifactsGenerator* module) { this->AddModule(cm::make_unique(module)); } bool AddBundleExecutable( cmInstallImportedRuntimeArtifactsGenerator* bundleExecutable) { return this->AddBundleExecutable( cm::make_unique(bundleExecutable)); } const std::vector>& GetExecutables() const { return this->Executables; } const std::vector>& GetLibraries() const { return this->Libraries; } const std::vector>& GetModules() const { return this->Modules; } Item* GetBundleExecutable() const { return this->BundleExecutable; } bool Empty() const { return this->Executables.empty() && this->Libraries.empty() && this->Modules.empty(); } private: std::string Name; std::vector> Executables; std::vector> Libraries; std::vector> Modules; Item* BundleExecutable = nullptr; std::map> TargetDepends; };