resolve cyclic dependency with zstd
[platform/upstream/cmake.git] / Source / cmBinUtilsMacOSMachOLinker.h
1 /* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
2    file Copyright.txt or https://cmake.org/licensing for details.  */
3
4 #pragma once
5
6 #include <memory>
7 #include <string>
8 #include <unordered_map>
9 #include <vector>
10
11 #include "cmBinUtilsLinker.h"
12 #include "cmBinUtilsMacOSMachOGetRuntimeDependenciesTool.h"
13 #include "cmStateTypes.h"
14
15 class cmRuntimeDependencyArchive;
16
17 class cmBinUtilsMacOSMachOLinker : public cmBinUtilsLinker
18 {
19 public:
20   cmBinUtilsMacOSMachOLinker(cmRuntimeDependencyArchive* archive);
21
22   bool Prepare() override;
23
24   bool ScanDependencies(std::string const& file,
25                         cmStateEnums::TargetType type) override;
26
27 private:
28   struct FileInfo
29   {
30     std::vector<std::string> libs;
31     std::vector<std::string> rpaths;
32   };
33
34   std::unique_ptr<cmBinUtilsMacOSMachOGetRuntimeDependenciesTool> Tool;
35   std::unordered_map<std::string, FileInfo> ScannedFileInfo;
36
37   const FileInfo* GetFileInfo(std::string const& file);
38
39   bool ScanDependencies(std::string const& file,
40                         std::vector<std::string> const& libs,
41                         std::vector<std::string> const& rpaths,
42                         std::string const& executablePath);
43
44   bool GetFileDependencies(std::vector<std::string> const& names,
45                            std::string const& executablePath,
46                            std::string const& loaderPath,
47                            std::vector<std::string> const& rpaths);
48
49   bool ResolveDependency(std::string const& name,
50                          std::string const& executablePath,
51                          std::string const& loaderPath,
52                          std::vector<std::string> const& rpaths,
53                          std::string& path, bool& resolved);
54
55   bool ResolveExecutablePathDependency(std::string const& name,
56                                        std::string const& executablePath,
57                                        std::string& path, bool& resolved);
58
59   bool ResolveLoaderPathDependency(std::string const& name,
60                                    std::string const& loaderPath,
61                                    std::string& path, bool& resolved);
62
63   bool ResolveRPathDependency(std::string const& name,
64                               std::string const& executablePath,
65                               std::string const& loaderPath,
66                               std::vector<std::string> const& rpaths,
67                               std::string& path, bool& resolved);
68 };