~vadim-tk/percona-server/flushing-algo

« back to all changes in this revision

Viewing changes to cmake/readline.cmake

  • Committer: root
  • Date: 2011-10-29 01:34:40 UTC
  • Revision ID: root@hppro1.office.percona.com-20111029013440-qhnf4jk8kdjcf4e0
Initial import

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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-1301  USA 
 
16
 
 
17
MACRO (MYSQL_CHECK_MULTIBYTE)
 
18
  CHECK_INCLUDE_FILE(wctype.h HAVE_WCTYPE_H)
 
19
  CHECK_INCLUDE_FILE(wchar.h HAVE_WCHAR_H)
 
20
  IF(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)
 
24
    IF(SIZEOF_MBSTATE_T)
 
25
      SET(HAVE_MBSTATE_T 1)
 
26
    ENDIF()
 
27
  ENDIF()
 
28
 
 
29
  CHECK_C_SOURCE_COMPILES("
 
30
  #include <langinfo.h>
 
31
  int main(int ac, char **av)
 
32
  {
 
33
    char *cs = nl_langinfo(CODESET);
 
34
    return 0;
 
35
  }"
 
36
  HAVE_LANGINFO_CODESET)
 
37
  
 
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)
 
52
 
 
53
  SET(CMAKE_EXTRA_INCLUDE_FILES wchar.h)
 
54
  CHECK_TYPE_SIZE(wchar_t SIZEOF_WCHAR_T)
 
55
  IF(SIZEOF_WCHAR_T)
 
56
    SET(HAVE_WCHAR_T 1)
 
57
  ENDIF()
 
58
 
 
59
  SET(CMAKE_EXTRA_INCLUDE_FILES wctype.h)
 
60
  CHECK_TYPE_SIZE(wctype_t SIZEOF_WCTYPE_T)
 
61
  IF(SIZEOF_WCTYPE_T)
 
62
    SET(HAVE_WCTYPE_T 1)
 
63
  ENDIF()
 
64
  CHECK_TYPE_SIZE(wint_t SIZEOF_WINT_T)
 
65
  IF(SIZEOF_WINT_T)
 
66
    SET(HAVE_WINT_T 1)
 
67
  ENDIF()
 
68
  SET(CMAKE_EXTRA_INCLUDE_FILES)
 
69
 
 
70
ENDMACRO()
 
71
 
 
72
MACRO (FIND_CURSES)
 
73
 FIND_PACKAGE(Curses) 
 
74
 MARK_AS_ADVANCED(CURSES_CURSES_H_PATH CURSES_FORM_LIBRARY CURSES_HAVE_CURSES_H)
 
75
 IF(NOT CURSES_FOUND)
 
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.")
 
82
   ENDIF()
 
83
   MESSAGE(FATAL_ERROR ${ERRORMSG})
 
84
 ENDIF()
 
85
 
 
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 "")
 
90
 ENDIF()
 
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)
 
97
 ENDIF()
 
98
 
 
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)
 
107
     ENDIF()
 
108
   ENDIF() 
 
109
 ENDIF()
 
110
ENDMACRO()
 
111
 
 
112
MACRO (MYSQL_USE_BUNDLED_READLINE)
 
113
  SET(USE_NEW_READLINE_INTERFACE 1)
 
114
  SET(HAVE_HIST_ENTRY)
 
115
  SET(USE_LIBEDIT_INTERFACE)
 
116
  SET(READLINE_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/cmd-line-utils)
 
117
  SET(READLINE_LIBRARY readline)
 
118
  FIND_CURSES()
 
119
  ADD_SUBDIRECTORY(${CMAKE_SOURCE_DIR}/cmd-line-utils/readline)
 
120
ENDMACRO()
 
121
 
 
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)
 
127
  FIND_CURSES()
 
128
  ADD_SUBDIRECTORY(${CMAKE_SOURCE_DIR}/cmd-line-utils/libedit)
 
