~ubuntu-branches/ubuntu/wily/mysql-5.6/wily

1.2.2 by James Page
Import upstream version 5.6.17
1
# Copyright (c) 2006, 2014, Oracle and/or its affiliates. All rights reserved.
1 by James Page
Import upstream version 5.6.15
2
# 
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; version 2 of the License.
6
# 
7
# This program is distributed in the hope that it will be useful,
8
# but WITHOUT ANY WARRANTY; without even the implied warranty of
9
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10
# GNU General Public License for more details.
11
# 
12
# You should have received a copy of the GNU General Public License
13
# along with this program; if not, write to the Free Software
14
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
15
16
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
17
# Avoid warnings in higher versions
18
if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" GREATER 2.6)
19
 CMAKE_POLICY(VERSION 2.8)
20
endif()
21
1.2.3 by James Page
Import upstream version 5.6.19
22
# We use PROPERTIES LINK_INTERFACE_LIBRARIES. See cmake --help-policy CMP0022
23
IF(CMAKE_VERSION VERSION_EQUAL "2.8.12" OR
24
   CMAKE_VERSION VERSION_GREATER "2.8.12")
25
 CMAKE_POLICY(SET CMP0022 OLD)
26
ENDIF()
27
1.2.4 by Robie Basak
Import upstream version 5.6.23
28
# We use the LOCATION target property (CMP0026)
29
# and get_target_property() for non-existent targets (CMP0045)
30
# and INSTALL_NAME_DIR (CMP0042)
31
IF(CMAKE_VERSION VERSION_EQUAL "3.0.0" OR
32
   CMAKE_VERSION VERSION_GREATER "3.0.0")
33
 CMAKE_POLICY(SET CMP0026 OLD)
34
 CMAKE_POLICY(SET CMP0045 OLD)
35
 CMAKE_POLICY(SET CMP0042 OLD)
36
ENDIF()
37
1 by James Page
Import upstream version 5.6.15
38
MESSAGE(STATUS "Running cmake version ${CMAKE_VERSION}")
39
1.2.4 by Robie Basak
Import upstream version 5.6.23
40
# Will set GIT_EXECUTABLE and GIT_FOUND
41
FIND_PACKAGE(Git)
42
1 by James Page
Import upstream version 5.6.15
43
SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake)
44
45
# First, decide about build type (debug or release)
46
# If custom compiler flags are set or cmake is invoked with -DCMAKE_BUILD_TYPE, 
47
# respect user wishes and do not (re)define CMAKE_BUILD_TYPE. If WITH_DEBUG{_FULL} 
48
# is given, set CMAKE_BUILD_TYPE = Debug. Otherwise, use Relwithdebinfo.
49
50
51
IF(DEFINED CMAKE_BUILD_TYPE)
52
  SET(HAVE_CMAKE_BUILD_TYPE TRUE)
53
ENDIF()
54
SET(CUSTOM_C_FLAGS $ENV{CFLAGS})
55
56
OPTION(WITH_DEBUG "Use dbug/safemutex" OFF)
57
58
# Distinguish between community and non-community builds, with the
59
# default being a community build. This does not impact the feature
60
# set that will be compiled in; it's merely provided as a hint to
61
# custom packaging steps.
62
OPTION(COMMUNITY_BUILD "Set to true if this is a community build" ON) 
63
64
# Use a default manufacturer if no manufacturer was identified.
65
SET(MANUFACTURER_DOCSTRING
66
  "Set the entity that appears as the manufacturer of packages that support a manufacturer field.")
67
IF(NOT DEFINED MANUFACTURER) 
68
  SET(MANUFACTURER "Built from Source" CACHE  STRING ${MANUFACTURER_DOCSTRING})
69
  MARK_AS_ADVANCED(MANUFACTURER)
