CMakeLists.txt 8.88 KB
Newer Older
1
# Copyright (C) 2006-2008 MySQL AB, 2009 Sun Microsystems, Inc
unknown's avatar
unknown committed
2 3 4 5 6 7 8 9 10 11 12 13 14 15
# 
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

16 17 18 19 20 21
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
# Avoid warnings in higher versions
if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" GREATER 2.6)
 CMAKE_POLICY(VERSION 2.8)
endif()

22

23
SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake)
24

25 26 27 28
# First, decide about build type (debug or release)
# If custom compiler flags are set or cmake is invoked with -DCMAKE_BUILD_TYPE, 
# respect user wishes and do not (re)define CMAKE_BUILD_TYPE. If WITH_DEBUG{_FULL} 
# is given, set CMAKE_BUILD_TYPE = Debug. Otherwise, use Relwithdebinfo.
29 30


31
IF(DEFINED CMAKE_BUILD_TYPE)
32 33 34 35 36 37
  SET(HAVE_CMAKE_BUILD_TYPE TRUE)
ENDIF()
SET(CUSTOM_C_FLAGS $ENV{CFLAGS})
IF(NOT CUSTOM_C_FLAGS)
  SET(CUSTOM_C_FLAGS ${CMAKE_C_FLAGS})
ENDIF()
unknown's avatar
unknown committed
38

39 40 41
OPTION(WITH_DEBUG "Use dbug" OFF)
OPTION(WITH_DEBUG_FULL "Use dbug and safemalloc/safemutex. Slow" OFF)

