
Improves cross-distro portability of LLVM cmake package by resolving paths for terminfo and libffi via import targets. When LLVMExports.cmake is generated for installation, it contains absolute library paths which are likely to be a common cause of portability issues. To mitigate this, the discovery logic for these dependencies is refactored into find modules which get installed alongside LLVMConfig.cmake. The result is cleaner, cmake-friendly management of these dependencies that respect the environment of the LLVM package importer. Reviewed By: JDevlieghere Differential Revision: https://reviews.llvm.org/D114327
44 lines
1.3 KiB
CMake
44 lines
1.3 KiB
CMake
# Attempts to discover terminfo library with a linkable setupterm function.
|
|
#
|
|
# Example usage:
|
|
#
|
|
# find_package(Terminfo)
|
|
#
|
|
# If successful, the following variables will be defined:
|
|
# Terminfo_FOUND
|
|
# Terminfo_LIBRARIES
|
|
#
|
|
# Additionally, the following import target will be defined:
|
|
# Terminfo::terminfo
|
|
|
|
find_library(Terminfo_LIBRARIES NAMES terminfo tinfo curses ncurses ncursesw)
|
|
|
|
if(Terminfo_LIBRARIES)
|
|
include(CMakePushCheckState)
|
|
include(CheckCSourceCompiles)
|
|
cmake_push_check_state()
|
|
list(APPEND CMAKE_REQUIRED_LIBRARIES ${Terminfo_LIBRARIES})
|
|
check_c_source_compiles("
|
|
int setupterm(char *term, int filedes, int *errret);
|
|
int main() { return setupterm(0, 0, 0); }"
|
|
Terminfo_LINKABLE)
|
|
cmake_pop_check_state()
|
|
endif()
|
|
|
|
include(FindPackageHandleStandardArgs)
|
|
find_package_handle_standard_args(Terminfo
|
|
FOUND_VAR
|
|
Terminfo_FOUND
|
|
REQUIRED_VARS
|
|
Terminfo_LIBRARIES
|
|
Terminfo_LINKABLE)
|
|
mark_as_advanced(Terminfo_LIBRARIES
|
|
Terminfo_LINKABLE)
|
|
|
|
if(Terminfo_FOUND)
|
|
if(NOT TARGET Terminfo::terminfo)
|
|
add_library(Terminfo::terminfo UNKNOWN IMPORTED)
|
|
set_target_properties(Terminfo::terminfo PROPERTIES IMPORTED_LOCATION "${Terminfo_LIBRARIES}")
|
|
endif()
|
|
endif()
|