resolve cyclic dependency with zstd
[platform/upstream/cmake.git] / Source / cmBinUtilsLinuxELFLinker.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 "cmConfigure.h" // IWYU pragma: keep
7
8 #include <cstdint>
9 #include <memory>
10 #include <string>
11 #include <vector>
12
13 #include "cmBinUtilsLinker.h"
14 #include "cmBinUtilsLinuxELFGetRuntimeDependenciesTool.h"
15 #include "cmLDConfigTool.h"
16 #include "cmStateTypes.h"
17
18 class cmRuntimeDependencyArchive;
19
20 class cmBinUtilsLinuxELFLinker : public cmBinUtilsLinker
21 {
22 public:
23   cmBinUtilsLinuxELFLinker(cmRuntimeDependencyArchive* archive);
24
25   bool Prepare() override;
26
27   bool ScanDependencies(std::string const& file,
28                         cmStateEnums::TargetType type) override;
29
30 private:
31   std::unique_ptr<cmBinUtilsLinuxELFGetRuntimeDependenciesTool> Tool;
32   std::unique_ptr<cmLDConfigTool> LDConfigTool;
33   bool HaveLDConfigPaths = false;
34   std::vector<std::string> LDConfigPaths;
35   std::uint16_t Machine = 0;
36
37   bool ScanDependencies(std::string const& file,
38                         std::vector<std::string> const& parentRpaths);
39
40   bool ResolveDependency(std::string const& name,
41                          std::vector<std::string> const& searchPaths,
42                          std::string& path, bool& resolved);
43
44   bool GetLDConfigPaths();
45 };