# CMakeLists.txt # This is the LGPL libmariadb project. PROJECT(mariadb-connector-c C) # Is C/C built as subproject? get_directory_property(IS_SUBPROJECT PARENT_DIRECTORY) # do not inherit include directories from the parent project SET_PROPERTY(DIRECTORY PROPERTY INCLUDE_DIRECTORIES) FOREACH(V WITH_MYSQLCOMPAT WITH_MSI WITH_SIGNCODE WITH_RTC WITH_UNIT_TESTS WITH_EXTERNAL_ZLIB WITH_SQLITE INSTALL_LAYOUT) SET(${V} ${${OPT}${V}}) ENDFOREACH() SET(CC_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) SET(CC_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}) SET(CPACK_PACKAGE_VERSION_MAJOR 2) SET(CPACK_PACKAGE_VERSION_MINOR 3) SET(CPACK_PACKAGE_VERSION_PATCH 7) SET(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}") MATH(EXPR MARIADB_PACKAGE_VERSION_ID "${CPACK_PACKAGE_VERSION_MAJOR} * 10000 + ${CPACK_PACKAGE_VERSION_MINOR} * 100 + ${CPACK_PACKAGE_VERSION_PATCH}") #Minimum required version is Cmake 2.8.8, since we need to build object libraries IF(WIN32) CMAKE_MINIMUM_REQUIRED(VERSION 2.8.8 FATAL_ERROR) ELSE() CMAKE_MINIMUM_REQUIRED(VERSION 2.8.8 FATAL_ERROR) ENDIF() IF(COMMAND CMAKE_POLICY) CMAKE_POLICY(SET CMP0003 NEW) ENDIF() #Allow access to non existing targets IF(CMAKE_VERSION VERSION_GREATER "2.9.9") CMAKE_POLICY(SET CMP0026 OLD) CMAKE_POLICY(SET CMP0045 OLD) CMAKE_POLICY(SET CMP0042 OLD) ENDIF() ### Options ### IF(NOT WIN32) OPTION(WITH_MYSQLCOMPAT "creates libmysql* symbolic links" ON) OPTION(WITH_OPENSSL "enables SSL support" ON) ELSE() OPTION(WITH_OPENSSL "enables SSL support" OFF) OPTION(WITH_SIGNCODE "digitally sign files" OFF) OPTION(WITH_RTC "enables run time checks for debug builds" OFF) ENDIF() OPTION(WITH_UNIT_TESTS "builds unittests" ON) OPTION(WITH_EXTERNAL_ZLIB "Enables use of external zlib" OFF) ############### IF(WITH_SIGNCODE) IF(WIN32 AND NOT SIGN_OPTIONS) SET(SIGN_OPTIONS /a /t http://timestamp.verisign.com/scripts/timstamp.dll) ELSE() SEPARATE_ARGUMENTS(SIGN_OPTIONS) ENDIF() MARK_AS_ADVANCED(SIGN_OPTIONS) ENDIF() IF(WITH_RTC) SET(RTC_OPTIONS "/RTC1 /RTCc") ENDIF() IF(NOT IS_SUBPROJECT) IF(MSVC) # Speedup system tests INCLUDE(${CC_SOURCE_DIR}/cmake/WindowsCache.cmake) IF (MSVC) SET(CONFIG_TYPES "DEBUG" "RELEASE" "RELWITHDEBINFO") FOREACH(BUILD_TYPE ${CONFIG_TYPES}) FOREACH(COMPILER CXX C) SET(COMPILER_FLAGS "${CMAKE_${COMPILER}_FLAGS_${BUILD_TYPE}}") IF (NOT COMPILER_FLAGS STREQUAL "") STRING(REPLACE "/MD" "/MT" COMPILER_FLAGS ${COMPILER_FLAGS}) IF (CMAKE_BUILD_TYPE STREQUAL "Debug") SET(COMPILER_FLAGS "${COMPILER_FLAGS} ${RTC_OPTIONS}") STRING(REPLACE "/Zi" "/ZI" COMPILER_FLAGS ${COMPILER_FLAGS}) ENDIF() MESSAGE (STATUS "CMAKE_${COMPILER}_FLAGS_${BUILD_TYPE}= ${COMPILER_FLAGS}") SET(CMAKE_${COMPILER}_FLAGS_${BUILD_TYPE} ${COMPILER_FLAGS} CACHE STRING "overwritten by libmariadb" FORCE) ENDIF() ENDFOREACH() ENDFOREACH() ENDIF() ENDIF() ENDIF(NOT IS_SUBPROJECT) # Disable dbug information for release builds SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -DDBUG_OFF") SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DDBUG_OFF") SET(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -DDBUG_OFF") SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -DDBUG_OFF") IF(CMAKE_COMPILER_IS_GNUCC) SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wunused -Wno-uninitialized") ENDIF() # If the build type isn't specified, set to Relwithdebinfo as default. IF(NOT CMAKE_BUILD_TYPE) SET(CMAKE_BUILD_TYPE "Relwithdebinfo") ENDIF() # various defines for generating include/mysql_version.h SET(PROTOCOL_VERSION 10) # we adapted new password option from PHP's mysqlnd ! SET(MYSQL_CLIENT_VERSION_MAJOR "5") SET(MYSQL_CLIENT_VERSION_MINOR "5") SET(MYSQL_CLIENT_VERSION_PATCH "1") SET(MYSQL_CLIENT_VERSION "${MYSQL_CLIENT_VERSION_MAJOR}.${MYSQL_CLIENT_VERSION_MINOR}.${MYSQL_CLIENT_VERSION_PATCH}") MATH(EXPR MYSQL_VERSION_ID "${MYSQL_CLIENT_VERSION_MAJOR} * 10000 + ${MYSQL_CLIENT_VERSION_MINOR} * 100 + ${MYSQL_CLIENT_VERSION_PATCH}") IF (NOT MYSQL_PORT) SET(MYSQL_PORT 3306) ENDIF () IF(NOT MYSQL_UNIX_ADDR) SET(MYSQL_UNIX_ADDR "/tmp/mysql.sock") ENDIF() INCLUDE(${CC_SOURCE_DIR}/cmake/version_info.cmake) INCLUDE(${CC_SOURCE_DIR}/cmake/sign.cmake) INCLUDE("${CC_SOURCE_DIR}/cmake/install.cmake") SET(DEFAULT_CHARSET_HOME "${CMAKE_INSTALL_PREFIX}") SET(PLUGINDIR "${CMAKE_INSTALL_PREFIX}/lib/plugin") INCLUDE(${CC_SOURCE_DIR}/cmake/SearchLibrary.cmake) IF(WITH_EXTERNAL_ZLIB) FIND_PACKAGE(ZLIB QUIET) IF(${ZLIB_FOUND}) SET(LIBZ "-z") ENDIF() ENDIF() INCLUDE(TestBigEndian) TEST_BIG_ENDIAN(HAVE_BIGENDIAN) IF(UNIX) SEARCH_LIBRARY(DEFAULT_LIB inet_ntoa "c") IF(NOT DEFAULT_LIB) SEARCH_LIBRARY(LIBNSL inet_ntoa "nsl_r;nsl") ENDIF() SEARCH_LIBRARY(DEFAULT_LIB bind "c") IF(NOT DEFAULT_LIB) SEARCH_LIBRARY(LIBBIND bind "bind;socket") ENDIF() SEARCH_LIBRARY(DEFAULT_LIB setsockopt "c") IF(NOT DEFAULT_LIB) SEARCH_LIBRARY(LIBSOCKET setsockopt "socket") ENDIF() SEARCH_LIBRARY(LIBDL dlopen "dl") SEARCH_LIBRARY(LIBM floor m) SEARCH_LIBRARY(LIBPTHREAD pthread_getspecific "pthread;pthreads") SET(EXTRA_LIBS "${LIBNSL}" "${LIBBIND}" "${LIBSOCKET}" "${LIBDL}" "${LIBM}" "${LIBPTHREAD}") FIND_PACKAGE(Threads) #remove possible dups from required libraries LIST(LENGTH SYS_LIBS rllength) IF(${rllength} GREATER 0) LIST(REMOVE_DUPLICATES SYS_LIBS) ENDIF() SET(CMAKE_REQUIRED_LIBRARIES ${SYS_LIBS}) ENDIF() IF(CMAKE_HAVE_PTHREAD_H) SET(CMAKE_REQUIRED_INCLUDES pthread.h) ENDIF() IF(WIN32) SET(HAVE_THREADS 1) ADD_DEFINITIONS(-DHAVE_DLOPEN) ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS) IF(MSVC) SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4996" ) ENDIF() ELSEIF() SET(HAVE_THREADS ${CMAKE_USE_PTHREADS}) ENDIF() # check for various include files INCLUDE(${CC_SOURCE_DIR}/cmake/CheckIncludeFiles.cmake) # check for various functions INCLUDE(${CC_SOURCE_DIR}/cmake/CheckFunctions.cmake) # check for various types INCLUDE(${CC_SOURCE_DIR}/cmake/CheckTypes.cmake) # Check for OpenSSL IF(WITH_OPENSSL) FIND_PACKAGE(OpenSSL) IF(OPENSSL_FOUND) ADD_DEFINITIONS(-DHAVE_OPENSSL) INCLUDE_DIRECTORIES(${OPENSSL_INCLUDE_DIR}) SET(SSL_LIBRARIES ${OPENSSL_LIBRARIES}) IF(OPENSSL_CRYPTO_LIBRARIES) SET(SSL_LIBRARIES ${SSL_LIBRARIES} ${OPENSSL_CRYPTO_LIBRARIES}) ENDIF() ELSE() MESSAGE(FATAL_ERROR "OpenSSL not found. Please install OpenSSL or disable SSL support via option -DWITH_OPENSSL=Off") ENDIF() ENDIF() IF(WITH_SQLITE) ADD_DEFINITIONS(-DHAVE_SQLITE) ENDIF() IF(NOT WIN32) INCLUDE(${CC_SOURCE_DIR}/cmake/FindIconv.cmake) ENDIF() CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/include/mysql_version.h.in ${CMAKE_CURRENT_BINARY_DIR}/include/mysql_version.h) CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/include/my_config.h.in ${CMAKE_CURRENT_BINARY_DIR}/include/my_config.h) CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/include/mysql_version.h.in ${CMAKE_CURRENT_SOURCE_DIR}/include/mysql_version.h) CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/include/my_config.h.in ${CMAKE_CURRENT_SOURCE_DIR}/include/my_config.h) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/include) IF(WIN32) SET(SYSTEM_LIBS ws2_32 advapi32 kernel32) ELSE() SET(SYSTEM_LIBS ${LIBPTHREAD} ${LIBDL} ${LIBM}) IF(ICONV_EXTERNAL) SET(SYSTEM_LIBS ${SYSTEM_LIBS} ${ICONV_LIBRARIES}) ENDIF() ENDIF() IF(OPENSSL_FOUND) SET(SYSTEM_LIBS ${SYSTEM_LIBS} ${SSL_LIBRARIES}) ENDIF() ADD_SUBDIRECTORY(include) ADD_SUBDIRECTORY(libmariadb) ADD_SUBDIRECTORY(plugins) IF(NOT WIN32) ADD_SUBDIRECTORY(mariadb_config) ENDIF() IF(IS_DIRECTORY ${CC_SOURCE_DIR}/unittest) IF(WITH_UNIT_TESTS) ADD_SUBDIRECTORY(unittest/mytap) ADD_SUBDIRECTORY(unittest/libmariadb) ENDIF() ENDIF() IF(CLIENT_DOCS) INSTALL(DIRECTORY ${CLIENT_DOCS} DESTINATION ${DOCS_INSTALL_DIR_${INSTALL_LAYOUT}}) ENDIF() IF(WIN32 AND WITH_MSI AND CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") ADD_SUBDIRECTORY(win/packaging) ENDIF() SET(CPACK_PACKAGE_VENDOR "MariaDB Corporation Ab") SET(CPACK_PACKAGE_DESCRIPTION "MariaDB Connector/C. A library for connecting to MariaDB and MySQL servers") SET(CPACK_PACKAGE_NAME "mariadb_connector_c") STRING(TOLOWER ${CMAKE_SYSTEM_NAME} system_name) SET(CPACK_PACKAGE_FILE_NAME "mariadb-connector-c-${CPACK_PACKAGE_VERSION}-${system_name}-${CMAKE_SYSTEM_PROCESSOR}") SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/COPYING.LIB") SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README") INCLUDE(cmake/ConnectorName.cmake) SET(CPACK_SOURCE_PACKAGE_FILE_NAME "mariadb-connector-c-${CPACK_PACKAGE_VERSION}-src") # Build source packages IF(GIT_BUILD_SRCPKG) # get branch name EXECUTE_PROCESS(COMMAND git show-branch OUTPUT_VARIABLE git_branch) STRING(REGEX MATCH "\\[([^]]+)\\]" git_branch ${git_branch}) STRING(REGEX REPLACE "\\[|\\]" "" GIT_BRANCH ${git_branch}) MESSAGE(STATUS "${GIT_BRANCH}") IF(WIN32) EXECUTE_PROCESS(COMMAND git archive ${GIT_BRANCH} --format=zip --prefix=${CPACK_SOURCE_PACKAGE_FILE_NAME}/ --output=${CPACK_SOURCE_PACKAGE_FILE_NAME}.zip) ELSE() EXECUTE_PROCESS(COMMAND git archive ${GIT_BRANCH} --format=zip --prefix=${CPACK_SOURCE_PACKAGE_FILE_NAME}/ --output=${CPACK_SOURCE_PACKAGE_FILE_NAME}.zip) EXECUTE_PROCESS(COMMAND git archive ${GIT_BRANCH} --format=tar --prefix=${CPACK_SOURCE_PACKAGE_FILE_NAME}/ --output=${CPACK_SOURCE_PACKAGE_FILE_NAME}.tar) EXECUTE_PROCESS(COMMAND gzip -9 -f ${CPACK_SOURCE_PACKAGE_FILE_NAME}.tar) ENDIF() ENDIF() SET(CPACK_SOURCE_IGNORE_FILES \\\\.git/ \\\\.gitignore \\\\.gitattributes CMakeCache.txt cmake_dist.cmake CPackSourceConfig.cmake CPackConfig.cmake mariadb_config/mariadb_config.c$ .build/ html/ unittest /cmake_install.cmake /CTestTestfile.cmake /CMakeFiles/ /version_resources/ /_CPack_Packages/ .*gz$ .*zip$ .*so$ .*so.*$ .*dll$ .*a$ .*pdb$ /CMakeFiles/ /version_resources/ /_CPack_Packages/ Makefile$ include/my_config.h$ /autom4te.cache/ errmsg.sys$ ) IF(WIN32) SET(CPACK_GENERATOR "ZIP") SET(CPACK_SOURCE_GENERATOR "ZIP") ELSE() SET(CPACK_GENERATOR "TGZ") SET(CPACK_SOURCE_GENERATOR "TGZ") ENDIF() INCLUDE(CPack) MESSAGE(STATUS "MariaDB Connector/c configuration:") MESSAGE(STATUS "CPack generation: ${CPACK_GENERATOR}") IF(CLIENT_DOCS) MESSAGE(STATUS "Documentation included from ${CLIENT_DOCS}") ENDIF() MESSAGE(STATUS "SSL support: ${WITH_OPENSSL}") MESSAGE(STATUS "Experimental Sqlite support: ${WITH_SQLITE}") IF(WITH_EXTERNAL_ZLIB) MESSAGE(STATUS "Zlib support: ${WITH_EXTERNAL_ZLIB}") ELSE() MESSAGE(STATUS "Zlib support: yes (using bundled zlib)") ENDIF() MESSAGE(STATUS "Installation layout: ${INSTALL_LAYOUT}") MESSAGE(STATUS "Include files will be installed in ${PREFIX_INSTALL_DIR}/${INCLUDE_INSTALL_DIR}/${SUFFIX_INSTALL_DIR}") MESSAGE(STATUS "Libraries will be installed in ${PREFIX_INSTALL_DIR}/${LIB_INSTALL_DIR}/${LIBSUFFIX_INSTALL_DIR}") MESSAGE(STATUS "Binaries will be installed in ${PREFIX_INSTALL_DIR}/${BIN_INSTALL_DIR}") MESSAGE(STATUS "Required: ${CMAKE_REQUIRED_LIBRARIES}")