70
ENDIF()
71
72
# We choose to provide WITH_DEBUG as alias to standard CMAKE_BUILD_TYPE=Debug
73
# which turns out to be not trivial, as this involves synchronization 
74
# between CMAKE_BUILD_TYPE and WITH_DEBUG. Besides, we have to deal with cases
75
# where WITH_DEBUG is  reset from ON to OFF  and here we need to reset 
76
# CMAKE_BUILD_TYPE to either none or default RelWithDebInfo
77
78
SET(BUILDTYPE_DOCSTRING
79
 "Choose the type of build, options are: None(CMAKE_CXX_FLAGS or
80
 CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel")
81
82
IF(WITH_DEBUG)
83
  SET(CMAKE_BUILD_TYPE "Debug" CACHE STRING ${BUILDTYPE_DOCSTRING} FORCE)
84
  IF(UNIX AND NOT APPLE)
85
    # Compiling with PIC speeds up embedded build, on PIC sensitive systems 
86
    # Predefine it to ON, in case user chooses to build embedded. 
87
    SET(WITH_PIC ON CACHE BOOL "Compile with PIC")
88
  ENDIF()
89
  SET(OLD_WITH_DEBUG 1 CACHE INTERNAL "" FORCE)
90
ELSEIF(NOT HAVE_CMAKE_BUILD_TYPE OR OLD_WITH_DEBUG)
91
  IF(CUSTOM_C_FLAGS)
92
    SET(CMAKE_BUILD_TYPE "" CACHE STRING ${BUILDTYPE_DOCSTRING} FORCE)
93
  ELSE(CMAKE_BUILD_TYPE MATCHES "Debug" OR NOT HAVE_CMAKE_BUILD_TYPE)
94
    SET(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING 
95
       ${BUILDTYPE_DOCSTRING} FORCE)
96
  ENDIF()
97
  SET(OLD_WITH_DEBUG 0 CACHE INTERNAL "" FORCE)
98
ENDIF()
99
100
# Optionally set project name, e.g.
101
# foo.xcodeproj (mac) or foo.sln (windows)
102
SET(MYSQL_PROJECT_NAME_DOCSTRING "MySQL project name")
103
IF(DEFINED MYSQL_PROJECT_NAME)
104
  SET(MYSQL_PROJECT_NAME ${MYSQL_PROJECT_NAME} CACHE STRING
105
      ${MYSQL_PROJECT_NAME_DOCSTRING} FORCE)
106
ELSE()
107
  SET(MYSQL_PROJECT_NAME "MySQL" CACHE STRING
108
      ${MYSQL_PROJECT_NAME_DOCSTRING} FORCE)
109
  MARK_AS_ADVANCED(MYSQL_PROJECT_NAME)
110
ENDIF()
111
PROJECT(${MYSQL_PROJECT_NAME})
112
1.2.4 by Robie Basak
Import upstream version 5.6.23
113
# Maintainer mode is default on only for Linux debug builds using GCC/G++
114
IF(CMAKE_BUILD_TYPE MATCHES "Debug" OR WITH_DEBUG)
115
  IF(CMAKE_SYSTEM_NAME MATCHES "Linux" AND
116
     CMAKE_COMPILER_IS_GNUCC AND CMAKE_COMPILER_IS_GNUCXX)
117
    SET(MYSQL_MAINTAINER_MODE ON CACHE BOOL
118
        "MySQL maintainer-specific development environment")
119
  ENDIF()
120
ENDIF()
121
1 by James Page
Import upstream version 5.6.15
122
OPTION(WITH_DEFAULT_COMPILER_OPTIONS
123
  "Use flags from cmake/build_configurations/compiler_options.cmake"
124
  ON)
125
OPTION(WITH_DEFAULT_FEATURE_SET
126
  "Use feature set in cmake/build_configurations/feature_set.cmake"
127
  ON)
128
IF(BUILD_CONFIG)
129
  INCLUDE(
130
  ${CMAKE_SOURCE_DIR}/cmake/build_configurations/${BUILD_CONFIG}.cmake)
131
ENDIF()
132
133
#cmake on 64bit windows/mac/solaris doesn't set CMAKE_SYSTEM_PROCESSOR correctly
134
SET(MYSQL_MACHINE_TYPE ${CMAKE_SYSTEM_PROCESSOR})
135
136
137
# Include the platform-specific file. To allow exceptions, this code
138
# looks for files in order of how specific they are. If there is, for
139
# example, a generic Linux.cmake and a version-specific
140
# Linux-2.6.28-11-generic, it will pick Linux-2.6.28-11-generic and
141
# include it. It is then up to the file writer to include the generic
142
# version if necessary.
143
FOREACH(_base
144
    ${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_VERSION}-${CMAKE_SYSTEM_PROCESSOR}
145
    ${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_VERSION}
146
    ${CMAKE_SYSTEM_NAME})
147
  SET(_file ${CMAKE_SOURCE_DIR}/cmake/os/${_base}.cmake)
148
  IF(EXISTS ${_file})
149
    INCLUDE(${_file})
150
    BREAK()
151
  ENDIF()
152
ENDFOREACH()
153
154
155
IF(UNIX)
156
  OPTION(WITH_INNODB_MEMCACHED "" OFF)
157
  OPTION(ENABLE_MEMCACHED_SASL "Enable SASL on InnoDB Memcached" OFF)
158
  OPTION(ENABLE_MEMCACHED_SASL_PWDB "Enable SASL on InnoDB Memcached" OFF)
159
ELSE()
160
  OPTION(WITH_INNODB_MEMCACHED "" OFF)
161
ENDIF()
162
 
163
# Following autotools tradition, add preprocessor definitions
164
# specified in environment variable CPPFLAGS
165
IF(DEFINED ENV{CPPFLAGS})
166
  ADD_DEFINITIONS($ENV{CPPFLAGS})
167
ENDIF()
168
169
INCLUDE(CheckTypeSize)
170
CHECK_TYPE_SIZE("void *" SIZEOF_VOIDP)
171
IF(WITH_DEFAULT_COMPILER_OPTIONS)
172
  INCLUDE(${CMAKE_SOURCE_DIR}/cmake/build_configurations/compiler_options.cmake)
173
ENDIF()
174
IF(WITH_DEFAULT_FEATURE_SET)
175
  INCLUDE(${CMAKE_SOURCE_DIR}/cmake/build_configurations/feature_set.cmake)
176
ENDIF()
177
178
# Add macros
179
INCLUDE(character_sets)
180
INCLUDE(cpu_info)
181
INCLUDE(zlib)
182
INCLUDE(libevent)
183
INCLUDE(ssl)
184
INCLUDE(readline)
185
INCLUDE(mysql_version)
186
INCLUDE(libutils)
187
INCLUDE(dtrace)
188
INCLUDE(plugin)
189
INCLUDE(install_macros)
190
INCLUDE(install_layout)
191
INCLUDE(mysql_add_executable)
192
193
# Handle options
194
OPTION(DISABLE_SHARED 
195
 "Don't build shared libraries, compile code as position-dependent" OFF)
196
IF(DISABLE_SHARED)
197
  SET(WITHOUT_DYNAMIC_PLUGINS 1)
198
ENDIF()
199
OPTION(ENABLED_PROFILING "Enable profiling" ON)
200
OPTION(CYBOZU "" OFF)
201
OPTION(BACKUP_TEST "" OFF)
202
OPTION(WITHOUT_SERVER OFF)
203
IF(UNIX)
204
  OPTION(WITH_VALGRIND "Valgrind instrumentation" OFF)
205
ENDIF()
1.2.4 by Robie Basak
Import upstream version 5.6.23
206
IF(NOT WITHOUT_SERVER)
207
  OPTION (WITH_UNIT_TESTS "Compile MySQL with unit tests" ON)
208
ENDIF()
1 by James Page
Import upstream version 5.6.15
209
MARK_AS_ADVANCED(CYBOZU BACKUP_TEST WITHOUT_SERVER DISABLE_SHARED)
210
211
212
include(CheckCSourceCompiles)
213
include(CheckCXXSourceCompiles)
214
# We need some extra FAIL_REGEX patterns
215
# Note that CHECK_C_SOURCE_COMPILES is a misnomer, it will also link.
216
MACRO (MY_CHECK_C_COMPILER_FLAG FLAG RESULT)
217
  SET(SAVE_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}")
218
  SET(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${FLAG}")
219
  CHECK_C_SOURCE_COMPILES("int main(void) { return 0; }" ${RESULT}
220
    FAIL_REGEX "argument unused during compilation"
221
    FAIL_REGEX "unsupported .*option"
222
    FAIL_REGEX "unknown .*option"
223
    FAIL_REGEX "unrecognized .*option"
224
    FAIL_REGEX "ignoring unknown option"
225
    FAIL_REGEX "[Ww]arning: [Oo]ption"
226
    )
227
  SET(CMAKE_REQUIRED_FLAGS "${SAVE_CMAKE_REQUIRED_FLAGS}")
228
ENDMACRO()
229
230
MACRO (MY_CHECK_CXX_COMPILER_FLAG FLAG RESULT)
231
  SET(SAVE_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}")
232
  SET(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${FLAG}")
233
  CHECK_CXX_SOURCE_COMPILES("int main(void) { return 0; }" ${RESULT}
234
    FAIL_REGEX "argument unused during compilation"
235
    FAIL_REGEX "unsupported .*option"
236
    FAIL_REGEX "unknown .*option"
237
    FAIL_REGEX "unrecognized .*option"
238
    FAIL_REGEX "ignoring unknown option"
239
    FAIL_REGEX "[Ww]arning: [Oo]ption"
240
    )
241
  SET(CMAKE_REQUIRED_FLAGS "${SAVE_CMAKE_REQUIRED_FLAGS}")
242
ENDMACRO()
243
244
OPTION(WITH_ASAN "Enable address sanitizer" OFF)
245
IF (WITH_ASAN)
246
  # gcc 4.8.1 and new versions of clang
247
  MY_CHECK_C_COMPILER_FLAG("-fsanitize=address" HAVE_C_FSANITIZE)
248
  MY_CHECK_CXX_COMPILER_FLAG("-fsanitize=address" HAVE_CXX_FSANITIZE)
249
250
  IF(HAVE_C_FSANITIZE AND HAVE_CXX_FSANITIZE)
251
    # We switch on basic optimization also for debug builds.
252
    # With optimization we may get some warnings, so we switch off -Werror
253
    SET(CMAKE_C_FLAGS_DEBUG
254
      "${CMAKE_C_FLAGS_DEBUG} -fsanitize=address -O1 -Wno-error -fPIC")
255
    SET(CMAKE_C_FLAGS_RELWITHDEBINFO
256
      "${CMAKE_C_FLAGS_RELWITHDEBINFO} -fsanitize=address -fPIC")
257
    SET(CMAKE_CXX_FLAGS_DEBUG
258
      "${CMAKE_CXX_FLAGS_DEBUG} -fsanitize=address -O1 -Wno-error -fPIC")
259
    SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO
260
      "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -fsanitize=address -fPIC")
261
    SET(WITH_ASAN_OK 1)
262
  ELSE()
263
    # older versions of clang
264
    MY_CHECK_C_COMPILER_FLAG("-faddress-sanitizer" HAVE_C_FADDRESS)
265
    MY_CHECK_CXX_COMPILER_FLAG("-faddress-sanitizer" HAVE_CXX_FFADDRESS)
266
267
    IF(HAVE_C_FADDRESS AND HAVE_CXX_FFADDRESS)
268
      # We switch on basic optimization also for debug builds.
269
      SET(CMAKE_C_FLAGS_DEBUG
270
        "${CMAKE_C_FLAGS_DEBUG} -faddress-sanitizer -O1 -fPIC")
271
      SET(CMAKE_C_FLAGS_RELWITHDEBINFO
272
        "${CMAKE_C_FLAGS_RELWITHDEBINFO} -faddress-sanitizer -fPIC")
273
      SET(CMAKE_CXX_FLAGS_DEBUG
274
        "${CMAKE_CXX_FLAGS_DEBUG} -faddress-sanitizer -O1 -fPIC")
275
      SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO
276
        "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -faddress-sanitizer -fPIC")
277
      SET(WITH_ASAN_OK 1)
278
    ENDIF()
279
  ENDIF()
280
281
  IF(NOT WITH_ASAN_OK)
282
    MESSAGE(FATAL_ERROR "Do not know how to enable address sanitizer")
283
  ENDIF()
284
ENDIF()
285
286
287
OPTION(ENABLE_DEBUG_SYNC "Enable debug sync (debug builds only)" ON) 
288
IF(ENABLE_DEBUG_SYNC) 
289
  SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DENABLED_DEBUG_SYNC") 
290
  SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DENABLED_DEBUG_SYNC") 
291
ENDIF() 
292
 
293
# Older versions of ccache must be disabled: export CCACHE_DISABLE=1
294
# See http://www.cmake.org/Wiki/CTest/Coverage
295
OPTION(ENABLE_GCOV "Enable gcov (debug, Linux builds only)" OFF)
296
IF (ENABLE_GCOV AND NOT WIN32 AND NOT APPLE)
297
  SET(CMAKE_CXX_FLAGS_DEBUG
298
    "${CMAKE_CXX_FLAGS_DEBUG} -fprofile-arcs -ftest-coverage -DHAVE_GCOV")
299
  SET(CMAKE_C_FLAGS_DEBUG
300
    "${CMAKE_C_FLAGS_DEBUG} -fprofile-arcs -ftest-coverage -DHAVE_GCOV")
301
  SET(CMAKE_EXE_LINKER_FLAGS_DEBUG
302
    "${CMAKE_EXE_LINKER_FLAGS_DEBUG} -fprofile-arcs -ftest-coverage -lgcov")
303
ENDIF()
304
305
OPTION(ENABLE_GPROF "Enable gprof (optimized, Linux builds only)" OFF)
306
IF (ENABLE_GPROF AND NOT WIN32 AND NOT APPLE)
307
  SET(CMAKE_C_FLAGS_RELWITHDEBINFO
308
    "${CMAKE_C_FLAGS_RELWITHDEBINFO} -pg")
309
  SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO
310
    "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -pg")
