1if(NOT READLINE_INCLUDE_DIR OR NOT READLINE_LIBRARY)
2    find_path(READLINE_INCLUDE_DIR readline/readline.h)
3    find_library(READLINE_LIBRARY NAMES readline)
4endif()
5
6if(APPLE)
7    # look in homebrew paths
8    execute_process(COMMAND brew --prefix readline OUTPUT_VARIABLE READLINE_BREW_PREFIX)
9    if (READLINE_BREW_PREFIX)
10        string(STRIP ${READLINE_BREW_PREFIX} READLINE_BREW_PREFIX)
11        message(STATUS "Found a homebrew install of readline ${READLINE_BREW_PREFIX}")
12        set(READLINE_INCLUDE_DIR ${READLINE_BREW_PREFIX}/include)
13        set(READLINE_LIBRARY ${READLINE_BREW_PREFIX}/lib/libreadline.dylib)
14    endif()
15endif()
16
17if(WIN32)
18    find_path(READLINE_INCLUDE_DIR
19        NAMES readline/readline.h
20        HINTS "${CMAKE_SOURCE_DIR}/../${CMAKE_LIBRARY_ARCHITECTURE}/readline/include"
21          "$ENV{ProgramW6432}/GnuWin32/include"
22          "$ENV{ProgramFiles}/GnuWin32/include"
23
24    )
25    find_library(READLINE_LIBRARY
26        NAMES readline6 readline5 readline libreadline6 libreadline5 libreadline
27        HINTS "${CMAKE_SOURCE_DIR}/../${CMAKE_LIBRARY_ARCHITECTURE}/readline/lib"
28          "${CMAKE_SOURCE_DIR}/../${CMAKE_LIBRARY_ARCHITECTURE}/readline/bin"
29          "$ENV{ProgramW6432}/GnuWin32/lib"
30          "$ENV{ProgramW6432}/GnuWin32/bin"
31          "$ENV{ProgramFiles}/GnuWin32/lib"
32          "$ENV{ProgramFiles}/GnuWin32/bin"
33    )
34
35    find_path(READLINE_LIBRARY_DIR
36        NAMES readline5.dll libreadline5.dll readline6.dll libreadline6.dll readline.dll libreadline.dll
37        HINTS "${CMAKE_SOURCE_DIR}/../${CMAKE_LIBRARY_ARCHITECTURE}/readline/bin"
38          "$ENV{ProgramW6432}/GnuWin32/bin"
39          "$ENV{ProgramFiles}/GnuWin32/bin"
40    )
41endif()
42
43if (READLINE_INCLUDE_DIR AND READLINE_LIBRARY)
44    set(READLINE_FOUND TRUE)
45endif()
46
47if (READLINE_INCLUDE_DIR AND EXISTS "${READLINE_INCLUDE_DIR}/readline/readline.h")
48  file(STRINGS "${READLINE_INCLUDE_DIR}/readline/readline.h"
49               READLINE_MAJOR_VERSION
50       REGEX "^#define RL_VERSION_MAJOR.*$")
51  file(STRINGS "${READLINE_INCLUDE_DIR}/readline/readline.h"
52               READLINE_MINOR_VERSION
53       REGEX "^#define RL_VERSION_MINOR.*$")
54
55  string(REGEX REPLACE "^.*RL_VERSION_MAJOR.*([0-9]+).*$"
56                       "\\1"
57                       READLINE_MAJOR_VERSION
58                       "${READLINE_MAJOR_VERSION}")
59  string(REGEX REPLACE "^.*RL_VERSION_MINOR.*([0-9]+).*$"
60                       "\\1"
61                       READLINE_MINOR_VERSION
62                       "${READLINE_MINOR_VERSION}")
63
64  if(READLINE_MAJOR_VERSION)
65    set(READLINE_VERSION "${READLINE_MAJOR_VERSION}.${READLINE_MINOR_VERSION}")
66  else()
67    set(READLINE_VERSION "(unknown)")
68  endif()
69endif ()
70
71if (READLINE_FOUND)
72  if (Readline_FIND_VERSION VERSION_GREATER READLINE_VERSION)
73    message(STATUS "Found version ${READLINE_VERSION} of GNU Readline at ${READLINE_LIBRARY}, but version ${Readline_FIND_VERSION} required")
74    unset(READLINE_FOUND)
75  else()
76    if (NOT READLINE_FIND_QUIETLY)
77      message(STATUS "Found GNU Readline version ${READLINE_VERSION}: ${READLINE_LIBRARY}")
78    endif ()
79  endif ()
80else ()
81  if (READLINE_FIND_REQUIRED)
82    message(FATAL_ERROR "Could not find GNU Readline")
83  endif ()
84endif ()
85