File: FindLIEF.cmake

package info (click to toggle)
lief 0.9.0-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, buster
  • size: 16,036 kB
  • sloc: cpp: 76,013; python: 6,167; ansic: 3,355; pascal: 404; sh: 98; makefile: 32
file content (166 lines) | stat: -rw-r--r-- 4,884 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
#.rst:
# FindLIEF
# --------
#
# Find the native LIEF includes and library.
#
# IMPORTED Targets
# ^^^^^^^^^^^^^^^^
#
# This module defines :prop_tgt:`IMPORTED` target ``LIEF::LIEF``, if
# LIEF has been found.
#
# Result Variables
# ^^^^^^^^^^^^^^^^
#
# This module defines the following variables:
#
# ::
#
#   LIEF_INCLUDE_DIRS   - Where to find LIEF/LIEF.hpp, etc.
#   LIEF_LIBRARIES      - List of libraries when using LIEF.
#   LIEF_FOUND          - True if LIEF found.
#
# ::
#
#   LIEF_VERSION_STRING - The version of LIEF found (x.y.z)
#   LIEF_VERSION_MAJOR  - The major version of LIEF
#   LIEF_VERSION_MINOR  - The minor version of LIEF
#   LIEF_VERSION_PATCH  - The patch version of LIEF
#
# Hints
# ^^^^^
#
# A user may set ``LIEF_ROOT`` to a LIEF installation root to tell this
# module where to look.
#
# To choose between STATIC and SHARED version of LIEF library, one
# can use ``COMPONENTS STATIC`` of ``COMPONENTS SHARED``
#
# .. code-block:: cmake
#
#   find_package(LIEF 0.8.0 REQUIRED COMPONENTS STATIC)



set(_LIEF_SEARCHES)
# Search LIEF_ROOT first if it is set.
if(LIEF_ROOT)
  set(_LIEF_SEARCH_ROOT PATHS ${LIEF_ROOT} NO_DEFAULT_PATH)
  list(APPEND _LIEF_SEARCHES _LIEF_SEARCH_ROOT)
endif()

set(LIEF_NAMES LIEF)

if (LIEF_FIND_COMPONENTS AND LIEF_FIND_REQUIRED_STATIC AND LIEF_FIND_REQUIRED_SHARED)
  message(WARNING "Two incompatible components specified : static and shared. We are going to ignore the 'shared' component.")
  list(REMOVE_ITEM LIEF_FIND_COMPONENTS SHARED)
  unset(LIEF_FIND_REQUIRED_SHARED)
endif()

set(LIBRARY_SUFFIXES_SAVED ${CMAKE_FIND_LIBRARY_SUFFIXES})

if (NOT LIEF_FIND_COMPONENTS)
  set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_STATIC_LIBRARY_SUFFIX} ${CMAKE_SHARED_LIBRARY_SUFFIX})
endif()

if(LIEF_FIND_COMPONENTS AND LIEF_FIND_REQUIRED_STATIC)
  unset(_LIEF_LIBRARY CACHE)
  unset(LIEF_LIBRARY)
  unset(LIEF_FOUND)
  unset(LIEF_LIBRARIES)
  set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_STATIC_LIBRARY_SUFFIX})
endif()

if(LIEF_FIND_COMPONENTS AND LIEF_FIND_REQUIRED_SHARED)
  unset(_LIEF_LIBRARY CACHE)
  unset(LIEF_LIBRARY)
  unset(LIEF_FOUND)
  unset(LIEF_LIBRARIES)
  set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_SHARED_LIBRARY_SUFFIX})
endif()

# Try each search configuration.
foreach(search ${_LIEF_SEARCHES})
  find_path(LIEF_INCLUDE_DIR
    NAMES LIEF/LIEF.hpp
    PATH ${${search}}
    PATH_SUFFIXES include)
endforeach()

# Allow LIEF_LIBRARY to be set manually, as the location of the LIEF library
if(NOT LIEF_LIBRARY)
  foreach(search ${_LIEF_SEARCHES})
    find_library(_LIEF_LIBRARY
      NAMES ${LIEF_NAMES}
      PATHS ${${search}}
      PATH_SUFFIXES lib lib64)
  endforeach()

  if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake")
    include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
  else()
    include(SelectLibraryConfigurations)
  endif()

  select_library_configurations(LIEF)

  set(LIEF_LIBRARY ${_LIEF_LIBRARY})
endif()


unset(LIEF_NAMES)

mark_as_advanced(LIEF_INCLUDE_DIR)

if(LIEF_INCLUDE_DIR AND EXISTS "${LIEF_INCLUDE_DIR}/LIEF/version.h")
  file(STRINGS "${LIEF_INCLUDE_DIR}/LIEF/version.h" LIEF_H REGEX "^#define LIEF_VERSION \"[^\"]*\"$")

  string(REGEX REPLACE "^.*LIEF_VERSION \"([0-9]+).*$" "\\1"                   LIEF_VERSION_MAJOR "${LIEF_H}")
  string(REGEX REPLACE "^.*LIEF_VERSION \"[0-9]+\\.([0-9]+).*$" "\\1"          LIEF_VERSION_MINOR "${LIEF_H}")
  string(REGEX REPLACE "^.*LIEF_VERSION \"[0-9]+\\.[0-9]+\\.([0-9]+).*$" "\\1" LIEF_VERSION_PATCH "${LIEF_H}")
  set(LIEF_VERSION_STRING "${LIEF_VERSION_MAJOR}.${LIEF_VERSION_MINOR}.${LIEF_VERSION_PATCH}")

  set(LIEF_MAJOR_VERSION "${LIEF_VERSION_MAJOR}")
  set(LIEF_MINOR_VERSION "${LIEF_VERSION_MINOR}")
  set(LIEF_PATCH_VERSION "${LIEF_VERSION_PATCH}")
endif()


if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake")
  include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
else()
  include(FindPackageHandleStandardArgs)
endif()
FIND_PACKAGE_HANDLE_STANDARD_ARGS(LIEF REQUIRED_VARS LIEF_LIBRARY LIEF_INCLUDE_DIR
                                       VERSION_VAR LIEF_VERSION_STRING)


if(LIEF_FOUND)
  set(LIEF_INCLUDE_DIRS ${LIEF_INCLUDE_DIR})

  if(NOT LIEF_LIBRARIES)
    set(LIEF_LIBRARIES ${LIEF_LIBRARY})
  endif()

  if(NOT TARGET LIEF::LIEF)
    add_library(LIEF::LIEF UNKNOWN IMPORTED)
    set_target_properties(LIEF::LIEF PROPERTIES
      INTERFACE_INCLUDE_DIRECTORIES "${LIEF_INCLUDE_DIRS}")

    if(LIEF_LIBRARY)
      set_property(TARGET LIEF::LIEF APPEND PROPERTY
        IMPORTED_CONFIGURATIONS RELEASE)
      set_target_properties(LIEF::LIEF PROPERTIES
        IMPORTED_LOCATION_RELEASE "${LIEF_LIBRARY}")
    endif()

    if(NOT LIEF_LIBRARY)
      set_property(TARGET LIEF::LIEF APPEND PROPERTY
        IMPORTED_LOCATION "${LIEF_LIBRARY}")
    endif()
  endif()
endif()

# Restore
set(CMAKE_FIND_LIBRARY_SUFFIXES ${LIBRARY_SUFFIXES_SAVED})