311
  SET(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO
312
    "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} -pg")
313
ENDIF()
314
315
OPTION(ENABLED_LOCAL_INFILE
316
 "If we should should enable LOAD DATA LOCAL by default" ${IF_WIN})
317
MARK_AS_ADVANCED(ENABLED_LOCAL_INFILE)
318
319
OPTION(WITH_FAST_MUTEXES "Compile with fast mutexes" OFF)
320
MARK_AS_ADVANCED(WITH_FAST_MUTEXES)
321
322
OPTION(OPTIMIZER_TRACE "Support tracing of Optimizer" ON)
323
324
OPTION(INNODB_COMPILER_HINTS "Compile InnoDB with compiler hints" ON)
325
MARK_AS_ADVANCED(INNODB_COMPILER_HINTS)
326
1.2.1 by James Page
Import upstream version 5.6.16
327
OPTION(INNODB_PAGE_ATOMIC_REF_COUNT "Use atomics for the page reference count"
328
       ON)
329
MARK_AS_ADVANCED(INNODB_PAGE_ATOMIC_REF_COUNT)
330
1 by James Page
Import upstream version 5.6.15
331
# Set DBUG_OFF and other optional release-only flags for non-debug project types
332
FOREACH(BUILD_TYPE RELEASE RELWITHDEBINFO MINSIZEREL)
333
  FOREACH(LANG C CXX)
