diff options
author | Tobias Ribizel <ribizel@kit.edu> | 2022-05-27 13:06:45 -0700 |
---|---|---|
committer | Fangrui Song <i@maskray.me> | 2022-05-27 13:06:45 -0700 |
commit | 03a09079d6cd6fd227868e5cd76c67f49df325ef (patch) | |
tree | 028a24f77868561aee07b3e4bf948e4ceec8165d | |
parent | a7f9895cc18995549c7facb96e72718da282a864 (diff) | |
download | llvm-03a09079d6cd6fd227868e5cd76c67f49df325ef.zip llvm-03a09079d6cd6fd227868e5cd76c67f49df325ef.tar.gz llvm-03a09079d6cd6fd227868e5cd76c67f49df325ef.tar.bz2 |
[CMake] Make FindLibEdit.cmake more robust
FindLibEdit uses pkg-config to find the necessary flags, but this may break with cross-compilation,
because the PkgConfig module in CMake doesn't respect the SYSROOT specified in a toolchain file.
Instead of taking the parameters from pkg-config for granted, we check whether our compiler can
actually include and link against the library.
Fixes #55445
Fixes #55671
Reviewed By: MaskRay
Differential Revision: https://reviews.llvm.org/D126450
-rw-r--r-- | cmake/Modules/FindLibEdit.cmake | 69 |
1 files changed, 32 insertions, 37 deletions
diff --git a/cmake/Modules/FindLibEdit.cmake b/cmake/Modules/FindLibEdit.cmake index 94c6150..7e62d4d 100644 --- a/cmake/Modules/FindLibEdit.cmake +++ b/cmake/Modules/FindLibEdit.cmake @@ -13,55 +13,50 @@ # LibEdit_LIBRARIES - libraries to link # LibEdit_VERSION_STRING - version number -if(LibEdit_INCLUDE_DIRS AND LibEdit_LIBRARIES) - set(LibEdit_FOUND TRUE) -else() - find_package(PkgConfig QUIET) - pkg_check_modules(PC_LIBEDIT QUIET libedit) +find_package(PkgConfig QUIET) +pkg_check_modules(PC_LIBEDIT QUIET libedit) - find_path(LibEdit_INCLUDE_DIRS - NAMES - histedit.h - HINTS - ${PC_LIBEDIT_INCLUDEDIR} - ${PC_LIBEDIT_INCLUDE_DIRS} - "${CMAKE_INSTALL_FULL_INCLUDEDIR}") - find_library(LibEdit_LIBRARIES - NAMES - edit libedit - HINTS - ${PC_LIBEDIT_LIBDIR} - ${PC_LIBEDIT_LIBRARY_DIRS} - "${CMAKE_INSTALL_FULL_LIBDIR}") +find_path(LibEdit_INCLUDE_DIRS NAMES histedit.h HINTS ${PC_LIBEDIT_INCLUDE_DIRS}) +find_library(LibEdit_LIBRARIES NAMES edit HINTS ${PC_LIBEDIT_LIBRARY_DIRS}) - if(LibEdit_INCLUDE_DIRS AND EXISTS "${LibEdit_INCLUDE_DIRS}/histedit.h") +include(CheckIncludeFile) +if(LibEdit_INCLUDE_DIRS AND EXISTS "${LibEdit_INCLUDE_DIRS}/histedit.h") + cmake_push_check_state() + list(APPEND CMAKE_REQUIRED_INCLUDES ${LibEdit_INCLUDE_DIRS}) + list(APPEND CMAKE_REQUIRED_LIBRARIES ${LibEdit_LIBRARIES}) + check_include_file(histedit.h HAVE_HISTEDIT_H) + cmake_pop_check_state() + if (HAVE_HISTEDIT_H) file(STRINGS "${LibEdit_INCLUDE_DIRS}/histedit.h" - libedit_major_version_str - REGEX "^#define[ \t]+LIBEDIT_MAJOR[ \t]+[0-9]+") + libedit_major_version_str + REGEX "^#define[ \t]+LIBEDIT_MAJOR[ \t]+[0-9]+") string(REGEX REPLACE "^#define[ \t]+LIBEDIT_MAJOR[ \t]+([0-9]+)" "\\1" - LIBEDIT_MAJOR_VERSION "${libedit_major_version_str}") + libedit_major_version "${libedit_major_version_str}") file(STRINGS "${LibEdit_INCLUDE_DIRS}/histedit.h" - libedit_minor_version_str - REGEX "^#define[ \t]+LIBEDIT_MINOR[ \t]+[0-9]+") + libedit_minor_version_str + REGEX "^#define[ \t]+LIBEDIT_MINOR[ \t]+[0-9]+") string(REGEX REPLACE "^#define[ \t]+LIBEDIT_MINOR[ \t]+([0-9]+)" "\\1" - LIBEDIT_MINOR_VERSION "${libedit_minor_version_str}") + libedit_minor_version "${libedit_minor_version_str}") set(LibEdit_VERSION_STRING "${libedit_major_version}.${libedit_minor_version}") + else() + set(LibEdit_INCLUDE_DIRS "") + set(LibEdit_LIBRARIES "") endif() - - include(FindPackageHandleStandardArgs) - find_package_handle_standard_args(LibEdit - FOUND_VAR - LibEdit_FOUND - REQUIRED_VARS - LibEdit_INCLUDE_DIRS - LibEdit_LIBRARIES - VERSION_VAR - LibEdit_VERSION_STRING) - mark_as_advanced(LibEdit_INCLUDE_DIRS LibEdit_LIBRARIES) endif() +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(LibEdit + FOUND_VAR + LibEdit_FOUND + REQUIRED_VARS + LibEdit_INCLUDE_DIRS + LibEdit_LIBRARIES + VERSION_VAR + LibEdit_VERSION_STRING) +mark_as_advanced(LibEdit_INCLUDE_DIRS LibEdit_LIBRARIES) + if (LibEdit_FOUND AND NOT TARGET LibEdit::LibEdit) add_library(LibEdit::LibEdit UNKNOWN IMPORTED) set_target_properties(LibEdit::LibEdit PROPERTIES |