#.rst: # FindCursesAndPanel # ----------- # # Find the curses, terminfo, and panel library as a whole. include(CMakePushCheckState) function(lldb_check_curses_tinfo CURSES_INCLUDE_DIRS CURSES_LIBRARIES CURSES_HAS_TINFO) cmake_reset_check_state() set(CMAKE_REQUIRED_INCLUDES "${CURSES_INCLUDE_DIRS}") set(CMAKE_REQUIRED_LIBRARIES "${CURSES_LIBRARIES}") # acs_map is one of many symbols that are part of tinfo but could # be bundled in curses. check_symbol_exists(acs_map "curses.h" CURSES_HAS_TINFO) endfunction() if(CURSES_INCLUDE_DIRS AND CURSES_LIBRARIES AND PANEL_LIBRARIES) if(NOT HAS_TERMINFO_SYMBOLS) lldb_check_curses_tinfo("${CURSES_INCLUDE_DIRS}" "${CURSES_LIBRARIES}" CURSES_HAS_TINFO) if(NOT CURSES_HAS_TINFO) message(WARNING "CURSES_LIBRARIES was provided manually but is missing terminfo symbols") endif() mark_as_advanced(CURSES_HAS_TINFO) endif() set(CURSESANDPANEL_FOUND TRUE) else() find_package(Curses QUIET) find_library(PANEL_LIBRARIES NAMES panel DOC "The curses panel library" QUIET) include(FindPackageHandleStandardArgs) if(CURSES_FOUND AND PANEL_LIBRARIES) # Sometimes the curses libraries define their own terminfo symbols, # other times they're extern and are defined by a separate terminfo library. # Auto-detect which. lldb_check_curses_tinfo("${CURSES_INCLUDE_DIRS}" "${CURSES_LIBRARIES}" CURSES_HAS_TINFO) if(NOT CURSES_HAS_TINFO) message(STATUS "curses library missing terminfo symbols, looking for tinfo separately") find_library(TINFO_LIBRARIES NAMES tinfo DOC "The curses tinfo library" QUIET) list(APPEND CURSES_LIBRARIES "${TINFO_LIBRARIES}") endif() set(HAS_TERMINFO_SYMBOLS "$,$>") endif() find_package_handle_standard_args(CursesAndPanel FOUND_VAR CURSESANDPANEL_FOUND REQUIRED_VARS CURSES_INCLUDE_DIRS CURSES_LIBRARIES PANEL_LIBRARIES HAS_TERMINFO_SYMBOLS) if(CURSES_FOUND AND PANEL_LIBRARIES AND HAS_TERMINFO_SYMBOLS) mark_as_advanced(CURSES_INCLUDE_DIRS PANEL_LIBRARIES HAS_TERMINFO_SYMBOLS CURSES_HAS_TINFO) endif() if(TINFO_LIBRARIES) mark_as_advanced(TINFO_LIBRARIES) endif() endif()