summaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
authorNirbhay Choubey <nirbhay@skysql.com>2014-03-26 14:27:24 -0400
committerNirbhay Choubey <nirbhay@skysql.com>2014-03-26 14:27:24 -0400
commit90e4f7f9d3f2669ac99f2817f884315bfc86b0a7 (patch)
tree60a10a515a9f5656e797d8142f97b94f89f4e797 /CMakeLists.txt
parent586fab72f01e1c7f0f8bf363fa6b06a2f10965b4 (diff)
parent5b7cab82195268f7657504d0b53995654748cefa (diff)
downloadmariadb-git-90e4f7f9d3f2669ac99f2817f884315bfc86b0a7.tar.gz
* bzr merge -rtag:mariadb-10.0.9 maria/10.0
* Fix for post-merge build failures.
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt95
1 files changed, 93 insertions, 2 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 60b46f7a8b8..eb6ce6c726f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -153,6 +153,7 @@ INCLUDE(readline)
INCLUDE(libutils)
INCLUDE(dtrace)
INCLUDE(jemalloc)
+INCLUDE(pcre)
INCLUDE(ctest)
INCLUDE(plugin)
INCLUDE(install_macros)
@@ -177,6 +178,81 @@ MARK_AS_ADVANCED(CYBOZU BACKUP_TEST WITHOUT_SERVER DISABLE_SHARED)
OPTION(NOT_FOR_DISTRIBUTION "Allow linking with GPLv2-incompatible system libraries. Only set it you never plan to distribute the resulting binaries" OFF)
+include(CheckCSourceCompiles)
+include(CheckCXXSourceCompiles)
+# We need some extra FAIL_REGEX patterns
+# Note that CHECK_C_SOURCE_COMPILES is a misnomer, it will also link.
+MACRO (MY_CHECK_C_COMPILER_FLAG FLAG RESULT)
+ SET(SAVE_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}")
+ SET(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${FLAG}")
+ CHECK_C_SOURCE_COMPILES("int main(void) { return 0; }" ${RESULT}
+ FAIL_REGEX "argument unused during compilation"
+ FAIL_REGEX "unsupported .*option"
+ FAIL_REGEX "unknown .*option"
+ FAIL_REGEX "unrecognized .*option"
+ FAIL_REGEX "ignoring unknown option"
+ FAIL_REGEX "[Ww]arning: [Oo]ption"
+ )
+ SET(CMAKE_REQUIRED_FLAGS "${SAVE_CMAKE_REQUIRED_FLAGS}")
+ENDMACRO()
+
+MACRO (MY_CHECK_CXX_COMPILER_FLAG FLAG RESULT)
+ SET(SAVE_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}")
+ SET(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${FLAG}")
+ CHECK_CXX_SOURCE_COMPILES("int main(void) { return 0; }" ${RESULT}
+ FAIL_REGEX "argument unused during compilation"
+ FAIL_REGEX "unsupported .*option"
+ FAIL_REGEX "unknown .*option"
+ FAIL_REGEX "unrecognized .*option"
+ FAIL_REGEX "ignoring unknown option"
+ FAIL_REGEX "[Ww]arning: [Oo]ption"
+ )
+ SET(CMAKE_REQUIRED_FLAGS "${SAVE_CMAKE_REQUIRED_FLAGS}")
+ENDMACRO()
+
+OPTION(WITH_ASAN "Enable address sanitizer" OFF)
+IF (WITH_ASAN)
+ # gcc 4.8.1 and new versions of clang
+ MY_CHECK_C_COMPILER_FLAG("-fsanitize=address" HAVE_C_FSANITIZE)
+ MY_CHECK_CXX_COMPILER_FLAG("-fsanitize=address" HAVE_CXX_FSANITIZE)
+
+ IF(HAVE_C_FSANITIZE AND HAVE_CXX_FSANITIZE)
+ # We switch on basic optimization also for debug builds.
+ # With optimization we may get some warnings, so we switch off -Werror
+ SET(CMAKE_C_FLAGS_DEBUG
+ "${CMAKE_C_FLAGS_DEBUG} -fsanitize=address -O1 -Wno-error -fPIC")
+ SET(CMAKE_C_FLAGS_RELWITHDEBINFO
+ "${CMAKE_C_FLAGS_RELWITHDEBINFO} -fsanitize=address -fPIC")
+ SET(CMAKE_CXX_FLAGS_DEBUG
+ "${CMAKE_CXX_FLAGS_DEBUG} -fsanitize=address -O1 -Wno-error -fPIC")
+ SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO
+ "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -fsanitize=address -fPIC")
+ SET(WITH_ASAN_OK 1)
+ ELSE()
+ # older versions of clang
+ MY_CHECK_C_COMPILER_FLAG("-faddress-sanitizer" HAVE_C_FADDRESS)
+ MY_CHECK_CXX_COMPILER_FLAG("-faddress-sanitizer" HAVE_CXX_FFADDRESS)
+
+ IF(HAVE_C_FADDRESS AND HAVE_CXX_FFADDRESS)
+ # We switch on basic optimization also for debug builds.
+ SET(CMAKE_C_FLAGS_DEBUG
+ "${CMAKE_C_FLAGS_DEBUG} -faddress-sanitizer -O1 -fPIC")
+ SET(CMAKE_C_FLAGS_RELWITHDEBINFO
+ "${CMAKE_C_FLAGS_RELWITHDEBINFO} -faddress-sanitizer -fPIC")
+ SET(CMAKE_CXX_FLAGS_DEBUG
+ "${CMAKE_CXX_FLAGS_DEBUG} -faddress-sanitizer -O1 -fPIC")
+ SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO
+ "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -faddress-sanitizer -fPIC")
+ SET(WITH_ASAN_OK 1)
+ ENDIF()
+ ENDIF()
+
+ IF(NOT WITH_ASAN_OK)
+ MESSAGE(FATAL_ERROR "Do not know how to enable address sanitizer")
+ ENDIF()
+ENDIF()
+
+
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")
@@ -261,13 +337,25 @@ SET(PLUGINDIR "${DEFAULT_MYSQL_HOME}/${INSTALL_PLUGINDIR}")
IF(INSTALL_SYSCONFDIR)
SET(DEFAULT_SYSCONFDIR "${INSTALL_SYSCONFDIR}")
ENDIF()
+
+OPTION(TMPDIR
+"PATH to MySQL TMP dir. If unspecified, defaults to P_tmpdir in <stdio.h>" OFF)
IF(TMPDIR)
- SET(DEFAULT_TMPDIR "${TMPDIR}")
+ # Quote it, to make it a const char string.
+ SET(DEFAULT_TMPDIR "\"${TMPDIR}\"")
+ELSE()
+ # Do not quote it, to refer to the P_tmpdir macro in <stdio.h>.
+ SET(DEFAULT_TMPDIR "P_tmpdir")
ENDIF()
# Run platform tests
INCLUDE(configure.cmake)
+# Find header files from the bundled libraries
+# (jemalloc, yassl, readline, pcre, etc)
+# before the ones installed in the system
+SET(CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE ON)
+
# Common defines and includes
ADD_DEFINITIONS(-DHAVE_CONFIG_H)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/include)
@@ -279,8 +367,11 @@ MYSQL_CHECK_SSL()
# Add readline or libedit.
MYSQL_CHECK_READLINE()
+SET(MALLOC_LIBRARY "system")
CHECK_JEMALLOC()
+CHECK_PCRE()
+
#
# Setup maintainer mode options. Platform checks are
# not run with the warning options as to not perturb fragile checks
@@ -316,7 +407,6 @@ ADD_SUBDIRECTORY(include)
ADD_SUBDIRECTORY(dbug)
ADD_SUBDIRECTORY(strings)
ADD_SUBDIRECTORY(vio)
-ADD_SUBDIRECTORY(pcre)
ADD_SUBDIRECTORY(mysys)
ADD_SUBDIRECTORY(mysys_ssl)
ADD_SUBDIRECTORY(libmysql)
@@ -347,6 +437,7 @@ IF(NOT WITHOUT_SERVER)
ADD_SUBDIRECTORY(internal)
ENDIF()
ADD_SUBDIRECTORY(packaging/rpm-uln)
+ ADD_SUBDIRECTORY(packaging/rpm-oel)
ENDIF()
IF(UNIX)