1
# Copyright (c) 2009, 2010 Sun Microsystems, Inc.
2
# Use is subject to license terms.
4
# This program is free software; you can redistribute it and/or modify
5
# it under the terms of the GNU General Public License as published by
6
# the Free Software Foundation; version 2 of the License.
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
# GNU General Public License for more details.
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17
MACRO (MYSQL_CHECK_MULTIBYTE)
18
CHECK_INCLUDE_FILE(wctype.h HAVE_WCTYPE_H)
19
CHECK_INCLUDE_FILE(wchar.h HAVE_WCHAR_H)
21
SET(CMAKE_EXTRA_INCLUDE_FILES wchar.h)
22
CHECK_TYPE_SIZE(mbstate_t SIZEOF_MBSTATE_T)
23
SET(CMAKE_EXTRA_INCLUDE_FILES)
29
CHECK_C_SOURCE_COMPILES("
31
int main(int ac, char **av)
33
char *cs = nl_langinfo(CODESET);
36
HAVE_LANGINFO_CODESET)
38
CHECK_FUNCTION_EXISTS(mbrlen HAVE_MBRLEN)
39
CHECK_FUNCTION_EXISTS(mbscmp HAVE_MBSCMP)
40
CHECK_FUNCTION_EXISTS(mbsrtowcs HAVE_MBSRTOWCS)
41
CHECK_FUNCTION_EXISTS(wcrtomb HAVE_WCRTOMB)
42
CHECK_FUNCTION_EXISTS(mbrtowc HAVE_MBRTOWC)
43
CHECK_FUNCTION_EXISTS(wcscoll HAVE_WCSCOLL)
44
CHECK_FUNCTION_EXISTS(wcsdup HAVE_WCSDUP)
45
CHECK_FUNCTION_EXISTS(wcwidth HAVE_WCWIDTH)
46
CHECK_FUNCTION_EXISTS(wctype HAVE_WCTYPE)
47
CHECK_FUNCTION_EXISTS(iswlower HAVE_ISWLOWER)
48
CHECK_FUNCTION_EXISTS(iswupper HAVE_ISWUPPER)
49
CHECK_FUNCTION_EXISTS(towlower HAVE_TOWLOWER)
50
CHECK_FUNCTION_EXISTS(towupper HAVE_TOWUPPER)
51
CHECK_FUNCTION_EXISTS(iswctype HAVE_ISWCTYPE)
53
SET(CMAKE_EXTRA_INCLUDE_FILES wchar.h)
54
CHECK_TYPE_SIZE(wchar_t SIZEOF_WCHAR_T)
59
SET(CMAKE_EXTRA_INCLUDE_FILES wctype.h)
60
CHECK_TYPE_SIZE(wctype_t SIZEOF_WCTYPE_T)
64
CHECK_TYPE_SIZE(wint_t SIZEOF_WINT_T)
68
SET(CMAKE_EXTRA_INCLUDE_FILES)
74
MARK_AS_ADVANCED(CURSES_CURSES_H_PATH CURSES_FORM_LIBRARY CURSES_HAVE_CURSES_H)
76
SET(ERRORMSG "Curses library not found. Please install appropriate package,
77
remove CMakeCache.txt and rerun cmake.")
78
IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
79
SET(ERRORMSG ${ERRORMSG}
80
"On Debian/Ubuntu, package name is libncurses5-dev, on Redhat and derivates "
81
"it is ncurses-devel.")
83
MESSAGE(FATAL_ERROR ${ERRORMSG})
86
IF(CURSES_HAVE_CURSES_H)
87
SET(HAVE_CURSES_H 1 CACHE INTERNAL "")
88
ELSEIF(CURSES_HAVE_NCURSES_H)
89
SET(HAVE_NCURSES_H 1 CACHE INTERNAL "")
91
IF(CMAKE_SYSTEM_NAME MATCHES "HP")
92
# CMake uses full path to library /lib/libcurses.sl
93
# On Itanium, it results into architecture mismatch+
94
# the library is for PA-RISC
95
SET(CURSES_LIBRARY "curses" CACHE INTERNAL "" FORCE)
96
SET(CURSES_CURSES_LIBRARY "curses" CACHE INTERNAL "" FORCE)
99
IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
100
# -Wl,--as-needed breaks linking with -lcurses, e.g on Fedora
101
# Lower-level libcurses calls are exposed by libtinfo
102
CHECK_LIBRARY_EXISTS(${CURSES_LIBRARY} tputs "" HAVE_TPUTS_IN_CURSES)
103
IF(NOT HAVE_TPUTS_IN_CURSES)
104
CHECK_LIBRARY_EXISTS(tinfo tputs "" HAVE_TPUTS_IN_TINFO)
105
IF(HAVE_TPUTS_IN_TINFO)
106
SET(CURSES_LIBRARY tinfo)
112
MACRO (MYSQL_USE_BUNDLED_READLINE)
113
SET(USE_NEW_READLINE_INTERFACE 1)
115
SET(USE_LIBEDIT_INTERFACE)
116
SET(READLINE_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/cmd-line-utils)
117
SET(READLINE_LIBRARY readline)
119
ADD_SUBDIRECTORY(${CMAKE_SOURCE_DIR}/cmd-line-utils/readline)
122
MACRO (MYSQL_USE_BUNDLED_LIBEDIT)
123
SET(USE_LIBEDIT_INTERFACE 1)
124
SET(HAVE_HIST_ENTRY 1)
125
SET(READLINE_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/cmd-line-utils/libedit)
126
SET(READLINE_LIBRARY edit)
128
ADD_SUBDIRECTORY(${CMAKE_SOURCE_DIR}/cmd-line-utils/libedit)
132
MACRO (MYSQL_FIND_SYSTEM_READLINE name)
134
FIND_PATH(${name}_INCLUDE_DIR readline/readline.h )
135
FIND_LIBRARY(${name}_LIBRARY NAMES ${name})
136
MARK_AS_ADVANCED(${name}_INCLUDE_DIR ${name}_LIBRARY)
138
INCLUDE(CheckCXXSourceCompiles)
139
SET(CMAKE_REQUIRES_LIBRARIES ${${name}_LIBRARY})
141
IF(${name}_LIBRARY AND ${name}_INCLUDE_DIR)
142
SET(SYSTEM_READLINE_FOUND 1)
143
SET(CMAKE_REQUIRED_LIBRARIES ${${name}_LIBRARY})
144
CHECK_CXX_SOURCE_COMPILES("
146
#include <readline/readline.h>
147
int main(int argc, char **argv)
152
${name}_HAVE_HIST_ENTRY)
154
CHECK_CXX_SOURCE_COMPILES("
156
#include <readline/readline.h>
157
int main(int argc, char **argv)
159
char res= *(*rl_completion_entry_function)(0,0);
160
completion_matches(0,0);
162
${name}_USE_LIBEDIT_INTERFACE)
165
CHECK_CXX_SOURCE_COMPILES("
167
#include <readline/readline.h>
168
int main(int argc, char **argv)
170
rl_completion_func_t *func1= (rl_completion_func_t*)0;
171
rl_compentry_func_t *func2= (rl_compentry_func_t*)0;
173
${name}_USE_NEW_READLINE_INTERFACE)
175
IF(${name}_USE_LIBEDIT_INTERFACE OR ${name}_USE_NEW_READLINE_INTERFACE)
176
SET(READLINE_LIBRARY ${${name}_LIBRARY})
177
SET(READLINE_INCLUDE_DIR ${${name}_INCLUDE_DIR})
178
SET(HAVE_HIST_ENTRY ${${name}_HAVE_HIST_ENTRY})
179
SET(USE_LIBEDIT_INTERFACE ${${name}_USE_LIBEDIT_INTERFACE})
180
SET(USE_NEW_READLINE_INTERFACE ${${name}_USE_NEW_READLINE_INTERFACE})
181
SET(READLINE_FOUND 1)
187
MACRO (MYSQL_CHECK_READLINE)
189
MYSQL_CHECK_MULTIBYTE()
191
SET(WITH_LIBEDIT ON CACHE BOOL "Use bundled libedit")
192
SET(WITH_READLINE OFF CACHE BOOL "Use bundled readline")
194
# Bundled libedit does not compile on cygwin, only readline
195
SET(WITH_READLINE OFF CACHE BOOL "Use bundled readline")
198
# Handle mutual exclusion of WITH_READLINE/WITH_LIBEDIT variables
199
# We save current setting to recognize when user switched between
200
# WITH_READLINE and WITH_LIBEDIT
202
IF(NOT SAVE_READLINE_SETTING OR SAVE_READLINE_SETTING MATCHES
204
SET(WITH_LIBEDIT OFF CACHE BOOL "Use bundled libedit" FORCE)
207
IF(NOT SAVE_READLINE_SETTING OR SAVE_READLINE_SETTING MATCHES
209
SET(WITH_READLINE OFF CACHE BOOL "Use bundled readline" FORCE)
214
MYSQL_USE_BUNDLED_READLINE()
215
SET(SAVE_READLINE_SETTING WITH_READLINE CACHE INTERNAL "" FORCE)
217
MYSQL_USE_BUNDLED_LIBEDIT()
218
SET(SAVE_READLINE_SETTING WITH_LIBEDIT CACHE INTERNAL "" FORCE)
220
MYSQL_FIND_SYSTEM_READLINE(readline)
221
IF(NOT READLINE_FOUND)
222
MYSQL_FIND_SYSTEM_READLINE(edit)
223
IF(NOT READLINE_FOUND)
224
MESSAGE(FATAL_ERROR "Cannot find system readline or libedit libraries.Use WITH_READLINE or WITH_LIBEDIT")