129
ENDMACRO()
 
130
 
 
131
 
 
132
MACRO (MYSQL_FIND_SYSTEM_READLINE name)
 
133
  
 
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)
 
137
 
 
138
  INCLUDE(CheckCXXSourceCompiles)
 
139
  SET(CMAKE_REQUIRES_LIBRARIES ${${name}_LIBRARY})
 
140
 
 
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("
 
145
    #include <stdio.h>
 
146
    #include <readline/readline.h>
 
147
    int main(int argc, char **argv)
 
148
    {
 
149
       HIST_ENTRY entry;
 
150
       return 0;
 
151
    }"
 
152
    ${name}_HAVE_HIST_ENTRY)
 
153
    
 
154
    CHECK_CXX_SOURCE_COMPILES("
 
155
    #include <stdio.h>
 
156
    #include <readline/readline.h>
 
157
    int main(int argc, char **argv)
 
158
    {
 
159
      char res= *(*rl_completion_entry_function)(0,0);
 
160
      completion_matches(0,0);
 
161
    }"
 
162
    ${name}_USE_LIBEDIT_INTERFACE)
 
163
 
 
164
 
 
165
    CHECK_CXX_SOURCE_COMPILES("
 
166
    #include <stdio.h>
 
167
    #include <readline/readline.h>
 
168
    int main(int argc, char **argv)
 
169
    {
 
170
      rl_completion_func_t *func1= (rl_completion_func_t*)0;
 
171
      rl_compentry_func_t *func2= (rl_compentry_func_t*)0;
 
172
    }"
 
173
    ${name}_USE_NEW_READLINE_INTERFACE)
 
174
    
 
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)
 
182
    ENDIF()
 
183
  ENDIF()
 
184
ENDMACRO()
 
185
 
 
186
 
 
187
MACRO (MYSQL_CHECK_READLINE)
 
188
  IF (NOT WIN32)
 
189
    MYSQL_CHECK_MULTIBYTE()
 
190
    IF(NOT CYGWIN)      
 
191
      SET(WITH_LIBEDIT  ON CACHE BOOL  "Use bundled libedit")
 
192
      SET(WITH_READLINE OFF CACHE BOOL "Use bundled readline")
 
193
    ELSE()
 
194
      # Bundled libedit does not compile on cygwin, only readline
 
195
      SET(WITH_READLINE OFF CACHE BOOL "Use bundled readline")
 
196
    ENDIF()
 
197
 
 
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 
 
201
    IF(WITH_READLINE)
 
202
      IF(NOT SAVE_READLINE_SETTING OR SAVE_READLINE_SETTING MATCHES 
 
203
         "WITH_LIBEDIT")
 
204
        SET(WITH_LIBEDIT OFF CACHE BOOL "Use bundled libedit" FORCE)
 
205
      ENDIF()
 
206
    ELSEIF(WITH_LIBEDIT) 
 
207
      IF(NOT SAVE_READLINE_SETTING OR SAVE_READLINE_SETTING MATCHES 
 
208
         "WITH_READLINE")
 
209
        SET(WITH_READLINE OFF CACHE BOOL "Use bundled readline" FORCE)
 
210
      ENDIF()
 
211
    ENDIF()
 
212
 
 
213
    IF(WITH_READLINE)
 
214
     MYSQL_USE_BUNDLED_READLINE()
 
215
     SET(SAVE_READLINE_SETTING WITH_READLINE CACHE INTERNAL "" FORCE)
 
216
    ELSEIF(WITH_LIBEDIT)
 
217
     MYSQL_USE_BUNDLED_LIBEDIT()
 
218
     SET(SAVE_READLINE_SETTING WITH_LIBEDIT CACHE INTERNAL "" FORCE)
 
219
    ELSE()
 
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")
 
225
        ENDIF()
 
226
      ENDIF()
 
227
    ENDIF()
 
228
  ENDIF(NOT WIN32)
 
229
ENDMACRO()
 
230