llvm-project/llvm/cmake/modules/FindTerminfo.cmake
Jack Andersen b66339575a [CMake] Installable find modules for terminfo and libffi
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
2021-12-05 14:46:23 -05:00

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