334
    SET(CMAKE_${LANG}_FLAGS_${BUILD_TYPE} 
335
     "${CMAKE_${LANG}_FLAGS_${BUILD_TYPE}} -DDBUG_OFF")
336
    IF(WITH_FAST_MUTEXES)
337
      SET(CMAKE_${LANG}_FLAGS_${BUILD_TYPE} 
338
        "${CMAKE_${LANG}_FLAGS_${BUILD_TYPE}} -DMY_PTHREAD_FASTMUTEX=1")
339
    ENDIF()
340
  ENDFOREACH()
341
ENDFOREACH()
342
343
IF(NOT CMAKE_BUILD_TYPE
344
    AND NOT CMAKE_GENERATOR MATCHES "Visual Studio" 
345
    AND NOT CMAKE_GENERATOR MATCHES "Xcode") 
346
    # This is the case of no CMAKE_BUILD_TYPE choosen, typical for VS and Xcode
347
    # or if custom C flags are set. In VS and Xcode for non-Debug configurations 
348
    # DBUG_OFF is already correctly set. Use DBUG_OFF for Makefile based projects 
349
    # without build type too, unless user specifically requests DBUG. 
350
    IF(NOT CMAKE_C_FLAGS MATCHES "-DDBUG_ON")
351
      ADD_DEFINITIONS(-DDBUG_OFF)