42 43 44 45 46 47 48 49
IF(NOT HAVE_CMAKE_BUILD_TYPE)
   IF(BUILD_CONFIG OR NOT CUSTOM_C_FLAGS)
     IF(WITH_DEBUG)
       SET(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Debug build" FORCE)
     ELSE()
       SET(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING 
        "RelWithDebInfo build" FORCE)
     ENDIF()
50 51
   ENDIF()
ENDIF()
52

53 54 55 56
IF(WITH_DEBUG_FULL)
  SET(WITH_DEBUG ON CACHE BOOL "Use DBUG")
ENDIF()

57
IF(BUILD_CONFIG)
58 59
  SET(CMAKE_USER_MAKE_RULES_OVERRIDE 
    ${CMAKE_SOURCE_DIR}/cmake/build_configurations/${BUILD_CONFIG}.cmake)
60 61
ENDIF()

62 63
PROJECT(MySQL)

64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
# Include the platform-specific file. To allow exceptions, this code
# looks for files in order of how specific they are. If there is, for
# example, a generic Linux.cmake and a version-specific
# Linux-2.6.28-11-generic, it will pick Linux-2.6.28-11-generic and
# include it. It is then up to the file writer to include the generic
# version if necessary.
FOREACH(_base
    ${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_VERSION}-${CMAKE_SYSTEM_PROCESSOR}
    ${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_VERSION}
    ${CMAKE_SYSTEM_NAME})
  SET(_file ${CMAKE_SOURCE_DIR}/cmake/os/${_base}.cmake)
  IF(EXISTS ${_file})
    INCLUDE(${_file})
    BREAK()
  ENDIF()
ENDFOREACH()



83 84 85 86 87
# Following autotools tradition, add preprocessor definitions
# specified in environment variable CPPFLAGS
IF(DEFINED ENV{CPPFLAGS})
  ADD_DEFINITIONS($ENV{CPPFLAGS})
ENDIF()
88

89
# Add macros
90 91 92 93 94 95 96 97 98
INCLUDE(character_sets)
INCLUDE(zlib)
INCLUDE(ssl)
INCLUDE(readline)
INCLUDE(mysql_version)
INCLUDE(libutils)
INCLUDE(dtrace)
INCLUDE(plugin)
INCLUDE(install_macros)
99
INCLUDE(install_layout)
100
INCLUDE(mysql_add_executable)
101 102

# Handle options
103 104 105 106 107
OPTION(DISABLE_SHARED 
 "Don't build shared libraries, compile code as position-dependent" OFF)
IF(DISABLE_SHARED)
  SET(WITHOUT_DYNAMIC_PLUGINS 1)
ENDIF()
108 109 110 111
OPTION(ENABLED_PROFILING "Enable profiling" ON)
OPTION(CYBOZU "" OFF)
OPTION(BACKUP_TEST "" OFF)
OPTION(WITHOUT_SERVER OFF)
112
OPTION (WITH_UNIT_TESTS "Compile MySQL with unit tests" ON)
113
MARK_AS_ADVANCED(CYBOZU BACKUP_TEST WITHOUT_SERVER DISABLE_SHARED)
114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132

 
OPTION(ENABLE_DEBUG_SYNC "Enable debug sync (debug builds only)" ON) 
IF(ENABLE_DEBUG_SYNC) 
  SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DENABLED_DEBUG_SYNC") 
  SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DENABLED_DEBUG_SYNC") 
ENDIF() 
 
OPTION(WITH_ERROR_INJECT 
  "Enable error injection in MySQL Server (debug builds only)" OFF) 
IF(WITH_ERROR_INJECT) 
  SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DERROR_INJECT_SUPPORT") 
  SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DERROR_INJECT_SUPPORT") 
ENDIF() 

OPTION(ENABLE_LOCAL_INFILE
 "If we should should enable LOAD DATA LOCAL by default" ${IF_WIN})
MARK_AS_ADVANCED(ENABLE_LOCAL_INFILE)

133 134 135 136
OPTION(WITH_FAST_MUTEXES "Compile with fast mutexes" OFF)
MARK_AS_ADVANCED(WITH_FAST_MUTEXES)

# Set DBUG_OFF and other optional release-only flags for non-debug project types
137 138 139 140
FOREACH(BUILD_TYPE RELEASE RELWITHDEBINFO MINSIZEREL)
  FOREACH(LANG C CXX)
    SET(CMAKE_${LANG}_FLAGS_${BUILD_TYPE} 
     "${CMAKE_${LANG}_FLAGS_${BUILD_TYPE}} -DDBUG_OFF")
141 142 143 144
    IF(WITH_FAST_MUTEXES)
      SET(CMAKE_${LANG}_FLAGS_${BUILD_TYPE} 
        "${CMAKE_${LANG}_FLAGS_${BUILD_TYPE}} -DMY_PTHREAD_FASTMUTEX=1")
    ENDIF()
145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165
  ENDFOREACH()
ENDFOREACH()

IF(NOT CMAKE_BUILD_TYPE
    AND NOT CMAKE_GENERATOR MATCHES "Visual Studio" 
    AND NOT CMAKE_GENERATOR MATCHES "Xcode") 
    # This is the case of no CMAKE_BUILD_TYPE choosen, typical for VS and Xcode
    # or if custom C flags are set. In VS and Xcode for non-Debug configurations 
    # DBUG_OFF is already correctly set. Use DBUG_OFF for Makefile based projects 
    # without build type too, unless user specifically requests DBUG. 
    IF(NOT CMAKE_C_FLAGS MATCHES "-DDBUG_ON")
      ADD_DEFINITIONS(-DDBUG_OFF)
    ENDIF()
ENDIF()

# Add safemalloc and safemutex for debug condifurations, except on Windows 
# (C runtime library provides safemalloc functionality and safemutex has never 
# worked there)
IF(WITH_DEBUG OR WITH_DEBUG_FULL AND NOT WIN32)
  FOREACH(LANG C CXX)
    IF(WITH_DEBUG_FULL)
166 167
      SET(CMAKE_${LANG}_FLAGS_DEBUG 
        "${CMAKE_${LANG}_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX")
168
    ELSE()
169 170
      SET(CMAKE_${LANG}_FLAGS_DEBUG 
        "${CMAKE_${LANG}_FLAGS_DEBUG} -DSAFE_MUTEX")
171 172 173 174 175 176 177
    ENDIF()
  ENDFOREACH()
ENDIF()


# Set commonly used variables
IF(WIN32)
178
  SET(DEFAULT_MYSQL_HOME "C:/Program Files/MySQL/MySQL Server ${MYSQL_BASE_VERSION}" )
179 180
  SET(SHAREDIR share)
ELSE()
181
  SET(DEFAULT_MYSQL_HOME ${CMAKE_INSTALL_PREFIX})
182
  SET(SHAREDIR ${DEFAULT_MYSQL_HOME}/${INSTALL_MYSQLSHAREDIR})
183 184 185
ENDIF()

SET(DEFAULT_BASEDIR "${DEFAULT_MYSQL_HOME}")
186 187
SET(MYSQL_DATADIR "${DEFAULT_MYSQL_HOME}/${INSTALL_MYSQLDATADIR}" CACHE PATH 
  "default MySQL data directory")
188
SET(DEFAULT_CHARSET_HOME "${DEFAULT_MYSQL_HOME}")
189 190 191 192
SET(PLUGINDIR "${DEFAULT_MYSQL_HOME}/${INSTALL_PLUGINDIR}")
IF(SYSCONFDIR)
  SET(DEFAULT_SYSCONFDIR "${SYSCONFDIR}")
ENDIF()
193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209


# Run platform tests
INCLUDE(configure.cmake)

# Common defines and includes
ADD_DEFINITIONS(-DHAVE_CONFIG_H)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/include)

