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})
|