352
    ENDIF()
353
ENDIF()
354
355
# Add safemutex for debug configurations, except on Windows
356
# (safemutex has never worked on Windows)
357
IF(WITH_DEBUG AND NOT WIN32 AND NOT WITH_INNODB_MEMCACHED)
358
  FOREACH(LANG C CXX)
359
      SET(CMAKE_${LANG}_FLAGS_DEBUG
360
          "${CMAKE_${LANG}_FLAGS_DEBUG} -DSAFE_MUTEX")
361
  ENDFOREACH()
362
ENDIF()
363
364
365
# Set commonly used variables
366
IF(WIN32)
367
  SET(DEFAULT_MYSQL_HOME "C:/Program Files/MySQL/MySQL Server ${MYSQL_BASE_VERSION}" )
368
  SET(SHAREDIR share)
369
ELSE()
370
  SET(DEFAULT_MYSQL_HOME ${CMAKE_INSTALL_PREFIX})
371
  SET(SHAREDIR ${DEFAULT_MYSQL_HOME}/${INSTALL_MYSQLSHAREDIR})
372
ENDIF()
373
374
SET(DEFAULT_BASEDIR "${DEFAULT_MYSQL_HOME}")
375
IF(INSTALL_MYSQLDATADIR MATCHES "^/.*")
376
  SET(MYSQL_DATADIR ${INSTALL_MYSQLDATADIR} CACHE PATH "default MySQL data directory")
377
ELSE()
378
  SET(MYSQL_DATADIR "${DEFAULT_MYSQL_HOME}/${INSTALL_MYSQLDATADIR}" CACHE PATH "default MySQL data directory")
379
ENDIF()
380
SET(DEFAULT_CHARSET_HOME "${DEFAULT_MYSQL_HOME}")
381
SET(PLUGINDIR "${DEFAULT_MYSQL_HOME}/${INSTALL_PLUGINDIR}")
382
IF(SYSCONFDIR)
383
  SET(DEFAULT_SYSCONFDIR "${SYSCONFDIR}")
