/* 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 "cmBinUtilsLinker.h" #include "cmBinUtilsMacOSMachOGetRuntimeDependenciesTool.h" #include "cmStateTypes.h" class cmRuntimeDependencyArchive; class cmBinUtilsMacOSMachOLinker : public cmBinUtilsLinker { public: cmBinUtilsMacOSMachOLinker(cmRuntimeDependencyArchive* archive); bool Prepare() override; bool ScanDependencies(std::string const& file, cmStateEnums::TargetType type) override; private: struct FileInfo { std::vector libs; std::vector rpaths; }; std::unique_ptr Tool; std::unordered_map ScannedFileInfo; const FileInfo* GetFileInfo(std::string const& file); bool ScanDependencies(std::string const& file, std::vector const& libs, std::vector const& rpaths, std::string const& executablePath); bool GetFileDependencies(std::vector const& names, std::string const& executablePath, std::string const& loaderPath, std::vector const& rpaths); bool ResolveDependency(std::string const& name, std::string const& executablePath, std::string const& loaderPath, std::vector const& rpaths, std::string& path, bool& resolved); bool ResolveExecutablePathDependency(std::string const& name, std::string const& executablePath, std::string& path, bool& resolved); bool ResolveLoaderPathDependency(std::string const& name, std::string const& loaderPath, std::string& path, bool& resolved); bool ResolveRPathDependency(std::string const& name, std::string const& executablePath, std::string const& loaderPath, std::vector const& rpaths, std::string& path, bool& resolved); };