llvm-capstone/llvm/cmake/modules/FindTerminfo.cmake
Eric Kilmer e3ae2a52d2
[llvm][CMake] Check dependency cxx source compiles (#68549)
If a CMake project doesn't enable the C language, then the CMake FFI and
Terminfo find modules will fail their checks for compilation and
linking.

This commit allows projects to enable only C++ by first checking if a C
compiler is set before testing C source compilation; if not, it checks
whether C++ compilation succeeds.

Fixes #53950
2023-10-18 09:03:04 -07:00

56 lines
1.7 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)
cmake_push_check_state()
list(APPEND CMAKE_REQUIRED_LIBRARIES ${Terminfo_LIBRARIES})
set(Terminfo_LINKABLE_SRC [=[
#ifdef __cplusplus
extern "C" {
#endif
int setupterm(char *term, int filedes, int *errret);
#ifdef __cplusplus
}
#endif
int main(void) { return setupterm(0, 0, 0); }
]=])
if(DEFINED CMAKE_C_COMPILER)
include(CheckCSourceCompiles)
check_c_source_compiles("${Terminfo_LINKABLE_SRC}" Terminfo_LINKABLE)
else()
include(CheckCXXSourceCompiles)
check_cxx_source_compiles("${Terminfo_LINKABLE_SRC}" Terminfo_LINKABLE)
endif()
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()