384
ENDIF()
385
1.2.2 by James Page
Import upstream version 5.6.17
386
SET(TMPDIR "P_tmpdir"
387
  CACHE PATH
388
  "PATH to MySQL TMP dir. Defaults to the P_tmpdir macro in <stdio.h>")
389
IF(TMPDIR STREQUAL "P_tmpdir")
390
  # Do not quote it, to refer to the P_tmpdir macro.
391
  SET(DEFAULT_TMPDIR "P_tmpdir")
392
ELSE()
1.2.1 by James Page
Import upstream version 5.6.16
393
  # Quote it, to make it a const char string.
394
  SET(DEFAULT_TMPDIR "\"${TMPDIR}\"")
395
ENDIF()
1 by James Page
Import upstream version 5.6.15
396
397
# Run platform tests
398
INCLUDE(configure.cmake)
399
400
# Common defines and includes
401
ADD_DEFINITIONS(-DHAVE_CONFIG_H)
402
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/include)
403
404
# Add bundled or system zlib.
405
MYSQL_CHECK_ZLIB_WITH_COMPRESS()
406
# Add bundled yassl/taocrypt or system openssl.
407
MYSQL_CHECK_SSL()
408
# Add system/bundled editline.
409
MYSQL_CHECK_EDITLINE()
410
# Add libevent
411
MYSQL_CHECK_LIBEVENT()
412
413
#
414
# Setup maintainer mode options by the end. Platform checks are
415
# not run with the warning options as to not perturb fragile checks
416
# (i.e. do not make warnings into errors).
417
#
418
# Why doesn't these flags affect the entire build?
419
# Because things may already have been included with ADD_SUBDIRECTORY
420
#
1.2.4 by Robie Basak
Import upstream version 5.6.23
421
OPTION(MYSQL_MAINTAINER_MODE
422
       "MySQL maintainer-specific development environment" OFF)
1 by James Page
Import upstream version 5.6.15
423
1.2.4 by Robie Basak
Import upstream version 5.6.23
424
INCLUDE(maintainer)
1 by James Page
Import upstream version 5.6.15
425
426
IF(WITH_UNIT_TESTS)
427
 ENABLE_TESTING()
428
ENDIF()
429
430
IF(NOT WITHOUT_SERVER)
1.2.4 by Robie Basak
Import upstream version 5.6.23
431
  SET (MYSQLD_STATIC_PLUGIN_LIBS "" CACHE INTERNAL "")
432
  # Add storage engines and plugins.
433
  CONFIGURE_PLUGINS()
434
ELSE()
435
  # We may still want Cluster client libraries, use -DWITH_NDBCLUSTER=1
436
  ADD_SUBDIRECTORY(storage/ndb)
1 by James Page
Import upstream version 5.6.15
437
ENDIF()
438
439
ADD_SUBDIRECTORY(include)
440
ADD_SUBDIRECTORY(dbug)
441
ADD_SUBDIRECTORY(strings)
442
ADD_SUBDIRECTORY(vio)
443
ADD_SUBDIRECTORY(regex)
444
ADD_SUBDIRECTORY(mysys)
445
ADD_SUBDIRECTORY(mysys_ssl)
446
ADD_SUBDIRECTORY(libmysql)
447
448
IF(WITH_UNIT_TESTS)
449
  ADD_SUBDIRECTORY(unittest)
450
  ADD_SUBDIRECTORY(unittest/examples)
451
  ADD_SUBDIRECTORY(unittest/mytap)
452
  ADD_SUBDIRECTORY(unittest/mytap/t)
453
  # Visual Studio 11 needs this extra flag in order to compile gmock.
454
  IF(WIN32)
455
    ADD_DEFINITIONS( /D _VARIADIC_MAX=10 )
456
  ENDIF()
1.2.3 by James Page
Import upstream version 5.6.19
457
  # libc++ doesn't have tuple in tr1
458
  IF(HAVE_LLVM_LIBCPP)
459
    ADD_DEFINITIONS(-DGTEST_USE_OWN_TR1_TUPLE=1)
460
  ENDIF()
1 by James Page
Import upstream version 5.6.15
461
  ADD_SUBDIRECTORY(unittest/gunit)
462
ENDIF()
463
464
ADD_SUBDIRECTORY(extra)
1.2.4 by Robie Basak
Import upstream version 5.6.23
465
ADD_SUBDIRECTORY(client)
466
ADD_SUBDIRECTORY(sql/share)
467
ADD_SUBDIRECTORY(libservices)
468
469
IF(UNIX)
470
  ADD_SUBDIRECTORY(man)
