d766034c06
- improve pkg-config and explicit search fallback
84 行
2.2 KiB
CMake
84 行
2.2 KiB
CMake
# Try to find libelf headers and libraries.
|
|
#
|
|
# Usage of this module as follows:
|
|
#
|
|
# find_package(libelf)
|
|
#
|
|
# Variables used by this module, they can change the default behaviour and need
|
|
# to be set before calling find_package:
|
|
#
|
|
# libelf_ROOT Set this variable to the root installation of
|
|
# libelf if the module has problems finding the
|
|
# proper installation path.
|
|
#
|
|
# Variables defined by this module:
|
|
#
|
|
# libelf_FOUND System has libelf libraries and headers
|
|
# libelf_LIBRARIES The libelf library
|
|
# libelf_INCLUDE_DIRS The location of libelf headers
|
|
#
|
|
# Interface targets defined by this module:
|
|
#
|
|
# libelf::libelf
|
|
#
|
|
|
|
find_package(PkgConfig)
|
|
|
|
if(PkgConfig_FOUND)
|
|
set(ENV{PKG_CONFIG_SYSTEM_INCLUDE_PATH} "")
|
|
pkg_check_modules(ELF libelf)
|
|
|
|
if(ELF_FOUND
|
|
AND ELF_INCLUDE_DIRS
|
|
AND ELF_LIBRARIES)
|
|
set(libelf_INCLUDE_DIR
|
|
"${ELF_INCLUDE_DIRS}"
|
|
CACHE FILEPATH "libelf include directory")
|
|
set(libelf_LIBRARY
|
|
"${ELF_LIBRARIES}"
|
|
CACHE FILEPATH "libelf libraries")
|
|
endif()
|
|
endif()
|
|
|
|
if(NOT libelf_INCLUDE_DIR OR NOT libelf_LIBRARY)
|
|
find_path(
|
|
libelf_ROOT_DIR
|
|
NAMES include/elf.h
|
|
HINTS ${libelf_ROOT}
|
|
PATHS ${libelf_ROOT})
|
|
|
|
mark_as_advanced(libelf_ROOT_DIR)
|
|
|
|
find_path(
|
|
libelf_INCLUDE_DIR
|
|
NAMES elf.h
|
|
HINTS ${libelf_ROOT}
|
|
PATHS ${libelf_ROOT}
|
|
PATH_SUFFIXES include)
|
|
|
|
find_library(
|
|
libelf_LIBRARY
|
|
NAMES elf
|
|
HINTS ${libelf_ROOT}
|
|
PATHS ${libelf_ROOT}
|
|
PATH_SUFFIXES lib lib64)
|
|
endif()
|
|
|
|
include(FindPackageHandleStandardArgs)
|
|
find_package_handle_standard_args(libelf DEFAULT_MSG libelf_LIBRARY libelf_INCLUDE_DIR)
|
|
|
|
if(libelf_FOUND)
|
|
if(NOT TARGET libelf::libelf)
|
|
add_library(libelf::libelf INTERFACE IMPORTED)
|
|
endif()
|
|
|
|
if(TARGET PkgConfig::ELF AND ELF_FOUND)
|
|
target_link_libraries(libelf::libelf INTERFACE PkgConfig::ELF)
|
|
else()
|
|
target_link_libraries(libelf::libelf INTERFACE ${libelf_LIBRARY})
|
|
target_include_directories(libelf::libelf SYSTEM INTERFACE ${libelf_INCLUDE_DIR})
|
|
endif()
|
|
endif()
|
|
|
|
mark_as_advanced(libelf_INCLUDE_DIR libelf_LIBRARY)
|