# Add bundled or system zlib.
MYSQL_CHECK_ZLIB_WITH_COMPRESS()
# Optionally add bundled yassl/taocrypt or system openssl.
MYSQL_CHECK_SSL()
# Add readline or libedit.
MYSQL_CHECK_READLINE()

IF(NOT WITHOUT_SERVER)
210
SET (MYSQLD_STATIC_PLUGIN_LIBS "" CACHE INTERNAL "")
211 212 213 214 215
 # Add storage engines and plugins.
 CONFIGURE_PLUGINS()
ENDIF()

ADD_SUBDIRECTORY(include)
216 217
ADD_SUBDIRECTORY(dbug)
ADD_SUBDIRECTORY(strings)
218
ADD_SUBDIRECTORY(vio)
219 220
ADD_SUBDIRECTORY(regex)
ADD_SUBDIRECTORY(mysys)
unknown's avatar
unknown committed
221
ADD_SUBDIRECTORY(libmysql)
222

223

224 225 226 227 228 229 230 231
IF(WITH_UNIT_TESTS)
 ENABLE_TESTING()
ENDIF()
IF(WITH_UNIT_TESTS)
  ADD_SUBDIRECTORY(unittest/mytap)
  ADD_SUBDIRECTORY(unittest/mysys)
ENDIF()

232
ADD_SUBDIRECTORY(extra)
233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260
IF(NOT WITHOUT_SERVER)
  ADD_SUBDIRECTORY(tests)
  ADD_SUBDIRECTORY(client)
  ADD_SUBDIRECTORY(sql)
  ADD_SUBDIRECTORY(sql/share)
  ADD_SUBDIRECTORY(libservices)
  OPTION (WITH_EMBEDDED_SERVER "Compile MySQL with embedded server" OFF)
  IF(WITH_EMBEDDED_SERVER) 
   ADD_SUBDIRECTORY(libmysqld)
   ADD_SUBDIRECTORY(libmysqld/examples)
  ENDIF(WITH_EMBEDDED_SERVER)

  ADD_SUBDIRECTORY(mysql-test)
  ADD_SUBDIRECTORY(mysql-test/lib/My/SafeProcess)
  ADD_SUBDIRECTORY(support-files)
  ADD_SUBDIRECTORY(scripts)
  ADD_SUBDIRECTORY(sql-bench)
  IF(UNIX)
    ADD_SUBDIRECTORY(man)
  ENDIF()
ENDIF()

INCLUDE(cmake/abi_check.cmake)

CONFIGURE_FILE(config.h.cmake   ${CMAKE_BINARY_DIR}/include/my_config.h)
CONFIGURE_FILE(config.h.cmake   ${CMAKE_BINARY_DIR}/include/config.h)
CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/include/mysql_version.h.in
               ${CMAKE_BINARY_DIR}/include/mysql_version.h )
261 262
CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/sql/sql_builtin.cc.in
    ${CMAKE_BINARY_DIR}/sql/sql_builtin.cc)
263 264 265 266 267 268 269 270

# Packaging
IF(WIN32)
  SET(CPACK_GENERATOR "ZIP")
ELSE()
  SET(CPACK_GENERATOR "TGZ")
ENDIF() 
INCLUDE(CPack)
Jonathan Perkin's avatar
Jonathan Perkin committed
271 272
INSTALL(FILES COPYING EXCEPTIONS-CLIENT LICENSE.mysql DESTINATION ${INSTALL_DOCREADMEDIR} OPTIONAL)
INSTALL(FILES README DESTINATION ${INSTALL_DOCREADMEDIR})
273
IF(UNIX)
274 275
  INSTALL(FILES Docs/INSTALL-BINARY DESTINATION 
  ${INSTALL_DOCREADMEDIR})
276
ENDIF()
Vladislav Vaintroub's avatar
Vladislav Vaintroub committed
277 278 279
# MYSQL_DOCS_LOCATON is used in "make dist", points to the documentation directory
SET(MYSQL_DOCS_LOCATION "" CACHE PATH "Location from where documentation is copied")
MARK_AS_ADVANCED(MYSQL_DOCS_LOCATION)
280
INSTALL(DIRECTORY Docs/ DESTINATION ${INSTALL_DOCDIR}
Jonathan Perkin's avatar
Jonathan Perkin committed
281
  PATTERN "INSTALL-BINARY" EXCLUDE
282 283 284 285 286
  PATTERN "Makefile.*" EXCLUDE
  PATTERN "myisam.txt" EXCLUDE
  PATTERN "glibc*" EXCLUDE
  PATTERN "sp-imp-spec.txt" EXCLUDE
  PATTERN "linuxthreads.txt" EXCLUDE
Jonathan Perkin's avatar
Jonathan Perkin committed
287
)