471
ENDIF()
472
1 by James Page
Import upstream version 5.6.15
473
IF(NOT WITHOUT_SERVER)
474
  ADD_SUBDIRECTORY(tests)
475
  ADD_SUBDIRECTORY(sql)
476
  OPTION (WITH_EMBEDDED_SERVER "Compile MySQL with embedded server" OFF)
477
  IF(WITH_EMBEDDED_SERVER) 
478
   ADD_SUBDIRECTORY(libmysqld)
479
   ADD_SUBDIRECTORY(libmysqld/examples)
480
  ENDIF(WITH_EMBEDDED_SERVER)
1.2.4 by Robie Basak
Import upstream version 5.6.23
481
ENDIF()
482
483
# scripts/mysql_config depends on client and server targets loaded above.
484
# It is referenced by some of the directories below, so we insert it here.
485
ADD_SUBDIRECTORY(scripts)
486
487
IF(NOT WITHOUT_SERVER)
1 by James Page
Import upstream version 5.6.15
488
  ADD_SUBDIRECTORY(mysql-test)
489
  ADD_SUBDIRECTORY(mysql-test/lib/My/SafeProcess)
490
  ADD_SUBDIRECTORY(support-files)
491
  ADD_SUBDIRECTORY(sql-bench)
492
  IF(EXISTS ${CMAKE_SOURCE_DIR}/internal/CMakeLists.txt)
493
    ADD_SUBDIRECTORY(internal)
494
  ENDIF()
495
  ADD_SUBDIRECTORY(packaging/rpm-oel)
496
  ADD_SUBDIRECTORY(packaging/rpm-fedora)
1.2.4 by Robie Basak
Import upstream version 5.6.23
497
  ADD_SUBDIRECTORY(packaging/rpm-sles)
1 by James Page
Import upstream version 5.6.15
498
ENDIF()
499
500
INCLUDE(cmake/abi_check.cmake)
501
INCLUDE(cmake/tags.cmake)
502
503
CONFIGURE_FILE(config.h.cmake   ${CMAKE_BINARY_DIR}/include/my_config.h)
504
CONFIGURE_FILE(config.h.cmake   ${CMAKE_BINARY_DIR}/include/config.h)
505
CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/include/mysql_version.h.in
506
               ${CMAKE_BINARY_DIR}/include/mysql_version.h )
507
CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/sql/sql_builtin.cc.in
508
    ${CMAKE_BINARY_DIR}/sql/sql_builtin.cc)
509
CONFIGURE_FILE(
1.2.4 by Robie Basak
Import upstream version 5.6.23
510
    ${CMAKE_SOURCE_DIR}/cmake/info_macros.cmake.in
511
    ${CMAKE_BINARY_DIR}/info_macros.cmake @ONLY)
1 by James Page
Import upstream version 5.6.15
512
513
# Handle the "INFO_*" files.
514
INCLUDE(${CMAKE_BINARY_DIR}/info_macros.cmake)
515
# Source: This can be done during the cmake phase, all information is
516
# available, but should be repeated on each "make" just in case someone
1.2.4 by Robie Basak
Import upstream version 5.6.23
517
# does "cmake ; make ; git pull ; make".
1 by James Page
Import upstream version 5.6.15
518
CREATE_INFO_SRC(${CMAKE_BINARY_DIR}/Docs)
519
ADD_CUSTOM_TARGET(INFO_SRC ALL
520
  COMMAND ${CMAKE_COMMAND} -P ${CMAKE_SOURCE_DIR}/cmake/info_src.cmake
521
  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
522
)
523
# Build flags: This must be postponed to the make phase.
524
ADD_CUSTOM_TARGET(INFO_BIN ALL
525
  COMMAND ${CMAKE_COMMAND} -P ${CMAKE_SOURCE_DIR}/cmake/info_bin.cmake
526
  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
527
)
528
529
# Packaging
530
IF(WIN32)
531
  SET(CPACK_GENERATOR "ZIP")
532
ELSE()
533
  SET(CPACK_GENERATOR "TGZ")
534
ENDIF() 
535
ADD_SUBDIRECTORY(packaging/WiX)
536
ADD_SUBDIRECTORY(packaging/solaris)
537
538
# Create a single package with "make package"
539
# (see http://public.kitware.com/Bug/view.php?id=11452)
540
SET(CPACK_MONOLITHIC_INSTALL 1 CACHE INTERNAL "")
541
542
IF(UNIX)
543
  INSTALL(FILES Docs/mysql.info DESTINATION ${INSTALL_INFODIR} OPTIONAL COMPONENT Info)
