1# Copyright (c) 2009, 2010 Sun Microsystems, Inc. 2# Use is subject to license terms. 3# 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. 7# 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. 12# 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-1335 USA 16 17INCLUDE(CheckCXXSourceCompiles) 18 19MACRO (MYSQL_CHECK_MULTIBYTE) 20 CHECK_INCLUDE_FILE(wctype.h HAVE_WCTYPE_H) 21 CHECK_INCLUDE_FILE(wchar.h HAVE_WCHAR_H) 22 IF(HAVE_WCHAR_H) 23 SET(CMAKE_EXTRA_INCLUDE_FILES wchar.h) 24 CHECK_TYPE_SIZE(mbstate_t SIZEOF_MBSTATE_T) 25 SET(CMAKE_EXTRA_INCLUDE_FILES) 26 IF(SIZEOF_MBSTATE_T) 27 SET(HAVE_MBSTATE_T 1) 28 ENDIF() 29 ENDIF() 30 31 CHECK_FUNCTION_EXISTS(mbrlen HAVE_MBRLEN) 32 CHECK_FUNCTION_EXISTS(mbsrtowcs HAVE_MBSRTOWCS) 33 CHECK_FUNCTION_EXISTS(mbrtowc HAVE_MBRTOWC) 34 CHECK_FUNCTION_EXISTS(wcwidth HAVE_WCWIDTH) 35 CHECK_FUNCTION_EXISTS(iswlower HAVE_ISWLOWER) 36 CHECK_FUNCTION_EXISTS(iswupper HAVE_ISWUPPER) 37 CHECK_FUNCTION_EXISTS(towlower HAVE_TOWLOWER) 38 CHECK_FUNCTION_EXISTS(towupper HAVE_TOWUPPER) 39 CHECK_FUNCTION_EXISTS(iswctype HAVE_ISWCTYPE) 40 41 SET(CMAKE_EXTRA_INCLUDE_FILES wchar.h) 42 CHECK_TYPE_SIZE(wchar_t SIZEOF_WCHAR_T) 43 IF(SIZEOF_WCHAR_T) 44 SET(HAVE_WCHAR_T 1) 45 ENDIF() 46 47 SET(CMAKE_EXTRA_INCLUDE_FILES wctype.h) 48 CHECK_TYPE_SIZE(wctype_t SIZEOF_WCTYPE_T) 49 CHECK_TYPE_SIZE(wint_t SIZEOF_WINT_T) 50 SET(CMAKE_EXTRA_INCLUDE_FILES) 51 52ENDMACRO() 53 54MACRO (FIND_CURSES) 55 FIND_PACKAGE(Curses REQUIRED) 56 MARK_AS_ADVANCED(CURSES_CURSES_H_PATH CURSES_FORM_LIBRARY CURSES_HAVE_CURSES_H) 57 IF(NOT CURSES_FOUND) 58 SET(ERRORMSG "Curses library not found. Please install appropriate package, 59 remove CMakeCache.txt and rerun cmake.") 60 IF(CMAKE_SYSTEM_NAME MATCHES "Linux") 61 SET(ERRORMSG ${ERRORMSG} 62 "On Debian/Ubuntu, package name is libncurses5-dev, on Redhat and derivates " 63 "it is ncurses-devel.") 64 ENDIF() 65 MESSAGE(FATAL_ERROR ${ERRORMSG}) 66 ENDIF() 67 68 IF(CURSES_HAVE_CURSES_H) 69 SET(HAVE_CURSES_H 1 CACHE INTERNAL "") 70 ENDIF() 71 IF(CMAKE_SYSTEM_NAME MATCHES "HP") 72 # CMake uses full path to library /lib/libcurses.sl 73 # On Itanium, it results into architecture mismatch+ 74 # the library is for PA-RISC 75 SET(CURSES_LIBRARY "curses" CACHE INTERNAL "" FORCE) 76 ENDIF() 77 78 IF(CMAKE_SYSTEM_NAME MATCHES "Linux") 79 # -Wl,--as-needed breaks linking with -lcurses, e.g on Fedora 80 # Lower-level libcurses calls are exposed by libtinfo 81 CHECK_LIBRARY_EXISTS(${CURSES_LIBRARY} tputs "" HAVE_TPUTS_IN_CURSES) 82 IF(NOT HAVE_TPUTS_IN_CURSES) 83 CHECK_LIBRARY_EXISTS(tinfo tputs "" HAVE_TPUTS_IN_TINFO) 84 IF(HAVE_TPUTS_IN_TINFO) 85 SET(CURSES_LIBRARY tinfo) 86 ENDIF() 87 ENDIF() 88 ENDIF() 89 CHECK_LIBRARY_EXISTS(${CURSES_LIBRARY} setupterm "" HAVE_SETUPTERM) 90 CHECK_LIBRARY_EXISTS(${CURSES_LIBRARY} vidattr "" HAVE_VIDATTR) 91ENDMACRO() 92 93MACRO (MYSQL_USE_BUNDLED_READLINE) 94 SET(USE_NEW_READLINE_INTERFACE 1) 95 SET(HAVE_HIST_ENTRY 0 CACHE INTERNAL "" FORCE) 96 SET(MY_READLINE_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/extra/readline) 97 SET(MY_READLINE_LIBRARY readline) 98 ADD_SUBDIRECTORY(${CMAKE_SOURCE_DIR}/extra/readline) 99ENDMACRO() 100 101MACRO (MYSQL_FIND_SYSTEM_READLINE) 102 103 FIND_PATH(READLINE_INCLUDE_DIR readline.h PATH_SUFFIXES readline) 104 FIND_LIBRARY(READLINE_LIBRARY NAMES readline) 105 MARK_AS_ADVANCED(READLINE_INCLUDE_DIR READLINE_LIBRARY) 106 107 IF(READLINE_LIBRARY AND READLINE_INCLUDE_DIR) 108 SET(CMAKE_REQUIRED_LIBRARIES ${READLINE_LIBRARY} ${CURSES_LIBRARY}) 109 SET(CMAKE_REQUIRED_INCLUDES ${READLINE_INCLUDE_DIR}) 110 CHECK_CXX_SOURCE_COMPILES(" 111 #include <stdio.h> 112 #include <readline.h> 113 int main(int argc, char **argv) 114 { 115 rl_completion_func_t *func1= (rl_completion_func_t*)0; 116 rl_compentry_func_t *func2= (rl_compentry_func_t*)0; 117 }" 118 NEW_READLINE_INTERFACE) 119 120 CHECK_C_SOURCE_COMPILES(" 121 #include <stdio.h> 122 #include <readline.h> 123 #if RL_VERSION_MAJOR > 5 124 #error 125 #endif 126 int main(int argc, char **argv) 127 { 128 return 0; 129 }" 130 READLINE_V5) 131 132 IF(NEW_READLINE_INTERFACE) 133 IF (READLINE_V5) 134 SET(USE_NEW_READLINE_INTERFACE 1) 135 ELSE() 136 IF(NOT_FOR_DISTRIBUTION) 137 SET(NON_DISTRIBUTABLE_WARNING "GPLv3" CACHE INTERNAL "") 138 SET(USE_NEW_READLINE_INTERFACE 1) 139 ELSE() 140 SET(USE_NEW_READLINE_INTERFACE 0) 141 ENDIF(NOT_FOR_DISTRIBUTION) 142 ENDIF(READLINE_V5) 143 ENDIF(NEW_READLINE_INTERFACE) 144 ENDIF() 145ENDMACRO() 146 147MACRO (MYSQL_FIND_SYSTEM_LIBEDIT) 148 FIND_PATH(LIBEDIT_INCLUDE_DIR readline.h PATH_SUFFIXES editline edit/readline) 149 FIND_LIBRARY(LIBEDIT_LIBRARY edit) 150 MARK_AS_ADVANCED(LIBEDIT_INCLUDE_DIR LIBEDIT_LIBRARY) 151 152 IF(LIBEDIT_LIBRARY AND LIBEDIT_INCLUDE_DIR) 153 SET(CMAKE_REQUIRED_LIBRARIES ${LIBEDIT_LIBRARY}) 154 SET(CMAKE_REQUIRED_INCLUDES ${LIBEDIT_INCLUDE_DIR}) 155 CHECK_CXX_SOURCE_COMPILES(" 156 #include <stdio.h> 157 #include <readline.h> 158 int main(int argc, char **argv) 159 { 160 int res= (*rl_completion_entry_function)(0,0); 161 completion_matches(0,0); 162 }" 163 LIBEDIT_HAVE_COMPLETION_INT) 164 165 CHECK_CXX_SOURCE_COMPILES(" 166 #include <stdio.h> 167 #include <readline.h> 168 int main(int argc, char **argv) 169 { 170 char res= *(*rl_completion_entry_function)(0,0); 171 completion_matches(0,0); 172 }" 173 LIBEDIT_HAVE_COMPLETION_CHAR) 174 IF(LIBEDIT_HAVE_COMPLETION_INT OR LIBEDIT_HAVE_COMPLETION_CHAR) 175 SET(USE_LIBEDIT_INTERFACE 1) 176 ENDIF() 177 ENDIF() 178ENDMACRO() 179 180 181MACRO (MYSQL_CHECK_READLINE) 182 IF (NOT WIN32) 183 MYSQL_CHECK_MULTIBYTE() 184 SET(WITH_READLINE OFF CACHE BOOL "Use bundled readline") 185 FIND_CURSES() 186 187 IF(WITH_READLINE) 188 MYSQL_USE_BUNDLED_READLINE() 189 ELSE() 190 # OSX includes incompatible readline lib 191 IF (NOT APPLE) 192 MYSQL_FIND_SYSTEM_READLINE() 193 ENDIF() 194 IF(USE_NEW_READLINE_INTERFACE) 195 SET(MY_READLINE_INCLUDE_DIR ${READLINE_INCLUDE_DIR}) 196 SET(MY_READLINE_LIBRARY ${READLINE_LIBRARY} ${CURSES_LIBRARY}) 197 ELSE() 198 MYSQL_FIND_SYSTEM_LIBEDIT() 199 IF(USE_LIBEDIT_INTERFACE) 200 SET(MY_READLINE_INCLUDE_DIR ${LIBEDIT_INCLUDE_DIR}) 201 SET(MY_READLINE_LIBRARY ${LIBEDIT_LIBRARY} ${CURSES_LIBRARY}) 202 SET(USE_NEW_READLINE_INTERFACE ${LIBEDIT_HAVE_COMPLETION_CHAR}) 203 ELSE() 204 MYSQL_USE_BUNDLED_READLINE() 205 ENDIF() 206 ENDIF() 207 ENDIF() 208 209 SET(CMAKE_REQUIRED_LIBRARIES ${MY_READLINE_LIBRARY}) 210 SET(CMAKE_REQUIRED_INCLUDES ${MY_READLINE_INCLUDE_DIR}) 211 CHECK_CXX_SOURCE_COMPILES(" 212 #include <stdio.h> 213 #include <readline.h> 214 int main(int argc, char **argv) 215 { 216 HIST_ENTRY entry; 217 return 0; 218 }" 219 HAVE_HIST_ENTRY) 220 SET(CMAKE_REQUIRED_LIBRARIES) 221 SET(CMAKE_REQUIRED_INCLUDES) 222 ENDIF(NOT WIN32) 223 CHECK_INCLUDE_FILES ("curses.h;term.h" HAVE_TERM_H) 224ENDMACRO() 225 226