blob: edac0302728c35786b169a868bc9cb72b6f0bdfe (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
# Find Readline
# Readline_FOUND - system has Readline lib
# Readline_INCLUDE_DIR - the Readline include directory
# Readline_LIBRARIES - Libraries needed to use Readline
# Readline_COMPENTRY_FUNC_RETURNS_CHARPTR - Indicates if compentry function
# returns a (char *)
find_path(Readline_INCLUDE_DIR NAMES readline/readline.h)
find_library(Readline_LIBRARIES NAMES readline)
# Try to compile and link a simple program against readline. 'libs' can be
# used to specify additional required libraries.
function(try_compile_readline libs _result)
set(CMAKE_REQUIRED_QUIET TRUE)
set(CMAKE_REQUIRED_LIBRARIES ${Readline_LIBRARIES} ${libs})
check_cxx_source_compiles(
"
#include <stdio.h>
#include <readline/readline.h>
int main() { readline(\"\"); return 0; }
"
${_result}
)
set(${_result} ${${_result}} PARENT_SCOPE)
endfunction()
if(Readline_INCLUDE_DIR)
# We only need to figure out readline's additional libraries dependencies if
# we compile static.
# Note: It might be the case that we need to check for more/other libraries
# depending on what the installed version of readline is linked against
# (e.g., termcap, ncurses, ...).
find_library(TINFO_LIBRARY tinfo)
try_compile_readline(${TINFO_LIBRARY} OK)
if(OK)
list(APPEND Readline_LIBRARIES ${TINFO_LIBRARY})
else()
message(FATAL_ERROR
"Could not link against readline. "
"Check CMakeError.log for more details")
endif()
# Check which standard of readline is installed on the system.
# https://github.com/CVC4/CVC4/issues/702
include(CheckCXXSourceCompiles)
set(CMAKE_REQUIRED_QUIET TRUE)
set(CMAKE_REQUIRED_LIBRARIES ${Readline_LIBRARIES})
check_cxx_source_compiles(
"#include <stdio.h>
#include <readline/readline.h>
char* foo(const char*, int) { return (char*)0; }
int main() { rl_completion_entry_function = foo; return 0; }"
Readline_COMPENTRY_FUNC_RETURNS_CHARPTR
)
unset(CMAKE_REQUIRED_QUIET)
unset(CMAKE_REQUIRED_LIBRARIES)
endif()
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Readline
DEFAULT_MSG Readline_INCLUDE_DIR Readline_LIBRARIES)
mark_as_advanced(
Readline_INCLUDE_DIR
Readline_LIBRARIES
Readline_COMPENTRY_FUNC_RETURNS_CHARPTR
)
if(Readline_LIBRARIES)
message(STATUS "Found Readline libs: ${Readline_LIBRARIES}")
endif()
|