544
ENDIF()
545
#
546
# RPM installs documentation directly from the source tree
547
#
548
IF(NOT INSTALL_LAYOUT MATCHES "RPM")
549
  INSTALL(FILES COPYING LICENSE.mysql 
550
  DESTINATION ${INSTALL_DOCREADMEDIR} 
551
  COMPONENT Readme
552
  OPTIONAL
553
  )
554
  INSTALL(FILES README DESTINATION ${INSTALL_DOCREADMEDIR} COMPONENT Readme)
555
  INSTALL(FILES ${CMAKE_BINARY_DIR}/Docs/INFO_SRC ${CMAKE_BINARY_DIR}/Docs/INFO_BIN DESTINATION ${INSTALL_DOCDIR})
556
  IF(UNIX)
557
    INSTALL(FILES Docs/INSTALL-BINARY DESTINATION ${INSTALL_DOCREADMEDIR} COMPONENT Readme)
558
  ENDIF()
559
  # MYSQL_DOCS_LOCATON is used in "make dist", points to the documentation directory
560
  SET(MYSQL_DOCS_LOCATION "" CACHE PATH "Location from where documentation is copied")
561
  MARK_AS_ADVANCED(MYSQL_DOCS_LOCATION)
562
  INSTALL(DIRECTORY Docs/ DESTINATION ${INSTALL_DOCDIR}
563
    COMPONENT Documentation
564
    PATTERN "INSTALL-BINARY" EXCLUDE
565
    PATTERN "Makefile.*" EXCLUDE
566
    PATTERN "glibc*" EXCLUDE
567
    PATTERN "linuxthreads.txt" EXCLUDE
568
    PATTERN "myisam.txt" EXCLUDE
569
    PATTERN "mysql.info" EXCLUDE
570
    PATTERN "sp-imp-spec.txt" EXCLUDE
571
  )
572
ENDIF()
573
574
INCLUDE(CPack)
1.2.4 by Robie Basak
Import upstream version 5.6.23
575
576
# C compiler flags consist of:
577
# CPPFLAGS        Taken from environment, see above.
578
# ADD_DEFINITIONS In each individual CMakeLists.txt
579
# CMAKE_C_FLAGS   From command line.
580
#                 We extend these in maintainer.cmake
581
# ENV{CFLAGS}     From environment, but environment is ignored if
582
#                 CMAKE_C_FLAGS is also given on command line
583
# CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE}
584
#                 We extend these in compiler_options.cmake
585
#
586
# Note that CMakeCache.txt contains cmake builtins for these variables,
587
# *not* the values that will actually be used:
588
589
IF(CMAKE_GENERATOR MATCHES "Makefiles")
590
  MESSAGE(STATUS "CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}")
591
ENDIF()
592
GET_PROPERTY(cwd_definitions DIRECTORY PROPERTY COMPILE_DEFINITIONS)
593
MESSAGE(STATUS "COMPILE_DEFINITIONS: ${cwd_definitions}")
594
MESSAGE(STATUS "CMAKE_C_FLAGS: ${CMAKE_C_FLAGS}")
595
MESSAGE(STATUS "CMAKE_CXX_FLAGS: ${CMAKE_CXX_FLAGS}")
596
IF(CMAKE_BUILD_TYPE AND CMAKE_GENERATOR MATCHES "Makefiles")
597
  STRING(TOUPPER "${CMAKE_BUILD_TYPE}" CMAKEBT)
598
  MESSAGE(STATUS "CMAKE_C_FLAGS_${CMAKEBT}: ${CMAKE_C_FLAGS_${CMAKEBT}}")
599
  MESSAGE(STATUS "CMAKE_CXX_FLAGS_${CMAKEBT}: ${CMAKE_CXX_FLAGS_${CMAKEBT}}")
600
ENDIF()
601
IF(NOT CMAKE_GENERATOR MATCHES "Makefiles")
602
  MESSAGE(STATUS "CMAKE_C_FLAGS_DEBUG: ${CMAKE_C_FLAGS_DEBUG}")
603
  MESSAGE(STATUS "CMAKE_CXX_FLAGS_DEBUG: ${CMAKE_CXX_FLAGS_DEBUG}")
604
  MESSAGE(STATUS
605
    "CMAKE_C_FLAGS_RELWITHDEBINFO: ${CMAKE_C_FLAGS_RELWITHDEBINFO}")
606
  MESSAGE(STATUS
607
    "CMAKE_CXX_FLAGS_RELWITHDEBINFO: ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
608
ENDIF()