/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying file Copyright.txt or https://cmake.org/licensing for details. */ #pragma once #include <map> #include <memory> #include <set> #include <string> #include <vector> #include "cmsys/RegularExpression.hxx" #include "cmBinUtilsLinker.h" class cmExecutionStatus; class cmMakefile; class cmRuntimeDependencyArchive { public: explicit cmRuntimeDependencyArchive( cmExecutionStatus& status, std::vector<std::string> searchDirectories, std::string bundleExecutable, const std::vector<std::string>& preIncludeRegexes, const std::vector<std::string>& preExcludeRegexes, const std::vector<std::string>& postIncludeRegexes, const std::vector<std::string>& postExcludeRegexes, std::vector<std::string> postIncludeFiles, std::vector<std::string> postExcludeFiles, std::vector<std::string> postExcludeFilesStrict); bool Prepare(); bool GetRuntimeDependencies(const std::vector<std::string>& executables, const std::vector<std::string>& libraries, const std::vector<std::string>& modules); void SetError(const std::string& e); const std::string& GetBundleExecutable() const; const std::vector<std::string>& GetSearchDirectories() const; const std::string& GetGetRuntimeDependenciesTool() const; bool GetGetRuntimeDependenciesCommand( const std::string& search, std::vector<std::string>& command) const; bool IsPreExcluded(const std::string& name) const; bool IsPostExcluded(const std::string& name) const; void AddResolvedPath(const std::string& name, const std::string& path, bool& unique, std::vector<std::string> rpaths = {}); void AddUnresolvedPath(const std::string& name); cmMakefile* GetMakefile() const; const std::map<std::string, std::set<std::string>>& GetResolvedPaths() const; const std::set<std::string>& GetUnresolvedPaths() const; const std::map<std::string, std::vector<std::string>>& GetRPaths() const; static bool PlatformSupportsRuntimeDependencies(const std::string& platform); private: cmExecutionStatus& Status; std::unique_ptr<cmBinUtilsLinker> Linker; std::string GetRuntimeDependenciesTool; std::vector<std::string> GetRuntimeDependenciesCommand; std::vector<std::string> SearchDirectories; std::string BundleExecutable; std::vector<cmsys::RegularExpression> PreIncludeRegexes; std::vector<cmsys::RegularExpression> PreExcludeRegexes; std::vector<cmsys::RegularExpression> PostIncludeRegexes; std::vector<cmsys::RegularExpression> PostExcludeRegexes; std::vector<std::string> PostIncludeFiles; std::vector<std::string> PostExcludeFiles; std::vector<std::string> PostExcludeFilesStrict; std::map<std::string, std::set<std::string>> ResolvedPaths; std::set<std::string> UnresolvedPaths; std::map<std::string, std::vector<std::string>> RPaths; };