summaryrefslogtreecommitdiff
path: root/cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake')
-rw-r--r--cmake/CPackRPM.cmake16
-rw-r--r--cmake/abi_check.cmake11
-rw-r--r--cmake/build_configurations/mysql_release.cmake58
-rw-r--r--cmake/character_sets.cmake2
-rw-r--r--cmake/configure.pl17
-rw-r--r--cmake/cpack_deb.cmake9
-rw-r--r--cmake/cpack_rpm.cmake263
-rw-r--r--cmake/create_initial_db.cmake.in2
-rw-r--r--cmake/ctest.cmake24
-rw-r--r--cmake/do_abi_check.cmake10
-rw-r--r--cmake/dtrace.cmake21
-rw-r--r--cmake/install_layout.cmake330
-rw-r--r--cmake/install_macros.cmake215
-rw-r--r--cmake/jemalloc.cmake34
-rw-r--r--cmake/libutils.cmake53
-rw-r--r--cmake/maintainer.cmake19
-rw-r--r--cmake/make_dist.cmake.in52
-rw-r--r--cmake/mysql_add_executable.cmake10
-rw-r--r--cmake/mysql_version.cmake31
-rw-r--r--cmake/os/FreeBSD.cmake11
-rw-r--r--cmake/os/Linux.cmake2
-rw-r--r--cmake/os/SunOS.cmake5
-rw-r--r--cmake/os/Windows.cmake24
-rw-r--r--cmake/os/WindowsCache.cmake25
-rw-r--r--cmake/package_name.cmake4
-rw-r--r--cmake/plugin.cmake85
-rw-r--r--cmake/readline.cmake165
-rw-r--r--cmake/ssl.cmake31
-rw-r--r--cmake/versioninfo.rc.in76
-rw-r--r--cmake/win_compatibility.manifest22
30 files changed, 997 insertions, 630 deletions
diff --git a/cmake/CPackRPM.cmake b/cmake/CPackRPM.cmake
new file mode 100644
index 00000000000..1d22387d098
--- /dev/null
+++ b/cmake/CPackRPM.cmake
@@ -0,0 +1,16 @@
+#
+# Wrapper for CPackRPM.cmake
+#
+
+# load the original CPackRPM.cmake
+set(orig_CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH})
+unset(CMAKE_MODULE_PATH)
+include(CPackRPM)
+set(CMAKE_MODULE_PATH ${orig_CMAKE_MODULE_PATH})
+
+# per-component cleanup
+foreach(_RPM_SPEC_HEADER URL REQUIRES SUGGESTS PROVIDES OBSOLETES PREFIX CONFLICTS AUTOPROV AUTOREQ AUTOREQPROV)
+ unset(TMP_RPM_${_RPM_SPEC_HEADER})
+ unset(CPACK_RPM_PACKAGE_${_RPM_SPEC_HEADER}_TMP)
+endforeach()
+
diff --git a/cmake/abi_check.cmake b/cmake/abi_check.cmake
index 9948f526b7a..cca595c5635 100644
--- a/cmake/abi_check.cmake
+++ b/cmake/abi_check.cmake
@@ -55,6 +55,17 @@ IF(CMAKE_COMPILER_IS_GNUCC AND RUN_ABI_CHECK)
VERBATIM
)
+ ADD_CUSTOM_TARGET(abi_update
+ COMMAND ${CMAKE_COMMAND}
+ -DCOMPILER=${COMPILER}
+ -DABI_UPDATE=1
+ -DSOURCE_DIR=${CMAKE_SOURCE_DIR}
+ -DBINARY_DIR=${CMAKE_BINARY_DIR}
+ "-DABI_HEADERS=${API_PREPROCESSOR_HEADER}"
+ -P ${CMAKE_SOURCE_DIR}/cmake/do_abi_check.cmake
+ VERBATIM
+ )
+
ADD_CUSTOM_TARGET(abi_check_all
COMMAND ${CMAKE_COMMAND}
-DCOMPILER=${COMPILER}
diff --git a/cmake/build_configurations/mysql_release.cmake b/cmake/build_configurations/mysql_release.cmake
index 58808943124..39ad0e68d35 100644
--- a/cmake/build_configurations/mysql_release.cmake
+++ b/cmake/build_configurations/mysql_release.cmake
@@ -1,4 +1,5 @@
-# Copyright (c) 2010, 2017, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2018, MariaDB Corporation
#
# 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
@@ -65,7 +66,8 @@ IF(FEATURE_SET)
IF(num GREATER FEATURE_SET_small)
SET(WITH_ARCHIVE_STORAGE_ENGINE ON)
SET(WITH_BLACKHOLE_STORAGE_ENGINE ON)
- SET(WITH_FEDERATED_STORAGE_ENGINE ON)
+ SET(WITH_FEDERATEDX_STORAGE_ENGINE ON)
+ SET(WITH_PLUGIN_FEEDBACK ON)
ENDIF()
IF(num GREATER FEATURE_SET_classic)
SET(WITH_INNOBASE_STORAGE_ENGINE ON)
@@ -93,24 +95,39 @@ IF(FEATURE_SET)
ENDIF()
OPTION(ENABLED_LOCAL_INFILE "" ON)
-SET(WITH_SSL bundled CACHE STRING "")
-SET(WITH_ZLIB bundled CACHE STRING "")
+IF(RPM)
+ SET(WITH_SSL system CACHE STRING "")
+ SET(WITH_ZLIB system CACHE STRING "")
+ SET(CHECKMODULE /usr/bin/checkmodule CACHE STRING "")
+ SET(SEMODULE_PACKAGE /usr/bin/semodule_package CACHE STRING "")
+ELSEIF(DEB)
+ SET(WITH_SSL system CACHE STRING "")
+ SET(WITH_ZLIB system CACHE STRING "")
+ SET(WITH_LIBWRAP ON)
+ SET(WITH_MAX ON)
+ SET(HAVE_EMBEDDED_PRIVILEGE_CONTROL ON)
+ELSE()
+ SET(WITH_SSL bundled CACHE STRING "")
+ SET(WITH_ZLIB bundled CACHE STRING "")
+ENDIF()
IF(NOT COMPILATION_COMMENT)
- SET(COMPILATION_COMMENT "MySQL Community Server (GPL)")
+ SET(COMPILATION_COMMENT "MariaDB Server")
ENDIF()
-IF(UNIX)
- SET(WITH_EXTRA_CHARSETS all CACHE STRING "")
- IF(EXISTS "${CMAKE_SOURCE_DIR}/COPYING")
- OPTION(WITH_READLINE "" ON)
- ELSE()
- OPTION(WITH_LIBEDIT "" ON)
+IF(WIN32)
+ IF(NOT CMAKE_USING_VC_FREE_TOOLS)
+ # Sign executables with authenticode certificate
+ SET(SIGNCODE 1 CACHE BOOL "")
ENDIF()
+ENDIF()
- OPTION(WITH_PIC "" ON) # Why?
+IF(UNIX)
+ SET(WITH_EXTRA_CHARSETS all CACHE STRING "")
IF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
+ SET(WITH_JEMALLOC "static" CACHE STRING "")
+
IF(NOT IGNORE_AIO_CHECK)
# Ensure aio is available on Linux (required by InnoDB)
CHECK_INCLUDE_FILES(libaio.h HAVE_LIBAIO_H)
@@ -126,10 +143,15 @@ IF(UNIX)
If you really do not want it, pass -DIGNORE_AIO_CHECK to cmake.
")
ENDIF()
- ENDIF()
- # Enable fast mutexes on Linux
- OPTION(WITH_FAST_MUTEXES "" ON)
+ # Remove libaio dependency from mysqld
+ SET(XTRADB_PREFER_STATIC_LIBAIO 1)
+
+ # Unfortunately, linking shared libmysqld with static aio
+ # does not work, unless we add also dynamic one. This also means
+ # libmysqld.so will depend on libaio.so
+ SET(LIBMYSQLD_SO_EXTRA_LIBS aio)
+ ENDIF()
ENDIF()
ENDIF()
@@ -139,12 +161,12 @@ IF(UNIX)
# Default GCC flags
IF(CMAKE_COMPILER_IS_GNUCC)
- SET(COMMON_C_FLAGS "-g -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing")
+ SET(COMMON_C_FLAGS "-g -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing -Wno-uninitialized")
SET(CMAKE_C_FLAGS_DEBUG "-O ${COMMON_C_FLAGS}")
SET(CMAKE_C_FLAGS_RELWITHDEBINFO "-O3 ${COMMON_C_FLAGS}")
ENDIF()
IF(CMAKE_COMPILER_IS_GNUCXX)
- SET(COMMON_CXX_FLAGS "-g -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing")
+ SET(COMMON_CXX_FLAGS "-g -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing -Wno-uninitialized")
SET(CMAKE_CXX_FLAGS_DEBUG "-O ${COMMON_CXX_FLAGS}")
SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 ${COMMON_CXX_FLAGS}")
ENDIF()
@@ -162,6 +184,7 @@ IF(UNIX)
SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "+O2 ${COMMON_CXX_FLAGS}")
ENDIF()
ENDIF()
+ SET(WITH_SSL no)
ENDIF()
# Linux flags
@@ -177,6 +200,7 @@ IF(UNIX)
SET(CMAKE_CXX_FLAGS_DEBUG "${COMMON_CXX_FLAGS}")
SET(CMAKE_C_FLAGS_RELWITHDEBINFO "-O3 -unroll2 -ip ${COMMON_C_FLAGS}")
SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 -unroll2 -ip ${COMMON_CXX_FLAGS}")
+ SET(WITH_SSL no)
ENDIF()
ENDIF()
diff --git a/cmake/character_sets.cmake b/cmake/character_sets.cmake
index 1cf63ed1462..74a39e09cac 100644
--- a/cmake/character_sets.cmake
+++ b/cmake/character_sets.cmake
@@ -37,7 +37,7 @@ sjis swe7 tis620 ucs2 ujis utf8 utf8mb4 utf16 utf32)
SET (EXTRA_CHARSETS "all")
SET(WITH_EXTRA_CHARSETS ${EXTRA_CHARSETS} CACHE
- STRING "Options are: none, complex, all")
+ STRING "Options are: none complex all")
IF(WITH_EXTRA_CHARSETS MATCHES "complex")
diff --git a/cmake/configure.pl b/cmake/configure.pl
index 76a5a8994ee..d5c0b9b061a 100644
--- a/cmake/configure.pl
+++ b/cmake/configure.pl
@@ -25,6 +25,7 @@ my $cmakeargs = "";
# Assume this script is in <srcroot>/cmake
my $srcdir = dirname(dirname(abs_path($0)));
my $cmake_install_prefix="";
+my $just_print= 0;
# Sets installation directory, bindir, libdir, libexecdir etc
# the equivalent CMake variables are given without prefix
@@ -113,6 +114,11 @@ foreach my $option (@ARGV)
system("cmake ${srcdir} -LH");
exit(0);
}
+ if ($option =~ /print/)
+ {
+ $just_print=1;
+ next;
+ }
if($option =~ /with-plugins=/)
{
my @plugins= split(/,/, substr($option,13));
@@ -149,6 +155,11 @@ foreach my $option (@ARGV)
$cmakeargs = $cmakeargs." -DWITH_SSL=yes";
next;
}
+ if($option =~ /with-debug/)
+ {
+ $cmakeargs = $cmakeargs." -DCMAKE_BUILD_TYPE=Debug";
+ next;
+ }
if($option =~ /with-ssl/)
{
$cmakeargs = $cmakeargs." -DWITH_SSL=bundled";
@@ -211,6 +222,11 @@ foreach my $option (@ARGV)
$cmakeargs = $cmakeargs." -DENABLE_GCOV=ON";
next;
}
+ if ($option =~ /verbose/)
+ {
+ $cmakeargs = $cmakeargs." -DCMAKE_VERBOSE_MAKEFILE=1";
+ next;
+ }
if ($option =~ /with-client-ldflags/)
{
print("configure.pl : ignoring $option\n");
@@ -228,6 +244,7 @@ foreach my $option (@ARGV)
}
print("configure.pl : calling cmake $srcdir $cmakeargs\n");
+exit(0) if ($just_print);
unlink("CMakeCache.txt");
my $rc = system("cmake $srcdir $cmakeargs");
exit($rc);
diff --git a/cmake/cpack_deb.cmake b/cmake/cpack_deb.cmake
new file mode 100644
index 00000000000..5fb9db1f07f
--- /dev/null
+++ b/cmake/cpack_deb.cmake
@@ -0,0 +1,9 @@
+#
+# One day it'll be a complete solution for building deb packages with CPack
+# But for now it's only to make INSTALL_DOCUMENTATION function happy
+#
+IF(DEB)
+SET(CPACK_COMPONENT_SERVER_GROUP "server")
+SET(CPACK_COMPONENT_README_GROUP "server")
+ENDIF(DEB)
+
diff --git a/cmake/cpack_rpm.cmake b/cmake/cpack_rpm.cmake
new file mode 100644
index 00000000000..4e9410306a8
--- /dev/null
+++ b/cmake/cpack_rpm.cmake
@@ -0,0 +1,263 @@
+IF(RPM)
+
+SET(CPACK_GENERATOR "RPM")
+SET(CPACK_RPM_PACKAGE_DEBUG 1)
+SET(CPACK_PACKAGING_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX})
+CMAKE_MINIMUM_REQUIRED(VERSION 2.8.7)
+
+SET(CPACK_RPM_COMPONENT_INSTALL ON)
+
+SET(CPACK_COMPONENT_SERVER_GROUP "server")
+SET(CPACK_COMPONENT_MANPAGESSERVER_GROUP "server")
+SET(CPACK_COMPONENT_INIFILES_GROUP "server")
+SET(CPACK_COMPONENT_SERVER_SCRIPTS_GROUP "server")
+SET(CPACK_COMPONENT_SUPPORTFILES_GROUP "server")
+SET(CPACK_COMPONENT_DEVELOPMENT_GROUP "devel")
+SET(CPACK_COMPONENT_MANPAGESDEVELOPMENT_GROUP "devel")
+SET(CPACK_COMPONENT_TEST_GROUP "test")
+SET(CPACK_COMPONENT_MANPAGESTEST_GROUP "test")
+SET(CPACK_COMPONENT_CLIENT_GROUP "client")
+SET(CPACK_COMPONENT_MANPAGESCLIENT_GROUP "client")
+SET(CPACK_COMPONENT_README_GROUP "server")
+SET(CPACK_COMPONENT_SHAREDLIBRARIES_GROUP "shared")
+SET(CPACK_COMPONENT_COMMON_GROUP "common")
+SET(CPACK_COMPONENT_COMPAT_GROUP "compat")
+SET(CPACK_COMPONENTS_ALL Server ManPagesServer IniFiles Server_Scripts
+ SupportFiles Development ManPagesDevelopment
+ ManPagesTest Readme ManPagesClient Test
+ Common Client SharedLibraries)
+
+SET(CPACK_RPM_PACKAGE_NAME "MariaDB")
+IF(CMAKE_VERSION VERSION_LESS "3.6.0")
+ SET(CPACK_PACKAGE_FILE_NAME "${CPACK_RPM_PACKAGE_NAME}-${VERSION}-${RPM}-${CMAKE_SYSTEM_PROCESSOR}")
+ELSE()
+ SET(CPACK_RPM_FILE_NAME "RPM-DEFAULT")
+ SET(CPACK_RPM_DEBUGINFO_PACKAGE ON)
+ENDIF()
+
+SET(CPACK_RPM_PACKAGE_RELEASE "1%{?dist}")
+SET(CPACK_RPM_PACKAGE_LICENSE "GPLv2")
+SET(CPACK_RPM_PACKAGE_RELOCATABLE FALSE)
+SET(CPACK_RPM_PACKAGE_GROUP "Applications/Databases")
+SET(CPACK_RPM_PACKAGE_URL "http://mariadb.org")
+SET(CPACK_RPM_PACKAGE_SUMMARY "MariaDB: a very fast and robust SQL database server")
+SET(CPACK_RPM_PACKAGE_DESCRIPTION "${CPACK_RPM_PACKAGE_SUMMARY}
+
+It is GPL v2 licensed, which means you can use the it free of charge under the
+conditions of the GNU General Public License Version 2 (http://www.gnu.org/licenses/).
+
+MariaDB documentation can be found at http://kb.askmonty.org/
+MariaDB bug reports should be submitted through https://mariadb.atlassian.net/
+
+")
+
+SET(CPACK_RPM_SPEC_MORE_DEFINE "
+%define mysql_vendor ${CPACK_PACKAGE_VENDOR}
+%define mysqlversion ${MYSQL_NO_DASH_VERSION}
+%define mysqlbasedir ${CMAKE_INSTALL_PREFIX}
+%define mysqldatadir ${INSTALL_MYSQLDATADIR}
+%define mysqld_user mysql
+%define mysqld_group mysql
+%define _bindir ${CMAKE_INSTALL_PREFIX}/${INSTALL_BINDIR}
+%define _sbindir ${CMAKE_INSTALL_PREFIX}/${INSTALL_SBINDIR}
+%define _sysconfdir ${INSTALL_SYSCONFDIR}
+")
+
+# this creative hack is described here: http://www.cmake.org/pipermail/cmake/2012-January/048416.html
+# both /etc and /etc/init.d should be ignored as of 2.8.7
+# only /etc/init.d as of 2.8.8
+# and eventually this hack should go away completely
+SET(CPACK_RPM_SPEC_MORE_DEFINE "${CPACK_RPM_SPEC_MORE_DEFINE}
+%define ignore \#
+")
+
+SET(CPACK_RPM_PACKAGE_REQUIRES "MariaDB-common")
+
+SET(ignored
+ "%ignore /etc"
+ "%ignore /etc/init.d"
+ "%ignore /etc/logrotate.d"
+ "%ignore ${CMAKE_INSTALL_PREFIX}"
+ "%ignore ${CMAKE_INSTALL_PREFIX}/bin"
+ "%ignore ${CMAKE_INSTALL_PREFIX}/include"
+ "%ignore ${CMAKE_INSTALL_PREFIX}/lib"
+ "%ignore ${CMAKE_INSTALL_PREFIX}/lib64"
+ "%ignore ${CMAKE_INSTALL_PREFIX}/sbin"
+ "%ignore ${CMAKE_INSTALL_PREFIX}/share"
+ "%ignore ${CMAKE_INSTALL_PREFIX}/share/aclocal"
+ "%ignore ${CMAKE_INSTALL_PREFIX}/share/doc"
+ "%ignore ${CMAKE_INSTALL_PREFIX}/share/man"
+ "%ignore ${CMAKE_INSTALL_PREFIX}/share/man/man1*"
+ "%ignore ${CMAKE_INSTALL_PREFIX}/share/man/man8*"
+ )
+
+SET(CPACK_RPM_server_USER_FILELIST ${ignored} "%config(noreplace) ${INSTALL_SYSCONF2DIR}/*")
+SET(CPACK_RPM_common_USER_FILELIST ${ignored} "%config(noreplace) ${INSTALL_SYSCONFDIR}/my.cnf")
+SET(CPACK_RPM_shared_USER_FILELIST ${ignored} "%config(noreplace) ${INSTALL_SYSCONF2DIR}/*")
+SET(CPACK_RPM_client_USER_FILELIST ${ignored} "%config(noreplace) ${INSTALL_SYSCONF2DIR}/*")
+SET(CPACK_RPM_compat_USER_FILELIST ${ignored})
+SET(CPACK_RPM_devel_USER_FILELIST ${ignored})
+SET(CPACK_RPM_test_USER_FILELIST ${ignored})
+
+# "set/append array" - append a set of strings, separated by a space
+MACRO(SETA var)
+ FOREACH(v ${ARGN})
+ SET(${var} "${${var}} ${v}")
+ ENDFOREACH()
+ENDMACRO(SETA)
+
+SETA(CPACK_RPM_client_PACKAGE_OBSOLETES
+ "mysql-client"
+ "MySQL-client"
+ "MySQL-OurDelta-client")
+SETA(CPACK_RPM_client_PACKAGE_PROVIDES
+ "MySQL-client"
+ "mysql-client")
+
+SETA(CPACK_RPM_devel_PACKAGE_OBSOLETES
+ "MySQL-devel"
+ "MySQL-OurDelta-devel")
+SETA(CPACK_RPM_devel_PACKAGE_PROVIDES
+ "MySQL-devel")
+
+SETA(CPACK_RPM_server_PACKAGE_OBSOLETES
+ "MariaDB"
+ "MySQL"
+ "mysql-server"
+ "MySQL-server"
+ "MySQL-OurDelta-server")
+SETA(CPACK_RPM_server_PACKAGE_PROVIDES
+ "MariaDB"
+ "MySQL"
+ "MySQL-server"
+ "msqlormysql"
+ "mysql-server")
+
+SETA(CPACK_RPM_shared_PACKAGE_OBSOLETES
+ "mysql-shared"
+ "MySQL-shared-standard"
+ "MySQL-shared-pro"
+ "MySQL-shared-pro-cert"
+ "MySQL-shared-pro-gpl"
+ "MySQL-shared-pro-gpl-cert"
+ "MySQL-shared"
+ "MySQL-OurDelta-shared")
+SETA(CPACK_RPM_shared_PACKAGE_PROVIDES
+ "MySQL-shared"
+ "mysql-shared")
+
+SETA(CPACK_RPM_test_PACKAGE_OBSOLETES
+ "MySQL-test"
+ "MySQL-OurDelta-test")
+SETA(CPACK_RPM_test_PACKAGE_PROVIDES
+ "MySQL-test")
+
+SETA(CPACK_RPM_server_PACKAGE_REQUIRES
+ ${CPACK_RPM_PACKAGE_REQUIRES}
+ "MariaDB-client")
+
+SET(CPACK_RPM_server_PRE_INSTALL_SCRIPT_FILE ${CMAKE_SOURCE_DIR}/support-files/rpm/server-prein.sh)
+SET(CPACK_RPM_server_PRE_UNINSTALL_SCRIPT_FILE ${CMAKE_SOURCE_DIR}/support-files/rpm/server-preun.sh)
+SET(CPACK_RPM_server_POST_INSTALL_SCRIPT_FILE ${CMAKE_SOURCE_DIR}/support-files/rpm/server-postin.sh)
+SET(CPACK_RPM_server_POST_UNINSTALL_SCRIPT_FILE ${CMAKE_SOURCE_DIR}/support-files/rpm/server-postun.sh)
+SET(CPACK_RPM_shared_POST_INSTALL_SCRIPT_FILE ${CMAKE_SOURCE_DIR}/support-files/rpm/shared-post.sh)
+SET(CPACK_RPM_shared_POST_UNINSTALL_SCRIPT_FILE ${CMAKE_SOURCE_DIR}/support-files/rpm/shared-post.sh)
+
+MACRO(ALTERNATIVE_NAME real alt)
+ SET(ver "%{version}-%{release}")
+ IF (${epoch})
+ SET(ver "${epoch}:${ver}")
+ ENDIF()
+
+ SET(p "CPACK_RPM_${real}_PACKAGE_PROVIDES")
+ SET(${p} "${${p}} ${alt} = ${ver} ${alt}%{?_isa} = ${ver} config(${alt}) = ${ver}")
+ SET(o "CPACK_RPM_${real}_PACKAGE_OBSOLETES")
+ SET(${o} "${${o}} ${alt} ${alt}%{_isa}")
+ENDMACRO(ALTERNATIVE_NAME)
+
+ALTERNATIVE_NAME("devel" "mysql-devel")
+ALTERNATIVE_NAME("server" "mysql-server")
+ALTERNATIVE_NAME("test" "mysql-test")
+
+# Argh! Different distributions call packages differently, to be a drop-in
+# replacement we have to fake distribution-speficic dependencies
+
+IF(RPM MATCHES "(rhel|centos)5")
+ ALTERNATIVE_NAME("shared" "mysql")
+ELSEIF(RPM MATCHES "(rhel|centos)6")
+ ALTERNATIVE_NAME("client" "mysql")
+ ALTERNATIVE_NAME("shared" "mysql-libs")
+ELSEIF(RPM MATCHES "fedora" OR RPM MATCHES "(rhel|centos)7")
+ SET(epoch 1) # this is fedora
+ ALTERNATIVE_NAME("client" "mariadb")
+ ALTERNATIVE_NAME("client" "mysql")
+ ALTERNATIVE_NAME("devel" "mariadb-devel")
+ ALTERNATIVE_NAME("server" "mariadb-server")
+ ALTERNATIVE_NAME("server" "mysql-compat-server")
+ ALTERNATIVE_NAME("shared" "mariadb-libs")
+ ALTERNATIVE_NAME("shared" "mysql-libs")
+ ALTERNATIVE_NAME("test" "mariadb-test")
+ SET(CPACK_RPM_common_PACKAGE_CONFLICTS "mariadb-libs < 1:%{version}-%{release}")
+ENDIF()
+
+# workaround for lots of perl dependencies added by rpmbuild
+SETA(CPACK_RPM_test_PACKAGE_PROVIDES
+ "perl(lib::mtr_gcov.pl)"
+ "perl(lib::mtr_gprof.pl)"
+ "perl(lib::mtr_io.pl)"
+ "perl(lib::mtr_misc.pl)"
+ "perl(lib::mtr_process.pl)"
+ "perl(lib::v1/mtr_cases.pl)"
+ "perl(lib::v1/mtr_gcov.pl)"
+ "perl(lib::v1/mtr_gprof.pl)"
+ "perl(lib::v1/mtr_im.pl)"
+ "perl(lib::v1/mtr_io.pl)"
+ "perl(lib::v1/mtr_match.pl)"
+ "perl(lib::v1/mtr_misc.pl)"
+ "perl(lib::v1/mtr_process.pl)"
+ "perl(lib::v1/mtr_report.pl)"
+ "perl(lib::v1/mtr_stress.pl)"
+ "perl(lib::v1/mtr_timer.pl)"
+ "perl(lib::v1/mtr_unique.pl)"
+ "perl(mtr_cases)"
+ "perl(mtr_io.pl)"
+ "perl(mtr_match)"
+ "perl(mtr_misc.pl)"
+ "perl(mtr_gcov.pl)"
+ "perl(mtr_gprof.pl)"
+ "perl(mtr_process.pl)"
+ "perl(mtr_report)"
+ "perl(mtr_results)"
+ "perl(mtr_unique)")
+
+# If we want to build build MariaDB-shared-compat,
+# extract compat libraries from MariaDB-shared-5.3 rpm
+FILE(GLOB compat_rpm RELATIVE ${CMAKE_SOURCE_DIR}
+ "${CMAKE_SOURCE_DIR}/../MariaDB-shared-5.3.*.rpm")
+IF (compat_rpm)
+ MESSAGE("Using ${compat_rpm} to build MariaDB-compat")
+ INSTALL(CODE "EXECUTE_PROCESS(
+ COMMAND rpm2cpio ${CMAKE_SOURCE_DIR}/${compat_rpm}
+ COMMAND cpio --extract --make-directories */libmysqlclient*.so.* -
+ WORKING_DIRECTORY \$ENV{DESTDIR})
+ EXECUTE_PROCESS(
+ COMMAND chmod -R a+rX .
+ WORKING_DIRECTORY \$ENV{DESTDIR})"
+ COMPONENT Compat)
+ SET(CPACK_COMPONENTS_ALL ${CPACK_COMPONENTS_ALL} Compat)
+
+ # RHEL6/CentOS6 install Postfix by default, and it requires
+ # libmysqlclient.so.16 that pulls in mysql-libs-5.1.x
+ # And the latter conflicts with our rpms.
+ # Make sure that for these distribuions all our rpms require
+ # MariaDB-compat, that will replace mysql-libs-5.1
+ IF(RPM MATCHES "(rhel|centos)6")
+ SET(CPACK_RPM_common_PACKAGE_REQUIRES "MariaDB-compat")
+ ENDIF()
+ENDIF(compat_rpm)
+
+SET(CPACK_RPM_compat_PACKAGE_PROVIDES "mysql-libs = 5.3.5") # exact version doesn't matter as long as it greater than 5.1
+SET(CPACK_RPM_compat_PACKAGE_OBSOLETES "mysql-libs < 5.3.5")
+
+ENDIF(RPM)
+
diff --git a/cmake/create_initial_db.cmake.in b/cmake/create_initial_db.cmake.in
index a7b725a07f1..ce638b14e39 100644
--- a/cmake/create_initial_db.cmake.in
+++ b/cmake/create_initial_db.cmake.in
@@ -31,7 +31,7 @@ ENDIF()
# Create bootstrapper SQL script
FILE(WRITE bootstrap.sql "use mysql;\n" )
-FOREACH(FILENAME mysql_system_tables.sql mysql_system_tables_data.sql)
+FOREACH(FILENAME mysql_system_tables.sql mysql_system_tables_data.sql mysql_performance_tables.sql)
FILE(STRINGS ${CMAKE_SOURCE_DIR}/scripts/${FILENAME} CONTENTS)
FOREACH(STR ${CONTENTS})
IF(NOT STR MATCHES "@current_hostname")
diff --git a/cmake/ctest.cmake b/cmake/ctest.cmake
new file mode 100644
index 00000000000..08852a366f6
--- /dev/null
+++ b/cmake/ctest.cmake
@@ -0,0 +1,24 @@
+
+INCLUDE(${MYSQL_CMAKE_SCRIPT_DIR}/cmake_parse_arguments.cmake)
+
+MACRO(MY_ADD_TEST name)
+ ADD_TEST(${name} ${name}-t)
+ENDMACRO()
+
+MACRO (MY_ADD_TESTS)
+ MYSQL_PARSE_ARGUMENTS(ARG "LINK_LIBRARIES;EXT" "" ${ARGN})
+
+ INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include
+ ${CMAKE_SOURCE_DIR}/unittest/mytap)
+
+ IF (NOT ARG_EXT)
+ SET(ARG_EXT "c")
+ ENDIF()
+
+ FOREACH(name ${ARG_DEFAULT_ARGS})
+ ADD_EXECUTABLE(${name}-t "${name}-t.${ARG_EXT}")
+ TARGET_LINK_LIBRARIES(${name}-t mytap ${ARG_LINK_LIBRARIES})
+ MY_ADD_TEST(${name})
+ ENDFOREACH()
+ENDMACRO()
+
diff --git a/cmake/do_abi_check.cmake b/cmake/do_abi_check.cmake
index e42f11abde2..c0ffce353f3 100644
--- a/cmake/do_abi_check.cmake
+++ b/cmake/do_abi_check.cmake
@@ -58,7 +58,7 @@ FOREACH(file ${ABI_HEADERS})
EXECUTE_PROCESS(
COMMAND ${COMPILER}
- -E -nostdinc -dI -DMYSQL_ABI_CHECK -I${SOURCE_DIR}/include
+ -E -nostdinc -DMYSQL_ABI_CHECK -I${SOURCE_DIR}/include
-I${BINARY_DIR}/include -I${SOURCE_DIR}/include/mysql -I${SOURCE_DIR}/sql
${file}
ERROR_QUIET OUTPUT_FILE ${tmpfile})
@@ -75,8 +75,12 @@ FOREACH(file ${ABI_HEADERS})
EXECUTE_PROCESS(
COMMAND diff -w ${file}.pp ${abi_check_out} RESULT_VARIABLE result)
IF(NOT ${result} EQUAL 0)
- MESSAGE(FATAL_ERROR
- "ABI check found difference between ${file}.pp and ${abi_check_out}")
+ IF(ABI_UPDATE)
+ EXECUTE_PROCESS(COMMAND mv -v ${abi_check_out} ${file}.pp)
+ ELSE(ABI_UPDATE)
+ MESSAGE(FATAL_ERROR
+ "ABI check found difference between ${file}.pp and ${abi_check_out}")
+ ENDIF(ABI_UPDATE)
ENDIF()
FILE(REMOVE ${abi_check_out})
ENDFOREACH()
diff --git a/cmake/dtrace.cmake b/cmake/dtrace.cmake
index 0a772ca2ba8..3edcdc4c1c5 100644
--- a/cmake/dtrace.cmake
+++ b/cmake/dtrace.cmake
@@ -34,18 +34,16 @@ MACRO(CHECK_DTRACE)
FIND_PROGRAM(DTRACE dtrace)
MARK_AS_ADVANCED(DTRACE)
+ IF(CMAKE_C_COMPILER MATCHES "ccache" AND CMAKE_SYSTEM_NAME MATCHES "Linux")
+ # dtrace fails on fedora if CC='ccache gcc' is used
+ SET(BUGGY_LINUX_DTRACE 1)
+ ENDIF()
+
# On FreeBSD, dtrace does not handle userland tracing yet
IF(DTRACE AND NOT CMAKE_SYSTEM_NAME MATCHES "FreeBSD"
- AND NOT BUGGY_GCC_NO_DTRACE_MODULES)
- # 5.5 not able to do Sun dtrace on linux, just disable it
- EXECUTE_PROCESS(
- COMMAND ${DTRACE} -V
- OUTPUT_VARIABLE out)
- IF(out MATCHES "Sun D" AND CMAKE_SYSTEM_NAME MATCHES "Linux")
- SET(ENABLE_DTRACE OFF CACHE BOOL "Sun DTrace on Linux not supported")
- ELSE()
- SET(ENABLE_DTRACE ON CACHE BOOL "Enable dtrace")
- ENDIF()
+ AND NOT BUGGY_GCC_NO_DTRACE_MODULES
+ AND NOT BUGGY_LINUX_DTRACE)
+ SET(ENABLE_DTRACE ON CACHE BOOL "Enable dtrace")
ENDIF()
SET(HAVE_DTRACE ${ENABLE_DTRACE})
IF(CMAKE_SYSTEM_NAME MATCHES "SunOS")
@@ -88,6 +86,9 @@ IF(ENABLE_DTRACE)
${CMAKE_BINARY_DIR}/include/probes_mysql_dtrace.h
${CMAKE_BINARY_DIR}/include/probes_mysql_nodtrace.h
)
+ELSE()
+ CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/include/probes_mysql_nodtrace.h.in
+ ${CMAKE_BINARY_DIR}/include/probes_mysql_nodtrace.h COPYONLY)
ENDIF()
FUNCTION(DTRACE_INSTRUMENT target)
diff --git a/cmake/install_layout.cmake b/cmake/install_layout.cmake
index 4fd18b049f2..ebf3852182c 100644
--- a/cmake/install_layout.cmake
+++ b/cmake/install_layout.cmake
@@ -1,4 +1,4 @@
-# Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
#
# 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
@@ -22,9 +22,8 @@
# and relative links. Windows zip uses the same tarball layout but without
# the build prefix.
#
-# RPM, SLES
+# RPM
# Build as per default RPM layout, with prefix=/usr
-# Note: The layout for ULN RPMs differs, see the "RPM" section.
#
# DEB
# Build as per STANDALONE, prefix=/opt/mysql/server-$major.$minor
@@ -32,28 +31,18 @@
# SVR4
# Solaris package layout suitable for pkg* tools, prefix=/opt/mysql/mysql
#
-# FREEBSD, GLIBC, OSX, TARGZ
-# Build with prefix=/usr/local/mysql, create tarball with install prefix="."
-# and relative links.
-#
-# WIN
-# Windows zip : same as tarball layout but without the build prefix
-#
# To force a directory layout, use -DINSTALL_LAYOUT=<layout>.
#
# The default is STANDALONE.
#
-# Note : At present, RPM and SLES layouts are similar. This is also true
-# for layouts like FREEBSD, GLIBC, OSX, TARGZ. However, they provide
-# opportunity to fine-tune deployment for each platform without
-# affecting all other types of deployment.
-#
# There is the possibility to further fine-tune installation directories.
# Several variables can be overwritten:
#
# - INSTALL_BINDIR (directory with client executables and scripts)
# - INSTALL_SBINDIR (directory with mysqld)
# - INSTALL_SCRIPTDIR (several scripts, rarely used)
+# - INSTALL_SYSCONFDIR (my.cnf config file. Usually /etc or nothing)
+# - INSTALL_SYSCONF2DIR (additional config files, e.g. /etc/mysql/conf.d)
#
# - INSTALL_LIBDIR (directory with client end embedded libraries)
# - INSTALL_PLUGINDIR (directory for plugins)
@@ -72,26 +61,30 @@
# - INSTALL_SUPPORTFILESDIR (various extra support files)
#
# - INSTALL_MYSQLDATADIR (data directory)
-# - INSTALL_SECURE_FILE_PRIVDIR (--secure-file-priv directory)
+#
+# - INSTALL_UNIX_ADDRDIR (path to mysql.sock)
#
# When changing this page, _please_ do not forget to update public Wiki
# http://forge.mysql.com/wiki/CMake#Fine-tuning_installation_paths
IF(NOT INSTALL_LAYOUT)
- SET(DEFAULT_INSTALL_LAYOUT "STANDALONE")
+ IF(DEB)
+ SET(INSTALL_LAYOUT "DEB")
+ ELSEIF(RPM)
+ SET(INSTALL_LAYOUT "RPM")
+ ELSE()
+ SET(INSTALL_LAYOUT "STANDALONE")
+ ENDIF()
ENDIF()
-SET(INSTALL_LAYOUT "${DEFAULT_INSTALL_LAYOUT}"
-CACHE STRING "Installation directory layout. Options are: TARGZ (as in tar.gz installer), WIN (as in zip installer), STANDALONE, RPM, DEB, SVR4, FREEBSD, GLIBC, OSX, SLES")
+SET(INSTALL_LAYOUT "${INSTALL_LAYOUT}"
+CACHE STRING "Installation directory layout. Options are: STANDALONE (as in zip or tar.gz installer) RPM DEB SVR4")
IF(UNIX)
- IF(INSTALL_LAYOUT MATCHES "RPM" OR
- INSTALL_LAYOUT MATCHES "SLES")
+ IF(INSTALL_LAYOUT MATCHES "RPM")
SET(default_prefix "/usr")
ELSEIF(INSTALL_LAYOUT MATCHES "DEB")
- SET(default_prefix "/opt/mysql/server-${MYSQL_BASE_VERSION}")
- # This is required to avoid "cpack -GDEB" default of prefix=/usr
- SET(CPACK_SET_DESTDIR ON)
+ SET(default_prefix "/usr")
ELSEIF(INSTALL_LAYOUT MATCHES "SVR4")
SET(default_prefix "/opt/mysql/mysql")
ELSE()
@@ -101,20 +94,7 @@ IF(UNIX)
SET(CMAKE_INSTALL_PREFIX ${default_prefix}
CACHE PATH "install prefix" FORCE)
ENDIF()
- SET(VALID_INSTALL_LAYOUTS "RPM" "DEB" "SVR4" "FREEBSD" "GLIBC" "OSX" "TARGZ" "SLES" "STANDALONE")
- LIST(FIND VALID_INSTALL_LAYOUTS "${INSTALL_LAYOUT}" ind)
- IF(ind EQUAL -1)
- MESSAGE(FATAL_ERROR "Invalid INSTALL_LAYOUT parameter:${INSTALL_LAYOUT}."
- " Choose between ${VALID_INSTALL_LAYOUTS}" )
- ENDIF()
-
- SET(SYSCONFDIR "${CMAKE_INSTALL_PREFIX}/etc"
- CACHE PATH "config directory (for my.cnf)")
- MARK_AS_ADVANCED(SYSCONFDIR)
-ENDIF()
-
-IF(WIN32)
- SET(VALID_INSTALL_LAYOUTS "TARGZ" "STANDALONE" "WIN")
+ SET(VALID_INSTALL_LAYOUTS "RPM" "STANDALONE" "DEB" "SVR4")
LIST(FIND VALID_INSTALL_LAYOUTS "${INSTALL_LAYOUT}" ind)
IF(ind EQUAL -1)
MESSAGE(FATAL_ERROR "Invalid INSTALL_LAYOUT parameter:${INSTALL_LAYOUT}."
@@ -123,32 +103,6 @@ IF(WIN32)
ENDIF()
#
-# plugin_tests's value should not be used by imported plugins,
-# just use if(INSTALL_PLUGINTESTDIR).
-# The plugin must set its own install path for tests
-#
-FILE(GLOB plugin_tests
- ${CMAKE_SOURCE_DIR}/plugin/*/tests
- ${CMAKE_SOURCE_DIR}/internal/plugin/*/tests
-)
-
-#
-# DEFAULT_SECURE_FILE_PRIV_DIR/DEFAULT_SECURE_FILE_PRIV_EMBEDDED_DIR
-#
-IF(INSTALL_LAYOUT MATCHES "STANDALONE" OR
- INSTALL_LAYOUT MATCHES "WIN")
- SET(secure_file_priv_path "NULL")
-ELSEIF(INSTALL_LAYOUT MATCHES "RPM" OR
- INSTALL_LAYOUT MATCHES "SLES" OR
- INSTALL_LAYOUT MATCHES "SVR4" OR
- INSTALL_LAYOUT MATCHES "DEB")
- SET(secure_file_priv_path "/var/lib/mysql-files")
-ELSE()
- SET(secure_file_priv_path "${default_prefix}/mysql-files")
-ENDIF()
-SET(secure_file_priv_embedded_path "NULL")
-
-#
# STANDALONE layout
#
SET(INSTALL_BINDIR_STANDALONE "bin")
@@ -158,7 +112,7 @@ SET(INSTALL_SCRIPTDIR_STANDALONE "scripts")
SET(INSTALL_LIBDIR_STANDALONE "lib")
SET(INSTALL_PLUGINDIR_STANDALONE "lib/plugin")
#
-SET(INSTALL_INCLUDEDIR_STANDALONE "include")
+SET(INSTALL_INCLUDEDIR_STANDALONE "include/mysql")
#
SET(INSTALL_DOCDIR_STANDALONE "docs")
SET(INSTALL_DOCREADMEDIR_STANDALONE ".")
@@ -172,160 +126,16 @@ SET(INSTALL_SQLBENCHDIR_STANDALONE ".")
SET(INSTALL_SUPPORTFILESDIR_STANDALONE "support-files")
#
SET(INSTALL_MYSQLDATADIR_STANDALONE "data")
-SET(INSTALL_PLUGINTESTDIR_STANDALONE ${plugin_tests})
-SET(INSTALL_SECURE_FILE_PRIVDIR_STANDALONE ${secure_file_priv_path})
-SET(INSTALL_SECURE_FILE_PRIV_EMBEDDEDDIR_STANDALONE ${secure_file_priv_embedded_path})
-
-#
-# WIN layout
-#
-SET(INSTALL_BINDIR_WIN "bin")
-SET(INSTALL_SBINDIR_WIN "bin")
-SET(INSTALL_SCRIPTDIR_WIN "scripts")
-#
-SET(INSTALL_LIBDIR_WIN "lib")
-SET(INSTALL_PLUGINDIR_WIN "lib/plugin")
-#
-SET(INSTALL_INCLUDEDIR_WIN "include")
-#
-SET(INSTALL_DOCDIR_WIN "docs")
-SET(INSTALL_DOCREADMEDIR_WIN ".")
-SET(INSTALL_MANDIR_WIN "man")
-SET(INSTALL_INFODIR_WIN "docs")
-#
-SET(INSTALL_SHAREDIR_WIN "share")
-SET(INSTALL_MYSQLSHAREDIR_WIN "share")
-SET(INSTALL_MYSQLTESTDIR_WIN "mysql-test")
-SET(INSTALL_SQLBENCHDIR_WIN ".")
-SET(INSTALL_SUPPORTFILESDIR_WIN "support-files")
-#
-SET(INSTALL_MYSQLDATADIR_WIN "data")
-SET(INSTALL_PLUGINTESTDIR_WIN ${plugin_tests})
-SET(INSTALL_SECURE_FILE_PRIVDIR_WIN ${secure_file_priv_path})
-SET(INSTALL_SECURE_FILE_PRIV_EMBEDDEDDIR_WIN ${secure_file_priv_embedded_path})
-
-#
-# FREEBSD layout
-#
-SET(INSTALL_BINDIR_FREEBSD "bin")
-SET(INSTALL_SBINDIR_FREEBSD "bin")
-SET(INSTALL_SCRIPTDIR_FREEBSD "scripts")
-#
-SET(INSTALL_LIBDIR_FREEBSD "lib")
-SET(INSTALL_PLUGINDIR_FREEBSD "lib/plugin")
-#
-SET(INSTALL_INCLUDEDIR_FREEBSD "include")
-#
-SET(INSTALL_DOCDIR_FREEBSD "docs")
-SET(INSTALL_DOCREADMEDIR_FREEBSD ".")
-SET(INSTALL_MANDIR_FREEBSD "man")
-SET(INSTALL_INFODIR_FREEBSD "docs")
-#
-SET(INSTALL_SHAREDIR_FREEBSD "share")
-SET(INSTALL_MYSQLSHAREDIR_FREEBSD "share")
-SET(INSTALL_MYSQLTESTDIR_FREEBSD "mysql-test")
-SET(INSTALL_SQLBENCHDIR_FREEBSD ".")
-SET(INSTALL_SUPPORTFILESDIR_FREEBSD "support-files")
-#
-SET(INSTALL_MYSQLDATADIR_FREEBSD "data")
-SET(INSTALL_PLUGINTESTDIR_FREEBSD ${plugin_tests})
-SET(INSTALL_SECURE_FILE_PRIVDIR_FREEBSD ${secure_file_priv_path})
-SET(INSTALL_SECURE_FILE_PRIV_EMBEDDEDDIR_FREEBSD ${secure_file_priv_embedded_path})
-
-#
-# GLIBC layout
-#
-SET(INSTALL_BINDIR_GLIBC "bin")
-SET(INSTALL_SBINDIR_GLIBC "bin")
-SET(INSTALL_SCRIPTDIR_GLIBC "scripts")
-#
-SET(INSTALL_LIBDIR_GLIBC "lib")
-SET(INSTALL_PLUGINDIR_GLIBC "lib/plugin")
-#
-SET(INSTALL_INCLUDEDIR_GLIBC "include")
-#
-SET(INSTALL_DOCDIR_GLIBC "docs")
-SET(INSTALL_DOCREADMEDIR_GLIBC ".")
-SET(INSTALL_MANDIR_GLIBC "man")
-SET(INSTALL_INFODIR_GLIBC "docs")
-#
-SET(INSTALL_SHAREDIR_GLIBC "share")
-SET(INSTALL_MYSQLSHAREDIR_GLIBC "share")
-SET(INSTALL_MYSQLTESTDIR_GLIBC "mysql-test")
-SET(INSTALL_SQLBENCHDIR_GLIBC ".")
-SET(INSTALL_SUPPORTFILESDIR_GLIBC "support-files")
-#
-SET(INSTALL_MYSQLDATADIR_GLIBC "data")
-SET(INSTALL_PLUGINTESTDIR_GLIBC ${plugin_tests})
-SET(INSTALL_SECURE_FILE_PRIVDIR_GLIBC ${secure_file_priv_path})
-SET(INSTALL_SECURE_FILE_PRIV_EMBEDDEDDIR_GLIBC ${secure_file_priv_embedded_path})
-
-#
-# OSX layout
-#
-SET(INSTALL_BINDIR_OSX "bin")
-SET(INSTALL_SBINDIR_OSX "bin")
-SET(INSTALL_SCRIPTDIR_OSX "scripts")
-#
-SET(INSTALL_LIBDIR_OSX "lib")
-SET(INSTALL_PLUGINDIR_OSX "lib/plugin")
-#
-SET(INSTALL_INCLUDEDIR_OSX "include")
-#
-SET(INSTALL_DOCDIR_OSX "docs")
-SET(INSTALL_DOCREADMEDIR_OSX ".")
-SET(INSTALL_MANDIR_OSX "man")
-SET(INSTALL_INFODIR_OSX "docs")
-#
-SET(INSTALL_SHAREDIR_OSX "share")
-SET(INSTALL_MYSQLSHAREDIR_OSX "share")
-SET(INSTALL_MYSQLTESTDIR_OSX "mysql-test")
-SET(INSTALL_SQLBENCHDIR_OSX ".")
-SET(INSTALL_SUPPORTFILESDIR_OSX "support-files")
-#
-SET(INSTALL_MYSQLDATADIR_OSX "data")
-SET(INSTALL_PLUGINTESTDIR_OSX ${plugin_tests})
-SET(INSTALL_SECURE_FILE_PRIVDIR_OSX ${secure_file_priv_path})
-SET(INSTALL_SECURE_FILE_PRIV_EMBEDDEDDIR_OSX ${secure_file_priv_embedded_path})
-
-#
-# TARGZ layout
-#
-SET(INSTALL_BINDIR_TARGZ "bin")
-SET(INSTALL_SBINDIR_TARGZ "bin")
-SET(INSTALL_SCRIPTDIR_TARGZ "scripts")
-#
-SET(INSTALL_LIBDIR_TARGZ "lib")
-SET(INSTALL_PLUGINDIR_TARGZ "lib/plugin")
-#
-SET(INSTALL_INCLUDEDIR_TARGZ "include")
-#
-SET(INSTALL_DOCDIR_TARGZ "docs")
-SET(INSTALL_DOCREADMEDIR_TARGZ ".")
-SET(INSTALL_MANDIR_TARGZ "man")
-SET(INSTALL_INFODIR_TARGZ "docs")
-#
-SET(INSTALL_SHAREDIR_TARGZ "share")
-SET(INSTALL_MYSQLSHAREDIR_TARGZ "share")
-SET(INSTALL_MYSQLTESTDIR_TARGZ "mysql-test")
-SET(INSTALL_SQLBENCHDIR_TARGZ ".")
-SET(INSTALL_SUPPORTFILESDIR_TARGZ "support-files")
-#
-SET(INSTALL_MYSQLDATADIR_TARGZ "data")
-SET(INSTALL_PLUGINTESTDIR_TARGZ ${plugin_tests})
-SET(INSTALL_SECURE_FILE_PRIVDIR_TARGZ ${secure_file_priv_path})
-SET(INSTALL_SECURE_FILE_PRIV_EMBEDDEDDIR_TARGZ ${secure_file_priv_embedded_path})
+SET(INSTALL_UNIX_ADDRDIR_STANDALONE "/tmp/mysql.sock")
#
# RPM layout
#
-# See "packaging/rpm-uln/mysql-5.5-libdir.patch" for the differences
-# which apply to RPMs in ULN (Oracle Linux), that patch file will
-# be applied at build time via "rpmbuild".
-#
SET(INSTALL_BINDIR_RPM "bin")
SET(INSTALL_SBINDIR_RPM "sbin")
SET(INSTALL_SCRIPTDIR_RPM "bin")
+SET(INSTALL_SYSCONFDIR_RPM "/etc")
+SET(INSTALL_SYSCONF2DIR_RPM "/etc/my.cnf.d")
#
IF(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")
SET(INSTALL_LIBDIR_RPM "lib64")
@@ -337,8 +147,8 @@ ENDIF()
#
SET(INSTALL_INCLUDEDIR_RPM "include/mysql")
#
-#SET(INSTALL_DOCDIR_RPM unset - installed directly by RPM)
-#SET(INSTALL_DOCREADMEDIR_RPM unset - installed directly by RPM)
+SET(INSTALL_DOCDIR_RPM "share/doc")
+SET(INSTALL_DOCREADMEDIR_RPM "share/doc")
SET(INSTALL_INFODIR_RPM "share/info")
SET(INSTALL_MANDIR_RPM "share/man")
#
@@ -349,71 +159,36 @@ SET(INSTALL_SQLBENCHDIR_RPM "")
SET(INSTALL_SUPPORTFILESDIR_RPM "share/mysql")
#
SET(INSTALL_MYSQLDATADIR_RPM "/var/lib/mysql")
-SET(INSTALL_PLUGINTESTDIR_RPM ${plugin_tests})
-SET(INSTALL_SECURE_FILE_PRIVDIR_RPM ${secure_file_priv_path})
-SET(INSTALL_SECURE_FILE_PRIV_EMBEDDEDDIR_RPM ${secure_file_priv_embedded_path})
-#
-# SLES layout
-#
-SET(INSTALL_BINDIR_SLES "bin")
-SET(INSTALL_SBINDIR_SLES "sbin")
-SET(INSTALL_SCRIPTDIR_SLES "bin")
-#
-IF(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")
- SET(INSTALL_LIBDIR_SLES "lib64")
- SET(INSTALL_PLUGINDIR_SLES "lib64/mysql/plugin")
-ELSE()
- SET(INSTALL_LIBDIR_SLES "lib")
- SET(INSTALL_PLUGINDIR_SLES "lib/mysql/plugin")
-ENDIF()
-#
-SET(INSTALL_INCLUDEDIR_SLES "include/mysql")
-#
-#SET(INSTALL_DOCDIR_SLES unset - installed directly by SLES)
-#SET(INSTALL_DOCREADMEDIR_SLES unset - installed directly by SLES)
-SET(INSTALL_INFODIR_SLES "share/info")
-SET(INSTALL_MANDIR_SLES "share/man")
-#
-SET(INSTALL_SHAREDIR_SLES "share")
-SET(INSTALL_MYSQLSHAREDIR_SLES "share/mysql")
-SET(INSTALL_MYSQLTESTDIR_SLES "share/mysql-test")
-SET(INSTALL_SQLBENCHDIR_SLES "")
-SET(INSTALL_SUPPORTFILESDIR_SLES "share/mysql")
-#
-SET(INSTALL_MYSQLDATADIR_SLES "/var/lib/mysql")
-SET(INSTALL_PLUGINTESTDIR_SLES ${plugin_tests})
-SET(INSTALL_SECURE_FILE_PRIVDIR_SLES ${secure_file_priv_path})
-SET(INSTALL_SECURE_FILE_PRIV_EMBEDDEDDIR_SLES ${secure_file_priv_embedded_path})
+SET(INSTALL_UNIX_ADDRDIR_RPM "${INSTALL_MYSQLDATADIR_RPM}/mysql.sock")
#
# DEB layout
#
SET(INSTALL_BINDIR_DEB "bin")
-SET(INSTALL_SBINDIR_DEB "bin")
-SET(INSTALL_SCRIPTDIR_DEB "scripts")
+SET(INSTALL_SBINDIR_DEB "sbin")
+SET(INSTALL_SCRIPTDIR_DEB "bin")
+SET(INSTALL_SYSCONF2DIR_DEB "/etc/mysql/conf.d")
#
SET(INSTALL_LIBDIR_DEB "lib")
-SET(INSTALL_PLUGINDIR_DEB "lib/plugin")
+SET(INSTALL_PLUGINDIR_DEB "lib/mysql/plugin")
#
-SET(INSTALL_INCLUDEDIR_DEB "include")
+SET(INSTALL_INCLUDEDIR_DEB "include/mysql")
#
-SET(INSTALL_DOCDIR_DEB "docs")
-SET(INSTALL_DOCREADMEDIR_DEB ".")
-SET(INSTALL_MANDIR_DEB "man")
-SET(INSTALL_INFODIR_DEB "docs")
+SET(INSTALL_DOCDIR_DEB "share/doc")
+SET(INSTALL_DOCREADMEDIR_DEB "share/doc")
+SET(INSTALL_MANDIR_DEB "share/man")
+SET(INSTALL_INFODIR_DEB "share/info")
#
SET(INSTALL_SHAREDIR_DEB "share")
-SET(INSTALL_MYSQLSHAREDIR_DEB "share")
+SET(INSTALL_MYSQLSHAREDIR_DEB "share/mysql")
SET(INSTALL_MYSQLTESTDIR_DEB "mysql-test")
SET(INSTALL_SQLBENCHDIR_DEB ".")
-SET(INSTALL_SUPPORTFILESDIR_DEB "support-files")
+SET(INSTALL_SUPPORTFILESDIR_DEB "share/mysql")
#
SET(INSTALL_MYSQLDATADIR_DEB "/var/lib/mysql")
-SET(INSTALL_PLUGINTESTDIR_DEB ${plugin_tests})
-SET(INSTALL_SECURE_FILE_PRIVDIR_DEB ${secure_file_priv_path})
-SET(INSTALL_SECURE_FILE_PRIV_EMBEDDEDDIR_DEB ${secure_file_priv_embedded_path})
+SET(INSTALL_UNIX_ADDRDIR_DEB "/var/run/mysqld/mysqld.sock")
#
# SVR4 layout
#
@@ -424,7 +199,7 @@ SET(INSTALL_SCRIPTDIR_SVR4 "scripts")
SET(INSTALL_LIBDIR_SVR4 "lib")
SET(INSTALL_PLUGINDIR_SVR4 "lib/plugin")
#
-SET(INSTALL_INCLUDEDIR_SVR4 "include")
+SET(INSTALL_INCLUDEDIR_SVR4 "include/mysql")
#
SET(INSTALL_DOCDIR_SVR4 "docs")
SET(INSTALL_DOCREADMEDIR_SVR4 ".")
@@ -438,9 +213,8 @@ SET(INSTALL_SQLBENCHDIR_SVR4 ".")
SET(INSTALL_SUPPORTFILESDIR_SVR4 "support-files")
#
SET(INSTALL_MYSQLDATADIR_SVR4 "/var/lib/mysql")
-SET(INSTALL_PLUGINTESTDIR_SVR4 ${plugin_tests})
-SET(INSTALL_SECURE_FILE_PRIVDIR_SVR4 ${secure_file_priv_path})
-SET(INSTALL_SECURE_FILE_PRIV_EMBEDDEDDIR_SVR4 ${secure_file_priv_embedded_path})
+
+SET(INSTALL_UNIX_ADDRDIR_SVR "/tmp/mysql.sock")
# Clear cached variables if install layout was changed
IF(OLD_INSTALL_LAYOUT)
@@ -453,30 +227,14 @@ SET(OLD_INSTALL_LAYOUT ${INSTALL_LAYOUT} CACHE INTERNAL "")
# Set INSTALL_FOODIR variables for chosen layout (for example, INSTALL_BINDIR
# will be defined as ${INSTALL_BINDIR_STANDALONE} by default if STANDALONE
# layout is chosen)
-FOREACH(var BIN SBIN LIB MYSQLSHARE SHARE PLUGIN INCLUDE SCRIPT DOC MAN
- INFO MYSQLTEST SQLBENCH DOCREADME SUPPORTFILES MYSQLDATA PLUGINTEST
- SECURE_FILE_PRIV SECURE_FILE_PRIV_EMBEDDED)
+FOREACH(var BIN SBIN LIB MYSQLSHARE SHARE PLUGIN INCLUDE SCRIPT DOC MAN SYSCONF SYSCONF2
+ INFO MYSQLTEST SQLBENCH DOCREADME SUPPORTFILES MYSQLDATA UNIX_ADDR)
SET(INSTALL_${var}DIR ${INSTALL_${var}DIR_${INSTALL_LAYOUT}}
CACHE STRING "${var} installation directory" ${FORCE})
MARK_AS_ADVANCED(INSTALL_${var}DIR)
ENDFOREACH()
-#
-# Set DEFAULT_SECURE_FILE_PRIV_DIR
-# This is used as default value for --secure-file-priv
-#
-IF(INSTALL_SECURE_FILE_PRIVDIR)
- SET(DEFAULT_SECURE_FILE_PRIV_DIR "\"${INSTALL_SECURE_FILE_PRIVDIR}\""
- CACHE INTERNAL "default --secure-file-priv directory" FORCE)
-ELSE()
- SET(DEFAULT_SECURE_FILE_PRIV_DIR \"\"
- CACHE INTERNAL "default --secure-file-priv directory" FORCE)
+IF(NOT MYSQL_UNIX_ADDR)
+ SET(MYSQL_UNIX_ADDR ${INSTALL_UNIX_ADDRDIR})
ENDIF()
-IF(INSTALL_SECURE_FILE_PRIV_EMBEDDEDDIR)
- SET(DEFAULT_SECURE_FILE_PRIV_EMBEDDED_DIR "\"${INSTALL_SECURE_FILE_PRIV_EMBEDDEDDIR}\""
- CACHE INTERNAL "default --secure-file-priv directory (for embedded library)" FORCE)
-ELSE()
- SET(DEFAULT_SECURE_FILE_PRIV_EMBEDDED_DIR "NULL"
- CACHE INTERNAL "default --secure-file-priv directory (for embedded library)" FORCE)
-ENDIF()
diff --git a/cmake/install_macros.cmake b/cmake/install_macros.cmake
index 5475dbe2686..22a525d7344 100644
--- a/cmake/install_macros.cmake
+++ b/cmake/install_macros.cmake
@@ -1,4 +1,4 @@
-# Copyright (c) 2009, 2017, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved.
#
# 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
@@ -15,23 +15,25 @@
GET_FILENAME_COMPONENT(MYSQL_CMAKE_SCRIPT_DIR ${CMAKE_CURRENT_LIST_FILE} PATH)
INCLUDE(${MYSQL_CMAKE_SCRIPT_DIR}/cmake_parse_arguments.cmake)
-MACRO (INSTALL_DEBUG_SYMBOLS targets)
- IF(MSVC)
+
+FUNCTION (INSTALL_DEBUG_SYMBOLS)
+ IF(MSVC)
+ MYSQL_PARSE_ARGUMENTS(ARG
+ "COMPONENT;INSTALL_LOCATION"
+ ""
+ ${ARGN}
+ )
+
+ IF(NOT ARG_COMPONENT)
+ SET(ARG_COMPONENT DebugBinaries)
+ ENDIF()
+ IF(NOT ARG_INSTALL_LOCATION)
+ SET(ARG_INSTALL_LOCATION lib)
+ ENDIF()
+ SET(targets ${ARG_DEFAULT_ARGS})
FOREACH(target ${targets})
- GET_TARGET_PROPERTY(location ${target} LOCATION)
GET_TARGET_PROPERTY(type ${target} TYPE)
- IF(NOT INSTALL_LOCATION)
- IF(type MATCHES "STATIC_LIBRARY"
- OR type MATCHES "MODULE_LIBRARY"
- OR type MATCHES "SHARED_LIBRARY")
- SET(INSTALL_LOCATION "lib")
- ELSEIF(type MATCHES "EXECUTABLE")
- SET(INSTALL_LOCATION "bin")
- ELSE()
- MESSAGE(FATAL_ERROR
- "cannot determine type of ${target}. Don't now where to install")
- ENDIF()
- ENDIF()
+ GET_TARGET_PROPERTY(location ${target} LOCATION)
STRING(REPLACE ".exe" ".pdb" pdb_location ${location})
STRING(REPLACE ".dll" ".pdb" pdb_location ${pdb_location})
STRING(REPLACE ".lib" ".pdb" pdb_location ${pdb_location})
@@ -40,19 +42,34 @@ MACRO (INSTALL_DEBUG_SYMBOLS targets)
"${CMAKE_CFG_INTDIR}" "\${CMAKE_INSTALL_CONFIG_NAME}"
pdb_location ${pdb_location})
ENDIF()
- IF(target STREQUAL "mysqld")
- SET(comp Server)
- ELSE()
- SET(comp Debuginfo)
- ENDIF()
- # No .pdb file for static libraries.
- IF(NOT type MATCHES "STATIC_LIBRARY")
- INSTALL(FILES ${pdb_location}
- DESTINATION ${INSTALL_LOCATION} COMPONENT ${comp})
+
+ set(comp "")
+ IF(ARG_COMPONENT STREQUAL "Server")
+ IF(target MATCHES "mysqld" OR type MATCHES "MODULE")
+ #MESSAGE("PDB: ${targets}")
+ SET(comp Server)
+ ENDIF()
ENDIF()
+
+ IF(NOT comp MATCHES Server)
+ IF(ARG_COMPONENT MATCHES Development
+ OR ARG_COMPONENT MATCHES SharedLibraries
+ OR ARG_COMPONENT MATCHES Embedded)
+ SET(comp Debuginfo)
+ ENDIF()
+ ENDIF()
+
+ IF(NOT comp)
+ SET(comp Debuginfo_archive_only) # not in MSI
+ ENDIF()
+ IF(type MATCHES "STATIC")
+ # PDB for static libraries might be unsupported http://public.kitware.com/Bug/view.php?id=14600
+ SET(opt OPTIONAL)
+ ENDIF()
+ INSTALL(FILES ${pdb_location} DESTINATION ${ARG_INSTALL_LOCATION} COMPONENT ${comp} ${opt})
ENDFOREACH()
ENDIF()
-ENDMACRO()
+ENDFUNCTION()
# Installs manpage for given file (either script or executable)
#
@@ -119,29 +136,59 @@ FUNCTION(INSTALL_SCRIPT)
INSTALL_MANPAGE(${script})
ENDFUNCTION()
+
+FUNCTION(INSTALL_DOCUMENTATION)
+ MYSQL_PARSE_ARGUMENTS(ARG "COMPONENT" "" ${ARGN})
+ SET(files ${ARG_DEFAULT_ARGS})
+ IF(NOT ARG_COMPONENT)
+ SET(ARG_COMPONENT Server)
+ ENDIF()
+ IF (ARG_COMPONENT MATCHES "Readme")
+ SET(destination ${INSTALL_DOCREADMEDIR})
+ ELSE()
+ SET(destination ${INSTALL_DOCDIR})
+ ENDIF()
+
+ STRING(TOUPPER ${ARG_COMPONENT} COMPUP)
+ IF(CPACK_COMPONENT_${COMPUP}_GROUP)
+ SET(group ${CPACK_COMPONENT_${COMPUP}_GROUP})
+ ELSE()
+ SET(group ${ARG_COMPONENT})
+ ENDIF()
+
+ IF(RPM)
+ SET(destination "${destination}/MariaDB-${group}-${VERSION}")
+ ELSEIF(DEB)
+ SET(destination "${destination}/mariadb-${group}-${MAJOR_VERSION}.${MINOR_VERSION}")
+ ENDIF()
+
+ INSTALL(FILES ${files} DESTINATION ${destination} COMPONENT ${ARG_COMPONENT})
+ENDFUNCTION()
+
+
# Install symbolic link to CMake target.
-# We do 'cd path; ln -s target_name link_name'
-# We also add an INSTALL target for "${path}/${link_name}"
-MACRO(INSTALL_SYMLINK target target_name link_name destination component)
+# the link is created in the same directory as target
+# and extension will be the same as for target file.
+MACRO(INSTALL_SYMLINK linkname target destination component)
IF(UNIX)
GET_TARGET_PROPERTY(location ${target} LOCATION)
GET_FILENAME_COMPONENT(path ${location} PATH)
-
- SET(output ${path}/${link_name})
+ GET_FILENAME_COMPONENT(name ${location} NAME)
+ SET(output ${path}/${linkname})
ADD_CUSTOM_COMMAND(
OUTPUT ${output}
COMMAND ${CMAKE_COMMAND} ARGS -E remove -f ${output}
COMMAND ${CMAKE_COMMAND} ARGS -E create_symlink
- ${target_name}
- ${link_name}
+ ${name}
+ ${linkname}
WORKING_DIRECTORY ${path}
DEPENDS ${target}
)
- ADD_CUSTOM_TARGET(symlink_${link_name}
+ ADD_CUSTOM_TARGET(symlink_${linkname}
ALL
DEPENDS ${output})
- SET_TARGET_PROPERTIES(symlink_${link_name} PROPERTIES CLEAN_DIRECT_OUTPUT 1)
+ SET_TARGET_PROPERTIES(symlink_${linkname} PROPERTIES CLEAN_DIRECT_OUTPUT 1)
IF(CMAKE_GENERATOR MATCHES "Xcode")
# For Xcode, replace project config with install config
STRING(REPLACE "${CMAKE_CFG_INTDIR}"
@@ -151,6 +198,58 @@ IF(UNIX)
ENDIF()
ENDMACRO()
+IF(WIN32)
+ OPTION(SIGNCODE "Sign executables and dlls with digital certificate" OFF)
+ MARK_AS_ADVANCED(SIGNCODE)
+ IF(SIGNCODE)
+ SET(SIGNTOOL_PARAMETERS
+ /a /t http://timestamp.verisign.com/scripts/timstamp.dll
+ CACHE STRING "parameters for signtool (list)")
+ FIND_PROGRAM(SIGNTOOL_EXECUTABLE signtool
+ PATHS "$ENV{ProgramFiles}/Microsoft SDKs/Windows/v7.0A/bin"
+ "$ENV{ProgramFiles}/Windows Kits/8.0/bin/x86"
+ "$ENV{ProgramFiles}/Windows Kits/8.1/bin/x86"
+ )
+ IF(NOT SIGNTOOL_EXECUTABLE)
+ MESSAGE(FATAL_ERROR
+ "signtool is not found. Signing executables not possible")
+ ENDIF()
+ MARK_AS_ADVANCED(SIGNTOOL_EXECUTABLE SIGNTOOL_PARAMETERS)
+ ENDIF()
+ENDIF()
+
+MACRO(SIGN_TARGET)
+ MYSQL_PARSE_ARGUMENTS(ARG "COMPONENT" "" ${ARGN})
+ SET(target ${ARG_DEFAULT_ARGS})
+ IF(ARG_COMPONENT)
+ SET(comp COMPONENT ${ARG_COMPONENT})
+ ELSE()
+ SET(comp)
+ ENDIF()
+ GET_TARGET_PROPERTY(target_type ${target} TYPE)
+ IF(target_type AND NOT target_type MATCHES "STATIC")
+ GET_TARGET_PROPERTY(target_location ${target} LOCATION)
+ IF(CMAKE_GENERATOR MATCHES "Visual Studio")
+ STRING(REPLACE "${CMAKE_CFG_INTDIR}" "\${CMAKE_INSTALL_CONFIG_NAME}"
+ target_location ${target_location})
+ ENDIF()
+ INSTALL(CODE
+ "EXECUTE_PROCESS(COMMAND
+ \"${SIGNTOOL_EXECUTABLE}\" verify /pa /q \"${target_location}\"
+ RESULT_VARIABLE ERR)
+ IF(NOT \${ERR} EQUAL 0)
+ EXECUTE_PROCESS(COMMAND
+ \"${SIGNTOOL_EXECUTABLE}\" sign ${SIGNTOOL_PARAMETERS} \"${target_location}\"
+ RESULT_VARIABLE ERR)
+ ENDIF()
+ IF(NOT \${ERR} EQUAL 0)
+ MESSAGE(FATAL_ERROR \"Error signing '${target_location}'\")
+ ENDIF()
+ " ${comp})
+ ENDIF()
+ENDMACRO()
+
+
# Installs targets, also installs pdbs on Windows.
#
#
@@ -161,6 +260,12 @@ FUNCTION(MYSQL_INSTALL_TARGETS)
""
${ARGN}
)
+ IF(ARG_COMPONENT)
+ SET(COMP COMPONENT ${ARG_COMPONENT})
+ ELSE()
+ MESSAGE(FATAL_ERROR "COMPONENT argument required")
+ ENDIF()
+
SET(TARGETS ${ARG_DEFAULT_ARGS})
IF(NOT TARGETS)
MESSAGE(FATAL_ERROR "Need target list for MYSQL_INSTALL_TARGETS")
@@ -171,19 +276,20 @@ FUNCTION(MYSQL_INSTALL_TARGETS)
FOREACH(target ${TARGETS})
+ # If signing is required, sign executables before installing
+ IF(SIGNCODE)
+ SIGN_TARGET(${target} ${COMP})
+ ENDIF()
# Install man pages on Unix
IF(UNIX)
GET_TARGET_PROPERTY(target_location ${target} LOCATION)
INSTALL_MANPAGE(${target_location})
ENDIF()
ENDFOREACH()
- IF(ARG_COMPONENT)
- SET(COMP COMPONENT ${ARG_COMPONENT})
- ENDIF()
+
INSTALL(TARGETS ${TARGETS} DESTINATION ${ARG_DESTINATION} ${COMP})
- SET(INSTALL_LOCATION ${ARG_DESTINATION} )
- INSTALL_DEBUG_SYMBOLS("${TARGETS}")
- SET(INSTALL_LOCATION)
+ INSTALL_DEBUG_SYMBOLS(${TARGETS} ${COMP} INSTALL_LOCATION ${ARG_DESTINATION})
+
ENDFUNCTION()
# Optionally install mysqld/client/embedded from debug build run. outside of the current build dir
@@ -277,3 +383,30 @@ FUNCTION(INSTALL_DEBUG_TARGET target)
ENDIF()
ENDFUNCTION()
+
+FUNCTION(INSTALL_MYSQL_TEST from to)
+ IF(INSTALL_MYSQLTESTDIR)
+ INSTALL(
+ DIRECTORY ${from}
+ DESTINATION "${INSTALL_MYSQLTESTDIR}/${to}"
+ USE_SOURCE_PERMISSIONS
+ COMPONENT Test
+ PATTERN "var" EXCLUDE
+ PATTERN "lib/My/SafeProcess" EXCLUDE
+ PATTERN "lib/t*" EXCLUDE
+ PATTERN "CPack" EXCLUDE
+ PATTERN "CMake*" EXCLUDE
+ PATTERN "cmake_install.cmake" EXCLUDE
+ PATTERN "mtr.out*" EXCLUDE
+ PATTERN ".cvsignore" EXCLUDE
+ PATTERN "*.am" EXCLUDE
+ PATTERN "*.in" EXCLUDE
+ PATTERN "Makefile" EXCLUDE
+ PATTERN "*.vcxproj" EXCLUDE
+ PATTERN "*.vcxproj.filters" EXCLUDE
+ PATTERN "*.vcxproj.user" EXCLUDE
+ PATTERN "CTest*" EXCLUDE
+ PATTERN "*~" EXCLUDE
+ )
+ ENDIF()
+ENDFUNCTION()
diff --git a/cmake/jemalloc.cmake b/cmake/jemalloc.cmake
new file mode 100644
index 00000000000..39a97334071
--- /dev/null
+++ b/cmake/jemalloc.cmake
@@ -0,0 +1,34 @@
+INCLUDE (CheckLibraryExists)
+
+SET(WITH_JEMALLOC auto CACHE STRING
+ "Build with jemalloc (possible values are 'yes', 'no', 'auto')")
+
+MACRO (CHECK_JEMALLOC)
+ # compatibility with old WITH_JEMALLOC values
+ IF(WITH_JEMALLOC STREQUAL "bundled")
+ MESSAGE(FATAL_ERROR "MariaDB no longer bundles jemalloc")
+ ENDIF()
+ IF(WITH_JEMALLOC STREQUAL "system")
+ SET(WITH_JEMALLOC "yes")
+ ENDIF()
+
+ IF(WITH_JEMALLOC STREQUAL "yes" OR WITH_JEMALLOC STREQUAL "auto" OR
+ WITH_JEMALLOC STREQUAL "static")
+
+ IF(WITH_JEMALLOC STREQUAL "static")
+ SET(libname jemalloc_pic)
+ SET(CMAKE_REQUIRED_LIBRARIES pthread dl m)
+ ELSE()
+ SET(libname jemalloc)
+ ENDIF()
+
+ CHECK_LIBRARY_EXISTS(${libname} malloc_stats_print "" HAVE_JEMALLOC)
+ SET(CMAKE_REQUIRED_LIBRARIES)
+
+ IF (HAVE_JEMALLOC)
+ SET(LIBJEMALLOC ${libname})
+ ELSEIF (NOT WITH_JEMALLOC STREQUAL "auto")
+ MESSAGE(FATAL_ERROR "${libname} is not found")
+ ENDIF()
+ ENDIF()
+ENDMACRO()
diff --git a/cmake/libutils.cmake b/cmake/libutils.cmake
index cb29f189947..41b7d9d1d86 100644
--- a/cmake/libutils.cmake
+++ b/cmake/libutils.cmake
@@ -1,4 +1,4 @@
-# Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2009, 2010, Oracle and/or its affiliates.
#
# 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
@@ -87,6 +87,11 @@ MACRO(CREATE_EXPORT_FILE VAR TARGET API_FUNCTIONS)
ENDFOREACH()
SET(CONTENT "${CONTENT} (void *)0\n}\;")
CONFIGURE_FILE_CONTENT(${CONTENT} ${EXPORTS})
+ # Avoid "function redeclared as variable" error
+ # when using gcc/clang option -flto(link time optimization)
+ IF(" ${CMAKE_C_FLAGS} ${CMAKE_CXX_FLAGS} " MATCHES " -flto")
+ SET_SOURCE_FILES_PROPERTIES(${EXPORTS} PROPERTIES COMPILE_FLAGS "-fno-lto")
+ ENDIF()
SET(${VAR} ${EXPORTS})
ENDIF()
ENDMACRO()
@@ -158,7 +163,6 @@ MACRO(MERGE_STATIC_LIBS TARGET OUTPUT_NAME LIBS_TO_MERGE)
IF(OSLIBS)
LIST(REMOVE_DUPLICATES OSLIBS)
TARGET_LINK_LIBRARIES(${TARGET} ${OSLIBS})
- MESSAGE(STATUS "Library ${TARGET} depends on OSLIBS ${OSLIBS}")
ENDIF()
# Make the generated dummy source file depended on all static input
@@ -215,7 +219,7 @@ ENDMACRO()
#)
MACRO(MERGE_LIBRARIES)
MYSQL_PARSE_ARGUMENTS(ARG
- "EXPORTS;OUTPUT_NAME;COMPONENT"
+ "EXPORTS;OUTPUT_NAME;COMPONENT;VERSION;SOVERSION"
"STATIC;SHARED;MODULE;NOINSTALL"
${ARGN}
)
@@ -254,7 +258,16 @@ MACRO(MERGE_LIBRARIES)
IF(NOT ARG_NOINSTALL)
ADD_VERSION_INFO(${TARGET} SHARED SRC)
ENDIF()
+ IF(ARG_VERSION)
+ SET(VERS VERSION ${ARG_VERSION})
+ ENDIF()
ADD_LIBRARY(${TARGET} ${LIBTYPE} ${SRC})
+ IF (ARG_VERSION)
+ SET_TARGET_PROPERTIES(${TARGET} PROPERTIES VERSION ${ARG_VERSION})
+ ENDIF()
+ IF (ARG_SOVERSION)
+ SET_TARGET_PROPERTIES(${TARGET} PROPERTIES SOVERSION ${ARG_VERSION})
+ ENDIF()
TARGET_LINK_LIBRARIES(${TARGET} ${LIBS})
IF(ARG_OUTPUT_NAME)
SET_TARGET_PROPERTIES(${TARGET} PROPERTIES OUTPUT_NAME "${ARG_OUTPUT_NAME}")
@@ -269,6 +282,15 @@ MACRO(MERGE_LIBRARIES)
MYSQL_INSTALL_TARGETS(${TARGET} DESTINATION "${INSTALL_LIBDIR}" ${COMP})
ENDIF()
SET_TARGET_PROPERTIES(${TARGET} PROPERTIES LINK_INTERFACE_LIBRARIES "")
+ IF(ARG_SHARED AND LINK_FLAG_NO_UNDEFINED)
+ # Do not allow undefined symbols in shared libraries
+ GET_TARGET_PROPERTY(TARGET_LINK_FLAGS ${TARGET} LINK_FLAGS)
+ IF(NOT TARGET_LINK_FLAGS)
+ SET(TARGET_LINK_FLAGS)
+ ENDIF()
+ SET_TARGET_PROPERTIES(${TARGET} PROPERTIES LINK_FLAGS
+ "${TARGET_LINK_FLAGS} ${LINK_FLAG_NO_UNDEFINED}")
+ ENDIF()
ENDMACRO()
FUNCTION(GET_DEPENDEND_OS_LIBS target result)
@@ -288,16 +310,27 @@ FUNCTION(GET_DEPENDEND_OS_LIBS target result)
ENDFUNCTION()
MACRO(RESTRICT_SYMBOL_EXPORTS target)
+ SET(VISIBILITY_HIDDEN_FLAG)
+
IF(CMAKE_COMPILER_IS_GNUCXX AND UNIX)
CHECK_C_COMPILER_FLAG("-fvisibility=hidden" HAVE_VISIBILITY_HIDDEN)
IF(HAVE_VISIBILITY_HIDDEN)
- GET_TARGET_PROPERTY(COMPILE_FLAGS ${target} COMPILE_FLAGS)
- IF(NOT COMPILE_FLAGS)
- # Avoid COMPILE_FLAGS-NOTFOUND
- SET(COMPILE_FLAGS)
- ENDIF()
- SET_TARGET_PROPERTIES(${target} PROPERTIES
- COMPILE_FLAGS "${COMPILE_FLAGS} -fvisibility=hidden")
+ SET(VISIBILITY_HIDDEN_FLAG "-fvisibility=hidden")
ENDIF()
ENDIF()
+
+ IF(CMAKE_C_COMPILER_ID MATCHES "SunPro")
+ SET(VISIBILITY_HIDDEN_FLAG "-xldscope=hidden")
+ ENDIF()
+
+ IF(VISIBILITY_HIDDEN_FLAG)
+ GET_TARGET_PROPERTY(COMPILE_FLAGS ${target} COMPILE_FLAGS)
+ IF(NOT COMPILE_FLAGS)
+ # Avoid COMPILE_FLAGS-NOTFOUND
+ SET(COMPILE_FLAGS)
+ ENDIF()
+ SET_TARGET_PROPERTIES(${target} PROPERTIES
+ COMPILE_FLAGS "${COMPILE_FLAGS} ${VISIBILITY_HIDDEN_FLAG}")
+ ENDIF()
+
ENDMACRO()
diff --git a/cmake/maintainer.cmake b/cmake/maintainer.cmake
index c537d00260f..872d61d9aac 100644
--- a/cmake/maintainer.cmake
+++ b/cmake/maintainer.cmake
@@ -35,17 +35,24 @@ IF(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
ENDIF()
# Turn on Werror (warning => error) when using maintainer mode.
-IF(MYSQL_MAINTAINER_MODE)
- SET(MY_C_WARNING_FLAGS "${MY_C_WARNING_FLAGS} -Werror")
- SET(MY_CXX_WARNING_FLAGS "${MY_CXX_WARNING_FLAGS} -Werror")
- SET(COMPILE_FLAG_WERROR 1)
+IF(MYSQL_MAINTAINER_MODE MATCHES "ON")
+ SET(MY_C_WARNING_FLAGS "${MY_C_WARNING_FLAGS} -DFORCE_INIT_OF_VARS -Werror")
+ SET(MY_CXX_WARNING_FLAGS "${MY_CXX_WARNING_FLAGS} -DFORCE_INIT_OF_VARS -Werror")
ENDIF()
# Set warning flags for GCC/Clang
IF(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang")
- SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${MY_C_WARNING_FLAGS}")
+ SET(MY_MAINTAINER_C_WARNINGS "${MY_C_WARNING_FLAGS}")
ENDIF()
# Set warning flags for G++/Clang++
IF(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
- SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MY_CXX_WARNING_FLAGS}")
+ SET(MY_MAINTAINER_CXX_WARNINGS "${MY_CXX_WARNING_FLAGS}")
+ENDIF()
+
+IF(MYSQL_MAINTAINER_MODE MATCHES "ON")
+ SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${MY_MAINTAINER_C_WARNINGS}")
+ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MY_MAINTAINER_CXX_WARNINGS}")
+ELSEIF(MYSQL_MAINTAINER_MODE MATCHES "AUTO")
+ SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${MY_MAINTAINER_C_WARNINGS}")
+ SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${MY_MAINTAINER_CXX_WARNINGS}")
ENDIF()
diff --git a/cmake/make_dist.cmake.in b/cmake/make_dist.cmake.in
index 768e08741d3..f35d16834b6 100644
--- a/cmake/make_dist.cmake.in
+++ b/cmake/make_dist.cmake.in
@@ -1,4 +1,4 @@
-# Copyright (c) 2009, 2015, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2009, 2015, Oracle and/or its affiliates.
#
# 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
@@ -14,7 +14,7 @@
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
# Make source distribution
-# If git is present, run git archive.
+# If bzr is present, run bzr export.
# Otherwise, just run cpack with source configuration.
SET(CMAKE_SOURCE_DIR "@CMAKE_SOURCE_DIR@")
@@ -39,49 +39,16 @@ SET(PACKAGE_DIR ${CMAKE_BINARY_DIR}/${CPACK_SOURCE_PACKAGE_FILE_NAME})
FILE(REMOVE_RECURSE ${PACKAGE_DIR})
FILE(REMOVE ${PACKAGE_DIR}.tar.gz )
-# Only allow git if source dir itself is a git repository
IF(GIT_EXECUTABLE)
+ MESSAGE(STATUS "Running git checkout-index")
EXECUTE_PROCESS(
- COMMAND "${GIT_EXECUTABLE}" rev-parse --show-toplevel
- OUTPUT_VARIABLE GIT_ROOT
- ERROR_VARIABLE GIT_ROOT_ERROR
- OUTPUT_STRIP_TRAILING_WHITESPACE
+ COMMAND "${GIT_EXECUTABLE}" checkout-index --all --prefix=${PACKAGE_DIR}/
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
RESULT_VARIABLE RESULT
)
- IF(NOT RESULT EQUAL 0 OR NOT GIT_ROOT STREQUAL ${CMAKE_SOURCE_DIR})
- MESSAGE(STATUS "This is not a git repository")
- SET(GIT_EXECUTABLE)
- ENDIF()
-ENDIF()
-
-IF(GIT_EXECUTABLE)
- MESSAGE(STATUS "Running git archive -o ${PACKAGE_DIR}.tar")
- EXECUTE_PROCESS(
- COMMAND "${GIT_EXECUTABLE}" archive --format=tar
- --prefix=${CPACK_SOURCE_PACKAGE_FILE_NAME}/ -o ${PACKAGE_DIR}.tar HEAD
- WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
- RESULT_VARIABLE RESULT
- )
IF(NOT RESULT EQUAL 0)
- SET(GIT_EXECUTABLE)
- ELSE()
- # Unpack tarball
- EXECUTE_PROCESS(
- COMMAND ${CMAKE_COMMAND} -E tar xf ${PACKAGE_DIR}.tar
- WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
- RESULT_VARIABLE TAR_RESULT
- )
- IF(NOT TAR_RESULT EQUAL 0)
- SET(GIT_EXECUTABLE)
- ELSE()
- # Remove tarball after unpacking
- EXECUTE_PROCESS(
- COMMAND ${CMAKE_COMMAND} -E remove ${PACKAGE_DIR}.tar
- WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
- )
- ENDIF()
+ SET(GIT_EXECUTABLE)
ENDIF()
ENDIF()
@@ -134,15 +101,6 @@ CONFIGURE_FILE(${CMAKE_BINARY_DIR}/sql/sql_yacc.h
CONFIGURE_FILE(${CMAKE_BINARY_DIR}/sql/sql_yacc.cc
${PACKAGE_DIR}/sql/sql_yacc.cc COPYONLY)
-# Copy spec files
-SET(SPECFILENAME "mysql.${VERSION}.spec")
-IF("${VERSION}" MATCHES "-ndb-")
- STRING(REGEX REPLACE "^.*-ndb-" "" NDBVERSION "${VERSION}")
- SET(SPECFILENAME "mysql-cluster-${NDBVERSION}.spec")
-ENDIF()
-CONFIGURE_FILE(${CMAKE_BINARY_DIR}/support-files/${SPECFILENAME}
- ${PACKAGE_DIR}/support-files/${SPECFILENAME} COPYONLY)
-
# Add documentation, if user has specified where to find them
IF(MYSQL_DOCS_LOCATION)
MESSAGE("Copying documentation files from " ${MYSQL_DOCS_LOCATION})
diff --git a/cmake/mysql_add_executable.cmake b/cmake/mysql_add_executable.cmake
index bcbbe7d4931..45575bdd536 100644
--- a/cmake/mysql_add_executable.cmake
+++ b/cmake/mysql_add_executable.cmake
@@ -1,4 +1,4 @@
-# Copyright (c) 2009, 2017, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
#
# 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
@@ -38,6 +38,14 @@ FUNCTION (MYSQL_ADD_EXECUTABLE)
SET(sources ${ARG_DEFAULT_ARGS})
ADD_VERSION_INFO(${target} EXECUTABLE sources)
+
+ IF(MSVC)
+ # Add compatibility manifest, to fix GetVersionEx on Windows 8.1 and later
+ IF (CMAKE_VERSION VERSION_GREATER 3.3)
+ SET(sources ${sources} ${PROJECT_SOURCE_DIR}/cmake/win_compatibility.manifest)
+ ENDIF()
+ ENDIF()
+
ADD_EXECUTABLE(${target} ${ARG_WIN32} ${ARG_MACOSX_BUNDLE} ${ARG_EXCLUDE_FROM_ALL} ${sources})
# tell CPack where to install
IF(NOT ARG_EXCLUDE_FROM_ALL)
diff --git a/cmake/mysql_version.cmake b/cmake/mysql_version.cmake
index 56018dcec36..7fa5240e324 100644
--- a/cmake/mysql_version.cmake
+++ b/cmake/mysql_version.cmake
@@ -1,4 +1,4 @@
-# Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2009, 2012, Oracle and/or its affiliates.
#
# 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
@@ -18,7 +18,6 @@
#
SET(SHARED_LIB_MAJOR_VERSION "18")
-SET(SHARED_LIB_MINOR_VERSION "0")
SET(PROTOCOL_VERSION "10")
SET(DOT_FRM_VERSION "6")
@@ -55,7 +54,7 @@ MACRO(GET_MYSQL_VERSION)
ENDIF()
SET(VERSION "${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}${EXTRA_VERSION}")
- MESSAGE(STATUS "MySQL ${VERSION}")
+ MESSAGE(STATUS "MariaDB ${VERSION}")
SET(MYSQL_BASE_VERSION "${MAJOR_VERSION}.${MINOR_VERSION}" CACHE INTERNAL "MySQL Base version")
SET(MYSQL_NO_DASH_VERSION "${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}")
# Use NDBVERSION irregardless of whether this is Cluster or not, if not
@@ -66,7 +65,7 @@ MACRO(GET_MYSQL_VERSION)
MARK_AS_ADVANCED(VERSION MYSQL_VERSION_ID MYSQL_BASE_VERSION)
SET(CPACK_PACKAGE_VERSION_MAJOR ${MAJOR_VERSION})
SET(CPACK_PACKAGE_VERSION_MINOR ${MINOR_VERSION})
- SET(CPACK_PACKAGE_VERSION_PATCH ${PATCH_VERSION})
+ SET(CPACK_PACKAGE_VERSION_PATCH ${PATCH_VERSION}${EXTRA_VERSION})
ENDMACRO()
# Get mysql version and other interesting variables
@@ -81,34 +80,28 @@ ELSEIF(MYSQL_TCP_PORT EQUAL MYSQL_TCP_PORT_DEFAULT)
SET(MYSQL_TCP_PORT_DEFAULT "0")
ENDIF()
-
-IF(NOT MYSQL_UNIX_ADDR)
- SET(MYSQL_UNIX_ADDR "/tmp/mysql.sock")
-ENDIF()
IF(NOT COMPILATION_COMMENT)
SET(COMPILATION_COMMENT "Source distribution")
ENDIF()
-
INCLUDE(package_name)
IF(NOT CPACK_PACKAGE_FILE_NAME)
GET_PACKAGE_FILE_NAME(CPACK_PACKAGE_FILE_NAME)
ENDIF()
IF(NOT CPACK_SOURCE_PACKAGE_FILE_NAME)
- SET(CPACK_SOURCE_PACKAGE_FILE_NAME "mysql-${VERSION}")
+ SET(CPACK_SOURCE_PACKAGE_FILE_NAME "mariadb-${VERSION}")
IF("${VERSION}" MATCHES "-ndb-")
STRING(REGEX REPLACE "^.*-ndb-" "" NDBVERSION "${VERSION}")
SET(CPACK_SOURCE_PACKAGE_FILE_NAME "mysql-cluster-gpl-${NDBVERSION}")
ENDIF()
ENDIF()
-SET(CPACK_PACKAGE_CONTACT "MySQL Release Engineering <mysql-build@oss.oracle.com>")
-SET(CPACK_PACKAGE_VENDOR "Oracle Corporation")
+SET(CPACK_PACKAGE_CONTACT "MariaDB team <info@montyprogram.com>")
+SET(CPACK_PACKAGE_VENDOR "Monty Program AB")
SET(CPACK_SOURCE_GENERATOR "TGZ")
-INCLUDE(cpack_source_ignore_files)
# Defintions for windows version resources
-SET(PRODUCTNAME "MySQL Server")
+SET(PRODUCTNAME "MariaDB Server")
SET(COMPANYNAME ${CPACK_PACKAGE_VENDOR})
# Windows 'date' command has unpredictable output, so cannot rely on it to
@@ -125,8 +118,14 @@ ENDIF()
# Refer to http://msdn.microsoft.com/en-us/library/aa381058(VS.85).aspx
# for more info.
IF(MSVC)
+ # Tiny version is used to identify the build, it can be set with cmake -DTINY_VERSION=<number>
+ # to bzr revno for example (in the CI builds)
+ IF(NOT TINY_VERSION)
+ SET(TINY_VERSION "0")
+ ENDIF()
+
GET_FILENAME_COMPONENT(MYSQL_CMAKE_SCRIPT_DIR ${CMAKE_CURRENT_LIST_FILE} PATH)
-
+
SET(FILETYPE VFT_APP)
CONFIGURE_FILE(${MYSQL_CMAKE_SCRIPT_DIR}/versioninfo.rc.in
${CMAKE_BINARY_DIR}/versioninfo_exe.rc)
@@ -134,7 +133,7 @@ IF(MSVC)
SET(FILETYPE VFT_DLL)
CONFIGURE_FILE(${MYSQL_CMAKE_SCRIPT_DIR}/versioninfo.rc.in
${CMAKE_BINARY_DIR}/versioninfo_dll.rc)
-
+
FUNCTION(ADD_VERSION_INFO target target_type sources_var)
IF("${target_type}" MATCHES "SHARED" OR "${target_type}" MATCHES "MODULE")
SET(rcfile ${CMAKE_BINARY_DIR}/versioninfo_dll.rc)
diff --git a/cmake/os/FreeBSD.cmake b/cmake/os/FreeBSD.cmake
index e09592942c1..ffb89c81206 100644
--- a/cmake/os/FreeBSD.cmake
+++ b/cmake/os/FreeBSD.cmake
@@ -22,3 +22,14 @@
# The below was used for really old versions of FreeBSD, roughly: before 5.1.9
# ADD_DEFINITIONS(-DHAVE_BROKEN_REALPATH)
+
+# Find libexecinfo (library that contains backtrace_symbols etc)
+SET(EXECINFO_ROOT /usr/local CACHE INTERNAL "Where to find execinfo library and header")
+INCLUDE_DIRECTORIES(${EXECINFO_ROOT}/include)
+SET(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${EXECINFO_ROOT}/include)
+SET(ENV{LIB} "$ENV{LIB}:${EXECINFO_ROOT}/lib")
+FIND_LIBRARY(EXECINFO NAMES execinfo)
+IF(EXECINFO)
+ SET(LIBEXECINFO ${EXECINFO})
+ENDIF()
+
diff --git a/cmake/os/Linux.cmake b/cmake/os/Linux.cmake
index 5a1bd2f2d0d..b0680d92a1b 100644
--- a/cmake/os/Linux.cmake
+++ b/cmake/os/Linux.cmake
@@ -22,6 +22,7 @@ INCLUDE(CheckSymbolExists)
SET(TARGET_OS_LINUX 1)
SET(HAVE_NPTL 1)
SET(_GNU_SOURCE 1)
+SET(CMAKE_REQUIRED_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} -D_GNU_SOURCE=1)
# Fix CMake (< 2.8) flags. -rdynamic exports too many symbols.
FOREACH(LANG C CXX)
@@ -48,3 +49,4 @@ IF(HAVE_DECL_SHM_HUGETLB)
SET(HUGETLB_USE_PROC_MEMINFO 1)
SET(HAVE_LARGE_PAGE_OPTION 1)
ENDIF()
+
diff --git a/cmake/os/SunOS.cmake b/cmake/os/SunOS.cmake
index 3d2b4b8949a..d5a4b5c96b0 100644
--- a/cmake/os/SunOS.cmake
+++ b/cmake/os/SunOS.cmake
@@ -93,3 +93,8 @@ IF(CMAKE_COMPILER_IS_GNUCC AND CMAKE_SIZEOF_VOID_P EQUAL 4
ENDIF()
ENDIF()
ENDIF()
+
+IF(CMAKE_CXX_COMPILER_ID MATCHES "SunPro")
+ # Unnamed structs and unions
+ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -features=extensions")
+ENDIF()
diff --git a/cmake/os/Windows.cmake b/cmake/os/Windows.cmake
index 667afc7aabc..283f79b3b41 100644
--- a/cmake/os/Windows.cmake
+++ b/cmake/os/Windows.cmake
@@ -1,4 +1,4 @@
-# Copyright (c) 2010, 2017, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved.
#
# 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
@@ -64,7 +64,6 @@ IF(MINGW AND CMAKE_SIZEOF_VOID_P EQUAL 4)
ENDIF()
IF(MSVC)
- OPTION(LINK_STATIC_RUNTIME_LIBRARIES "Link with /MT" OFF)
# Enable debug info also in Release build,
# and create PDB to be able to analyze crashes.
FOREACH(type EXE SHARED MODULE)
@@ -87,9 +86,7 @@ IF(MSVC)
CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_DEBUG_INIT
CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_RELWITHDEBINFO
CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_DEBUG_INIT)
- IF(LINK_STATIC_RUNTIME_LIBRARIES)
- STRING(REPLACE "/MD" "/MT" "${flag}" "${${flag}}")
- ENDIF()
+ STRING(REPLACE "/MD" "/MT" "${flag}" "${${flag}}")
STRING(REPLACE "/Zi" "/Z7" "${flag}" "${${flag}}")
ENDFOREACH()
@@ -101,8 +98,13 @@ IF(MSVC)
# Fix CMake's predefined huge stack size
FOREACH(type EXE SHARED MODULE)
STRING(REGEX REPLACE "/STACK:([^ ]+)" "" CMAKE_${type}_LINKER_FLAGS "${CMAKE_${type}_LINKER_FLAGS}")
- STRING(REGEX REPLACE "/INCREMENTAL:([^ ]+)" "" CMAKE_${type}_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_${type}_LINKER_FLAGS_RELWITHDEBINFO}")
+ STRING(REGEX REPLACE "/INCREMENTAL:([^ ]+)" "/INCREMENTAL:NO" CMAKE_${type}_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_${type}_LINKER_FLAGS_RELWITHDEBINFO}")
+ STRING(REGEX REPLACE "/INCREMENTAL$" "/INCREMENTAL:NO" CMAKE_${type}_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_${type}_LINKER_FLAGS_RELWITHDEBINFO}")
+ STRING(REGEX REPLACE "/INCREMENTAL:([^ ]+)" "/INCREMENTAL:NO" CMAKE_${type}_LINKER_FLAGS_DEBUG "${CMAKE_${type}_LINKER_FLAGS_DEBUG}")
+ STRING(REGEX REPLACE "/INCREMENTAL$" "/INCREMENTAL:NO" CMAKE_${type}_LINKER_FLAGS_DEBUG "${CMAKE_${type}_LINKER_FLAGS_DEBUG}")
+ SET(CMAKE_${type}_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_${type}_LINKER_FLAGS_RELWITHDEBINFO} /OPT:REF /release")
ENDFOREACH()
+
# Mark 32 bit executables large address aware so they can
# use > 2GB address space
@@ -118,7 +120,7 @@ IF(MSVC)
#TODO: update the code and remove the disabled warnings
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4800 /wd4805 /wd4996")
- SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4800 /wd4805 /wd4996 /we4099")
+ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4800 /wd4805 /wd4996 /wd4291 /wd4577 /we4099")
IF(CMAKE_SIZEOF_VOID_P MATCHES 8)
# _WIN64 is defined by the compiler itself.
@@ -186,16 +188,14 @@ CHECK_SYMBOL_REPLACEMENT(S_IROTH _S_IREAD sys/stat.h)
CHECK_SYMBOL_REPLACEMENT(S_IFIFO _S_IFIFO sys/stat.h)
CHECK_SYMBOL_REPLACEMENT(SIGQUIT SIGTERM signal.h)
CHECK_SYMBOL_REPLACEMENT(SIGPIPE SIGINT signal.h)
-CHECK_SYMBOL_REPLACEMENT(isnan _isnan float.h)
-CHECK_SYMBOL_REPLACEMENT(finite _finite float.h)
-CHECK_SYMBOL_REPLACEMENT(tzname _tzname time.h)
-CHECK_SYMBOL_REPLACEMENT(snprintf _snprintf stdio.h)
+CHECK_SYMBOL_REPLACEMENT(isnan _isnan "math.h;float.h")
+CHECK_SYMBOL_REPLACEMENT(finite _finite "math;float.h")
CHECK_FUNCTION_REPLACEMENT(popen _popen)
CHECK_FUNCTION_REPLACEMENT(pclose _pclose)
CHECK_FUNCTION_REPLACEMENT(access _access)
CHECK_FUNCTION_REPLACEMENT(strcasecmp _stricmp)
CHECK_FUNCTION_REPLACEMENT(strncasecmp _strnicmp)
-CHECK_FUNCTION_REPLACEMENT(snprintf _snprintf)
+CHECK_SYMBOL_REPLACEMENT(snprintf _snprintf stdio.h)
CHECK_FUNCTION_REPLACEMENT(strtok_r strtok_s)
CHECK_FUNCTION_REPLACEMENT(strtoll _strtoi64)
CHECK_FUNCTION_REPLACEMENT(strtoull _strtoui64)
diff --git a/cmake/os/WindowsCache.cmake b/cmake/os/WindowsCache.cmake
index 1b5a2cedfd5..1694b238e7b 100644
--- a/cmake/os/WindowsCache.cmake
+++ b/cmake/os/WindowsCache.cmake
@@ -1,4 +1,4 @@
-# Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
#
# 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
@@ -20,6 +20,7 @@
# different results.
IF(MSVC)
+SET(BFD_H_EXISTS 0 CACHE INTERNAL "")
SET(HAVE_ACCESS 1 CACHE INTERNAL "")
SET(HAVE_AIO_H CACHE INTERNAL "")
SET(HAVE_AIO_READ CACHE INTERNAL "")
@@ -58,6 +59,7 @@ SET(HAVE_FCNTL_NONBLOCK CACHE INTERNAL "")
SET(HAVE_FCONVERT CACHE INTERNAL "")
SET(HAVE_FDATASYNC CACHE INTERNAL "")
SET(HAVE_DECL_FDATASYNC CACHE INTERNAL "")
+SET(HAVE_FEDISABLEEXCEPT CACHE INTERNAL "")
SET(HAVE_FENV_H CACHE INTERNAL "")
SET(HAVE_FESETROUND CACHE INTERNAL "")
SET(HAVE_FGETLN CACHE INTERNAL "")
@@ -99,7 +101,6 @@ SET(HAVE_IPPROTO_IPV6 CACHE INTERNAL "")
SET(HAVE_IPV6 TRUE CACHE INTERNAL "")
SET(HAVE_IPV6_V6ONLY 1 CACHE INTERNAL "")
SET(HAVE_ISINF CACHE INTERNAL "")
-SET(HAVE_ISNAN CACHE INTERNAL "")
SET(HAVE_ISSETUGID CACHE INTERNAL "")
SET(HAVE_GETUID CACHE INTERNAL "")
SET(HAVE_GETEUID CACHE INTERNAL "")
@@ -126,6 +127,7 @@ SET(HAVE_MLOCK CACHE INTERNAL "")
SET(HAVE_MLOCKALL CACHE INTERNAL "")
SET(HAVE_MMAP CACHE INTERNAL "")
SET(HAVE_MMAP64 CACHE INTERNAL "")
+SET(HAVE_NETDB_H CACHE INTERNAL "")
SET(HAVE_NETINET_IN6_H CACHE INTERNAL "")
SET(HAVE_NETINET_IN_H CACHE INTERNAL "")
SET(HAVE_NL_LANGINFO CACHE INTERNAL "")
@@ -134,6 +136,7 @@ SET(HAVE_PATHS_H CACHE INTERNAL "")
SET(HAVE_PCLOSE CACHE INTERNAL "")
SET(HAVE_PERROR 1 CACHE INTERNAL "")
SET(HAVE_PEERCRED CACHE INTERNAL "")
+SET(HAVE_PAM_APPL_H CACHE INTERNAL "")
SET(HAVE_POLL_H CACHE INTERNAL "")
SET(HAVE_POPEN CACHE INTERNAL "")
SET(HAVE_POLL CACHE INTERNAL "")
@@ -244,6 +247,7 @@ SET(HAVE_STRING_H 1 CACHE INTERNAL "")
SET(HAVE_STRLCAT CACHE INTERNAL "")
SET(HAVE_STRLCPY CACHE INTERNAL "")
SET(HAVE_STRNCASECMP CACHE INTERNAL "")
+SET(HAVE_STRNDUP CACHE INTERNAL "")
IF(MSVC_VERSION GREATER 1310)
SET(HAVE_STRNLEN 1 CACHE INTERNAL "")
ENDIF()
@@ -261,6 +265,7 @@ SET(HAVE_SYNCH_H CACHE INTERNAL "")
SET(HAVE_SYSENT_H CACHE INTERNAL "")
SET(HAVE_SYS_CDEFS_H CACHE INTERNAL "")
SET(HAVE_SYS_DIR_H CACHE INTERNAL "")
+SET(HAVE_SYS_EVENT_H CACHE INTERNAL "")
SET(HAVE_SYS_ERRLIST CACHE INTERNAL "")
SET(HAVE_SYS_FILE_H CACHE INTERNAL "")
SET(HAVE_SYS_FPU_H CACHE INTERNAL "")
@@ -275,6 +280,7 @@ SET(HAVE_SYS_PTE_H CACHE INTERNAL "")
SET(HAVE_SYS_RESOURCE_H CACHE INTERNAL "")
SET(HAVE_SYS_SELECT_H CACHE INTERNAL "")
SET(HAVE_SYS_SHM_H CACHE INTERNAL "")
+SET(HAVE_SYS_SOCKIO_H CACHE INTERNAL "")
SET(HAVE_SYS_SOCKET_H CACHE INTERNAL "")
SET(HAVE_SYS_STAT_H 1 CACHE INTERNAL "")
SET(HAVE_SYS_STREAM_H CACHE INTERNAL "")
@@ -300,7 +306,7 @@ SET(HAVE_TIME 1 CACHE INTERNAL "")
SET(HAVE_TIMES CACHE INTERNAL "")
SET(HAVE_TIMESPEC_TS_SEC CACHE INTERNAL "")
SET(HAVE_TIME_H 1 CACHE INTERNAL "")
-SET(HAVE__tzname 1 CACHE INTERNAL "")
+SET(HAVE_TZNAME 1 CACHE INTERNAL "")
SET(HAVE_UNISTD_H CACHE INTERNAL "")
SET(HAVE_UTIME_H CACHE INTERNAL "")
SET(HAVE_VALLOC CACHE INTERNAL "")
@@ -316,10 +322,8 @@ SET(WORDS_BIGENDIAN CACHE INTERNAL "")
SET(HAVE__S_IFIFO 1 CACHE INTERNAL "")
SET(HAVE__S_IREAD 1 CACHE INTERNAL "")
SET(HAVE__finite 1 CACHE INTERNAL "")
-SET(HAVE__isnan 1 CACHE INTERNAL "")
SET(HAVE__pclose 1 CACHE INTERNAL "")
SET(HAVE__popen 1 CACHE INTERNAL "")
-SET(HAVE__snprintf 1 CACHE INTERNAL "")
SET(HAVE__stricmp 1 CACHE INTERNAL "")
SET(HAVE__strnicmp 1 CACHE INTERNAL "")
SET(HAVE__strtoi64 1 CACHE INTERNAL "")
@@ -332,6 +336,7 @@ SET(STRUCT_DIRENT_HAS_D_INO CACHE INTERNAL "")
SET(STRUCT_DIRENT_HAS_D_INO CACHE INTERNAL "")
SET(STRUCT_DIRENT_HAS_D_NAMLEN CACHE INTERNAL "")
SET(TIME_WITH_SYS_TIME CACHE INTERNAL "")
+SET(TIME_T_UNSIGNED 1 CACHE INTERNAL "")
SET(TIOCSTAT_IN_SYS_IOCTL CACHE INTERNAL "")
SET(HAVE_S_IROTH CACHE INTERNAL "")
SET(HAVE_S_IFIFO CACHE INTERNAL "")
@@ -354,4 +359,12 @@ SET(HAVE_WCTYPE_H 1 CACHE INTERNAL "")
SET(HAVE_PTHREAD_RWLOCKATTR_SETKIND_NP CACHE INTERNAL "")
SET(HAVE_SOCKADDR_IN_SIN_LEN CACHE INTERNAL "")
SET(HAVE_SOCKADDR_IN6_SIN6_LEN CACHE INTERNAL "")
-ENDIF()
+SET(HAVE_VALGRIND CACHE INTERNAL "")
+SET(HAVE_EVENT_H CACHE INTERNAL "")
+SET(HAVE_LINUX_UNISTD_H CACHE INTERNAL "")
+SET(HAVE_SYS_UTSNAME_H CACHE INTERNAL "")
+SET(HAVE_PTHREAD_ATTR_GETGUARDSIZE CACHE INTERNAL "")
+SET(HAVE_UCONTEXT_H CACHE INTERNAL "")
+SET(HAVE_SOCKPEERCRED CACHE INTERNAL "")
+SET(HAVE_GGDB3 CACHE INTERNAL "")
+ENDIF(MSVC)
diff --git a/cmake/package_name.cmake b/cmake/package_name.cmake
index 1566117cb60..4ba8fc18e3f 100644
--- a/cmake/package_name.cmake
+++ b/cmake/package_name.cmake
@@ -94,6 +94,8 @@ IF(NOT VERSION)
ELSE()
IF(64BIT)
SET(DEFAULT_MACHINE "x86_64")
+ ELSE()
+ SET(DEFAULT_MACHINE "i386")
ENDIF()
ENDIF()
@@ -128,7 +130,7 @@ IF(NOT VERSION)
STRING(REGEX REPLACE "^.*-ndb-" "" NDBVERSION "${VERSION}")
SET(package_name "mysql-cluster${PRODUCT_TAG}-${NDBVERSION}-${SYSTEM_NAME_AND_PROCESSOR}")
ELSE()
- SET(package_name "mysql${PRODUCT_TAG}-${VERSION}-${SYSTEM_NAME_AND_PROCESSOR}")
+ SET(package_name "mariadb${PRODUCT_TAG}-${VERSION}-${SYSTEM_NAME_AND_PROCESSOR}")
ENDIF()
MESSAGE(STATUS "Packaging as: ${package_name}")
diff --git a/cmake/plugin.cmake b/cmake/plugin.cmake
index e946f0ff863..e166275811e 100644
--- a/cmake/plugin.cmake
+++ b/cmake/plugin.cmake
@@ -27,26 +27,9 @@ INCLUDE(${MYSQL_CMAKE_SCRIPT_DIR}/cmake_parse_arguments.cmake)
# [LINK_LIBRARIES lib1...libN]
# [DEPENDENCIES target1...targetN]
-# Append collections files for the plugin to the common files
-# Make sure we don't copy twice if running cmake again
-
-MACRO(PLUGIN_APPEND_COLLECTIONS plugin)
- SET(fcopied "${CMAKE_CURRENT_SOURCE_DIR}/tests/collections/FilesCopied")
- IF(NOT EXISTS ${fcopied})
- FILE(GLOB collections ${CMAKE_CURRENT_SOURCE_DIR}/tests/collections/*)
- FOREACH(cfile ${collections})
- FILE(READ ${cfile} contents)
- GET_FILENAME_COMPONENT(fname ${cfile} NAME)
- FILE(APPEND ${CMAKE_SOURCE_DIR}/mysql-test/collections/${fname} "${contents}")
- FILE(APPEND ${fcopied} "${fname}\n")
- MESSAGE(STATUS "Appended ${cfile}")
- ENDFOREACH()
- ENDIF()
-ENDMACRO()
-
MACRO(MYSQL_ADD_PLUGIN)
MYSQL_PARSE_ARGUMENTS(ARG
- "LINK_LIBRARIES;DEPENDENCIES;MODULE_OUTPUT_NAME;STATIC_OUTPUT_NAME"
+ "LINK_LIBRARIES;DEPENDENCIES;MODULE_OUTPUT_NAME;STATIC_OUTPUT_NAME;COMPONENT"
"STORAGE_ENGINE;STATIC_ONLY;MODULE_ONLY;MANDATORY;DEFAULT;DISABLED;RECOMPILE_FOR_EMBEDDED"
${ARGN}
)
@@ -82,7 +65,7 @@ MACRO(MYSQL_ADD_PLUGIN)
ENDIF()
IF(WITH_${plugin}_STORAGE_ENGINE
- OR WITH_{$plugin}
+ OR WITH_${plugin}
OR WITH_ALL
OR WITH_MAX
AND NOT WITHOUT_${plugin}_STORAGE_ENGINE
@@ -112,12 +95,31 @@ MACRO(MYSQL_ADD_PLUGIN)
SET(ARG_DEPENDENCIES)
ENDIF()
SET(BUILD_PLUGIN 1)
+
+ IF(NOT ARG_MODULE_OUTPUT_NAME)
+ IF(ARG_STORAGE_ENGINE)
+ SET(ARG_MODULE_OUTPUT_NAME "ha_${target}")
+ ELSE()
+ SET(ARG_MODULE_OUTPUT_NAME "${target}")
+ ENDIF()
+ ENDIF()
+
# Build either static library or module
IF (WITH_${plugin} AND NOT ARG_MODULE_ONLY)
+
+ IF(CMAKE_GENERATOR MATCHES "Makefiles")
+ # If there is a shared library from previous shared build,
+ # remove it. This is done just for mysql-test-run.pl
+ # so it does not try to use stale shared lib as plugin
+ # in test.
+ FILE(REMOVE
+ ${CMAKE_CURRENT_BINARY_DIR}/${ARG_MODULE_OUTPUT_NAME}${CMAKE_SHARED_MODULE_SUFFIX})
+ ENDIF()
+
ADD_LIBRARY(${target} STATIC ${SOURCES})
- SET_TARGET_PROPERTIES(${target} PROPERTIES COMPILE_DEFINITONS "MYSQL_SERVER")
DTRACE_INSTRUMENT(${target})
ADD_DEPENDENCIES(${target} GenError ${ARG_DEPENDENCIES})
+ RESTRICT_SYMBOL_EXPORTS(${target})
IF(WITH_EMBEDDED_SERVER)
# Embedded library should contain PIC code and be linkable
# to shared libraries (on systems that need PIC)
@@ -127,7 +129,7 @@ MACRO(MYSQL_ADD_PLUGIN)
DTRACE_INSTRUMENT(${target}_embedded)
IF(ARG_RECOMPILE_FOR_EMBEDDED)
SET_TARGET_PROPERTIES(${target}_embedded
- PROPERTIES COMPILE_DEFINITIONS "MYSQL_SERVER;EMBEDDED_LIBRARY")
+ PROPERTIES COMPILE_DEFINITIONS "EMBEDDED_LIBRARY")
ENDIF()
ADD_DEPENDENCIES(${target}_embedded GenError)
ENDIF()
@@ -152,22 +154,15 @@ MACRO(MYSQL_ADD_PLUGIN)
IF(ARG_MANDATORY)
SET (mysql_mandatory_plugins
- "${mysql_mandatory_plugins} builtin_${target}_plugin,"
+ "${mysql_mandatory_plugins} builtin_maria_${target}_plugin,"
PARENT_SCOPE)
ELSE()
SET (mysql_optional_plugins
- "${mysql_optional_plugins} builtin_${target}_plugin,"
+ "${mysql_optional_plugins} builtin_maria_${target}_plugin,"
PARENT_SCOPE)
ENDIF()
ELSEIF(NOT WITHOUT_${plugin} AND NOT ARG_STATIC_ONLY AND NOT WITHOUT_DYNAMIC_PLUGINS)
- IF(NOT ARG_MODULE_OUTPUT_NAME)
- IF(ARG_STORAGE_ENGINE)
- SET(ARG_MODULE_OUTPUT_NAME "ha_${target}")
- ELSE()
- SET(ARG_MODULE_OUTPUT_NAME "${target}")
- ENDIF()
- ENDIF()
-
+
ADD_VERSION_INFO(${target} MODULE SOURCES)
ADD_LIBRARY(${target} MODULE ${SOURCES})
DTRACE_INSTRUMENT(${target})
@@ -195,16 +190,21 @@ MACRO(MYSQL_ADD_PLUGIN)
SET_TARGET_PROPERTIES(${target} PROPERTIES
OUTPUT_NAME "${ARG_MODULE_OUTPUT_NAME}")
# Install dynamic library
- MYSQL_INSTALL_TARGETS(${target} DESTINATION ${INSTALL_PLUGINDIR} COMPONENT Server)
- INSTALL_DEBUG_TARGET(${target} DESTINATION ${INSTALL_PLUGINDIR}/debug)
- # Add installed files to list for RPMs
- FILE(APPEND ${CMAKE_BINARY_DIR}/support-files/plugins.files
- "%attr(755, root, root) %{_prefix}/${INSTALL_PLUGINDIR}/${ARG_MODULE_OUTPUT_NAME}.so\n"
- "%attr(755, root, root) %{_prefix}/${INSTALL_PLUGINDIR}/debug/${ARG_MODULE_OUTPUT_NAME}.so\n")
- # For internal testing in PB2, append collections files
- IF(DEFINED ENV{PB2WORKDIR})
- PLUGIN_APPEND_COLLECTIONS(${plugin})
+ IF(ARG_COMPONENT)
+ IF(RPM AND NOT CPACK_COMPONENTS_ALL MATCHES ${ARG_COMPONENT})
+ SET(CPACK_COMPONENTS_ALL ${CPACK_COMPONENTS_ALL} ${ARG_COMPONENT} PARENT_SCOPE)
+ SET(CPACK_RPM_${ARG_COMPONENT}_PACKAGE_REQUIRES "MariaDB-server" PARENT_SCOPE)
+
+ # workarounds for cmake issues #13248 and #12864:
+ SET(CPACK_RPM_${ARG_COMPONENT}_USER_FILELIST ${ignored} PARENT_SCOPE)
+ SET(CPACK_RPM_${ARG_COMPONENT}_PACKAGE_PROVIDES "cmake_bug_13248" PARENT_SCOPE)
+ SET(CPACK_RPM_${ARG_COMPONENT}_PACKAGE_OBSOLETES "cmake_bug_13248" PARENT_SCOPE)
+ ENDIF()
+ ELSE()
+ SET(ARG_COMPONENT Server)
ENDIF()
+ MYSQL_INSTALL_TARGETS(${target} DESTINATION ${INSTALL_PLUGINDIR} COMPONENT ${ARG_COMPONENT})
+ #INSTALL_DEBUG_TARGET(${target} DESTINATION ${INSTALL_PLUGINDIR}/debug COMPONENT ${ARG_COMPONENT})
ELSE()
IF(WITHOUT_${plugin})
# Update cache variable
@@ -219,6 +219,11 @@ MACRO(MYSQL_ADD_PLUGIN)
TARGET_LINK_LIBRARIES (${target} ${ARG_LINK_LIBRARIES})
ENDIF()
+ GET_FILENAME_COMPONENT(subpath ${CMAKE_CURRENT_SOURCE_DIR} NAME)
+ IF(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/mysql-test")
+ INSTALL_MYSQL_TEST("${CMAKE_CURRENT_SOURCE_DIR}/mysql-test/" "plugin/${subpath}")
+ ENDIF()
+
ENDMACRO()
diff --git a/cmake/readline.cmake b/cmake/readline.cmake
index 4840229a82e..64e04ef8663 100644
--- a/cmake/readline.cmake
+++ b/cmake/readline.cmake
@@ -14,6 +14,8 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+INCLUDE(CheckCXXSourceCompiles)
+
MACRO (MYSQL_CHECK_MULTIBYTE)
CHECK_INCLUDE_FILE(wctype.h HAVE_WCTYPE_H)
CHECK_INCLUDE_FILE(wchar.h HAVE_WCHAR_H)
@@ -107,79 +109,82 @@ MACRO (FIND_CURSES)
ENDIF()
ENDIF()
ENDIF()
+ CHECK_LIBRARY_EXISTS(${CURSES_LIBRARY} setupterm "" HAVE_SETUPTERM)
+ CHECK_LIBRARY_EXISTS(${CURSES_LIBRARY} vidattr "" HAVE_VIDATTR)
ENDMACRO()
MACRO (MYSQL_USE_BUNDLED_READLINE)
SET(USE_NEW_READLINE_INTERFACE 1)
- SET(HAVE_HIST_ENTRY)
- SET(USE_LIBEDIT_INTERFACE)
- SET(READLINE_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/cmd-line-utils)
- SET(READLINE_LIBRARY readline)
- FIND_CURSES()
+ SET(HAVE_HIST_ENTRY 0 CACHE INTERNAL "" FORCE)
+ SET(MY_READLINE_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/cmd-line-utils/readline)
+ SET(MY_READLINE_LIBRARY readline)
ADD_SUBDIRECTORY(${CMAKE_SOURCE_DIR}/cmd-line-utils/readline)
ENDMACRO()
-MACRO (MYSQL_USE_BUNDLED_LIBEDIT)
- SET(USE_LIBEDIT_INTERFACE 1)
- SET(HAVE_HIST_ENTRY 1)
- SET(READLINE_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/cmd-line-utils/libedit)
- SET(READLINE_LIBRARY edit)
- FIND_CURSES()
- ADD_SUBDIRECTORY(${CMAKE_SOURCE_DIR}/cmd-line-utils/libedit)
-ENDMACRO()
-
-
-MACRO (MYSQL_FIND_SYSTEM_READLINE name)
+MACRO (MYSQL_FIND_SYSTEM_READLINE)
- FIND_PATH(${name}_INCLUDE_DIR readline/readline.h )
- FIND_LIBRARY(${name}_LIBRARY NAMES ${name})
- MARK_AS_ADVANCED(${name}_INCLUDE_DIR ${name}_LIBRARY)
-
- INCLUDE(CheckCXXSourceCompiles)
- SET(CMAKE_REQUIRES_LIBRARIES ${${name}_LIBRARY})
+ FIND_PATH(READLINE_INCLUDE_DIR readline.h PATH_SUFFIXES readline)
+ FIND_LIBRARY(READLINE_LIBRARY NAMES readline)
+ MARK_AS_ADVANCED(READLINE_INCLUDE_DIR READLINE_LIBRARY)
- IF(${name}_LIBRARY AND ${name}_INCLUDE_DIR)
- SET(SYSTEM_READLINE_FOUND 1)
- SET(CMAKE_REQUIRED_LIBRARIES ${${name}_LIBRARY})
+ IF(READLINE_LIBRARY AND READLINE_INCLUDE_DIR)
+ SET(CMAKE_REQUIRED_LIBRARIES ${READLINE_LIBRARY} ${CURSES_LIBRARY})
+ SET(CMAKE_REQUIRED_INCLUDES ${READLINE_INCLUDE_DIR})
CHECK_CXX_SOURCE_COMPILES("
#include <stdio.h>
- #include <readline/readline.h>
+ #include <readline.h>
int main(int argc, char **argv)
{
- HIST_ENTRY entry;
- return 0;
+ rl_completion_func_t *func1= (rl_completion_func_t*)0;
+ rl_compentry_func_t *func2= (rl_compentry_func_t*)0;
}"
- ${name}_HAVE_HIST_ENTRY)
-
- CHECK_CXX_SOURCE_COMPILES("
+ NEW_READLINE_INTERFACE)
+
+ CHECK_C_SOURCE_COMPILES("
#include <stdio.h>
- #include <readline/readline.h>
+ #include <readline.h>
+ #if RL_VERSION_MAJOR > 5
+ #error
+ #endif
int main(int argc, char **argv)
{
- char res= *(*rl_completion_entry_function)(0,0);
- completion_matches(0,0);
+ return 0;
}"
- ${name}_USE_LIBEDIT_INTERFACE)
+ READLINE_V5)
+
+ IF(NEW_READLINE_INTERFACE)
+ IF (READLINE_V5)
+ SET(USE_NEW_READLINE_INTERFACE 1)
+ ELSE()
+ IF(NOT_FOR_DISTRIBUTION)
+ SET(NON_DISTRIBUTABLE_WARNING 1)
+ SET(USE_NEW_READLINE_INTERFACE 1)
+ ELSE()
+ SET(USE_NEW_READLINE_INTERFACE 0)
+ ENDIF(NOT_FOR_DISTRIBUTION)
+ ENDIF(READLINE_V5)
+ ENDIF(NEW_READLINE_INTERFACE)
+ ENDIF()
+ENDMACRO()
+MACRO (MYSQL_FIND_SYSTEM_LIBEDIT)
+ FIND_PATH(LIBEDIT_INCLUDE_DIR readline.h PATH_SUFFIXES editline edit/readline)
+ FIND_LIBRARY(LIBEDIT_LIBRARY edit)
+ MARK_AS_ADVANCED(LIBEDIT_INCLUDE_DIR LIBEDIT_LIBRARY)
+ IF(LIBEDIT_LIBRARY AND LIBEDIT_INCLUDE_DIR)
+ SET(CMAKE_REQUIRED_LIBRARIES ${LIBEDIT_LIBRARY})
+ SET(CMAKE_REQUIRED_INCLUDES ${LIBEDIT_INCLUDE_DIR})
CHECK_CXX_SOURCE_COMPILES("
#include <stdio.h>
- #include <readline/readline.h>
+ #include <readline.h>
int main(int argc, char **argv)
{
- rl_completion_func_t *func1= (rl_completion_func_t*)0;
- rl_compentry_func_t *func2= (rl_compentry_func_t*)0;
+ int res= (*rl_completion_entry_function)(0,0);
+ completion_matches(0,0);
}"
- ${name}_USE_NEW_READLINE_INTERFACE)
-
- IF(${name}_USE_LIBEDIT_INTERFACE OR ${name}_USE_NEW_READLINE_INTERFACE)
- SET(READLINE_LIBRARY ${${name}_LIBRARY})
- SET(READLINE_INCLUDE_DIR ${${name}_INCLUDE_DIR})
- SET(HAVE_HIST_ENTRY ${${name}_HAVE_HIST_ENTRY})
- SET(USE_LIBEDIT_INTERFACE ${${name}_USE_LIBEDIT_INTERFACE})
- SET(USE_NEW_READLINE_INTERFACE ${${name}_USE_NEW_READLINE_INTERFACE})
- SET(READLINE_FOUND 1)
- ENDIF()
+ LIBEDIT_INTERFACE)
+ SET(USE_LIBEDIT_INTERFACE ${LIBEDIT_INTERFACE})
ENDIF()
ENDMACRO()
@@ -187,44 +192,44 @@ ENDMACRO()
MACRO (MYSQL_CHECK_READLINE)
IF (NOT WIN32)
MYSQL_CHECK_MULTIBYTE()
- IF(NOT CYGWIN)
- SET(WITH_LIBEDIT ON CACHE BOOL "Use bundled libedit")
- SET(WITH_READLINE OFF CACHE BOOL "Use bundled readline")
- ELSE()
- # Bundled libedit does not compile on cygwin, only readline
- SET(WITH_READLINE OFF CACHE BOOL "Use bundled readline")
- ENDIF()
+ SET(WITH_READLINE OFF CACHE BOOL "Use bundled readline")
+ FIND_CURSES()
- # Handle mutual exclusion of WITH_READLINE/WITH_LIBEDIT variables
- # We save current setting to recognize when user switched between
- # WITH_READLINE and WITH_LIBEDIT
IF(WITH_READLINE)
- IF(NOT SAVE_READLINE_SETTING OR SAVE_READLINE_SETTING MATCHES
- "WITH_LIBEDIT")
- SET(WITH_LIBEDIT OFF CACHE BOOL "Use bundled libedit" FORCE)
- ENDIF()
- ELSEIF(WITH_LIBEDIT)
- IF(NOT SAVE_READLINE_SETTING OR SAVE_READLINE_SETTING MATCHES
- "WITH_READLINE")
- SET(WITH_READLINE OFF CACHE BOOL "Use bundled readline" FORCE)
- ENDIF()
- ENDIF()
-
- IF(WITH_READLINE)
- MYSQL_USE_BUNDLED_READLINE()
- SET(SAVE_READLINE_SETTING WITH_READLINE CACHE INTERNAL "" FORCE)
- ELSEIF(WITH_LIBEDIT)
- MYSQL_USE_BUNDLED_LIBEDIT()
- SET(SAVE_READLINE_SETTING WITH_LIBEDIT CACHE INTERNAL "" FORCE)
+ MYSQL_USE_BUNDLED_READLINE()
ELSE()
- MYSQL_FIND_SYSTEM_READLINE(readline)
- IF(NOT READLINE_FOUND)
- MYSQL_FIND_SYSTEM_READLINE(edit)
- IF(NOT READLINE_FOUND)
- MESSAGE(FATAL_ERROR "Cannot find system readline or libedit libraries.Use WITH_READLINE or WITH_LIBEDIT")
+ # OSX includes incompatible readline lib
+ IF (NOT APPLE)
+ MYSQL_FIND_SYSTEM_READLINE()
+ ENDIF()
+ IF(USE_NEW_READLINE_INTERFACE)
+ SET(MY_READLINE_INCLUDE_DIR ${READLINE_INCLUDE_DIR})
+ SET(MY_READLINE_LIBRARY ${READLINE_LIBRARY} ${CURSES_LIBRARY})
+ ELSE()
+ MYSQL_FIND_SYSTEM_LIBEDIT()
+ IF(USE_LIBEDIT_INTERFACE)
+ SET(MY_READLINE_INCLUDE_DIR ${LIBEDIT_INCLUDE_DIR})
+ SET(MY_READLINE_LIBRARY ${LIBEDIT_LIBRARY} ${CURSES_LIBRARY})
+ ELSE()
+ MYSQL_USE_BUNDLED_READLINE()
ENDIF()
ENDIF()
ENDIF()
+
+ SET(CMAKE_REQUIRED_LIBRARIES ${MY_READLINE_LIBRARY})
+ SET(CMAKE_REQUIRED_INCLUDES ${MY_READLINE_INCLUDE_DIR})
+ CHECK_CXX_SOURCE_COMPILES("
+ #include <stdio.h>
+ #include <readline.h>
+ int main(int argc, char **argv)
+ {
+ HIST_ENTRY entry;
+ return 0;
+ }"
+ HAVE_HIST_ENTRY)
+ SET(CMAKE_REQUIRED_LIBRARIES)
+ SET(CMAKE_REQUIRED_INCLUDES)
ENDIF(NOT WIN32)
+ CHECK_INCLUDE_FILES ("curses.h;term.h" HAVE_TERM_H)
ENDMACRO()
diff --git a/cmake/ssl.cmake b/cmake/ssl.cmake
index f11c18a1bc8..6f7bd92c777 100644
--- a/cmake/ssl.cmake
+++ b/cmake/ssl.cmake
@@ -1,4 +1,5 @@
-# Copyright (c) 2009, 2017, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2009, 2012, Oracle and/or its affiliates.
+# Copyright (c) 2011, 2017, MariaDB Corporation
#
# 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
@@ -13,14 +14,8 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-SET(WITH_SSL_DOC "bundled (use yassl)")
-SET(WITH_SSL_DOC
- "${WITH_SSL_DOC}, yes (prefer os library if present, otherwise use bundled)")
-SET(WITH_SSL_DOC
- "${WITH_SSL_DOC}, system (use os library)")
-
MACRO (CHANGE_SSL_SETTINGS string)
- SET(WITH_SSL ${string} CACHE STRING ${WITH_SSL_DOC} FORCE)
+ SET(WITH_SSL ${string} CACHE STRING "Options are: no bundled yes(prefer os library if present otherwise use bundled) system(use os library)" FORCE)
ENDMACRO()
MACRO (MYSQL_USE_BUNDLED_SSL)
@@ -32,6 +27,7 @@ MACRO (MYSQL_USE_BUNDLED_SSL)
SET(SSL_INCLUDE_DIRS ${INC_DIRS})
SET(SSL_INTERNAL_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/extra/yassl/taocrypt/mySTL)
SET(SSL_DEFINES "-DHAVE_YASSL -DYASSL_PURE_C -DYASSL_PREFIX -DHAVE_OPENSSL -DMULTI_THREADED")
+ SET(HAVE_ERR_remove_thread_state OFF CACHE INTERNAL "yassl doesn't have ERR_remove_thread_state")
CHANGE_SSL_SETTINGS("bundled")
#Remove -fno-implicit-templates
#(yassl sources cannot be compiled with it)
@@ -56,12 +52,14 @@ ENDMACRO()
# MYSQL_CHECK_SSL
#
# Provides the following configure options:
-# WITH_SSL=[bundled|yes|system]
+# WITH_SSL=[yes|no|bundled]
MACRO (MYSQL_CHECK_SSL)
IF(NOT WITH_SSL)
+ IF(WIN32)
CHANGE_SSL_SETTINGS("bundled")
- MESSAGE(STATUS "Found WITH_SSL set to no. "
- "Changing it to bundled")
+ ELSE()
+ CHANGE_SSL_SETTINGS("no")
+ ENDIF()
ENDIF()
IF(WITH_SSL STREQUAL "bundled")
@@ -73,8 +71,14 @@ MACRO (MYSQL_CHECK_SSL)
FIND_LIBRARY(CRYPTO_LIBRARY crypto)
MARK_AS_ADVANCED(CRYPTO_LIBRARY)
INCLUDE(CheckSymbolExists)
+ SET(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR})
+ SET(CMAKE_REQUIRED_LIBRARIES ${OPENSSL_LIBRARIES})
CHECK_SYMBOL_EXISTS(SHA512_DIGEST_LENGTH "openssl/sha.h"
HAVE_SHA512_DIGEST_LENGTH)
+ CHECK_SYMBOL_EXISTS(ERR_remove_thread_state "openssl/err.h"
+ HAVE_ERR_remove_thread_state)
+ SET(CMAKE_REQUIRED_INCLUDES)
+ SET(CMAKE_REQUIRED_LIBRARIES)
IF(OPENSSL_FOUND AND CRYPTO_LIBRARY AND HAVE_SHA512_DIGEST_LENGTH)
SET(SSL_SOURCES "")
SET(SSL_LIBRARIES ${OPENSSL_LIBRARIES} ${CRYPTO_LIBRARY})
@@ -88,8 +92,7 @@ MACRO (MYSQL_CHECK_SSL)
ENDIF()
MYSQL_USE_BUNDLED_SSL()
ENDIF()
- ELSE()
- MESSAGE(SEND_ERROR "Wrong option for WITH_SSL. "
- "Valid options are : ${WITH_SSL_DOC}")
+ ELSEIF(NOT WITH_SSL STREQUAL "no")
+ MESSAGE(SEND_ERROR "Wrong option for WITH_SSL. Valid values are : yes, no, bundled")
ENDIF()
ENDMACRO()
diff --git a/cmake/versioninfo.rc.in b/cmake/versioninfo.rc.in
index f849a9fcb59..cd880b917e0 100644
--- a/cmake/versioninfo.rc.in
+++ b/cmake/versioninfo.rc.in
@@ -1,38 +1,38 @@
-// Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
-//
-// 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
-
-#include <windows.h>
-VS_VERSION_INFO VERSIONINFO
-FILEVERSION @MAJOR_VERSION@,@MINOR_VERSION@,@PATCH_VERSION@,0
-PRODUCTVERSION @MAJOR_VERSION@,@MINOR_VERSION@,@PATCH_VERSION@,0
-FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
-FILEFLAGS 0
-FILEOS VOS__WINDOWS32
-FILETYPE @FILETYPE@
-FILESUBTYPE VFT2_UNKNOWN
-BEGIN
- BLOCK "StringFileInfo"
- BEGIN
- BLOCK "040904E4"
- BEGIN
- VALUE "FileVersion", "@MAJOR_VERSION@.@MINOR_VERSION@.@PATCH_VERSION@.0\0"
- VALUE "ProductVersion", "@MAJOR_VERSION@.@MINOR_VERSION@.@PATCH_VERSION@.0\0"
- END
- END
- BLOCK "VarFileInfo"
- BEGIN
- VALUE "Translation", 0x409, 1252
- END
-END
+// Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
+//
+// 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
+
+#include <windows.h>
+VS_VERSION_INFO VERSIONINFO
+FILEVERSION @MAJOR_VERSION@,@MINOR_VERSION@,@PATCH_VERSION@,@TINY_VERSION@
+PRODUCTVERSION @MAJOR_VERSION@,@MINOR_VERSION@,@PATCH_VERSION@,@TINY_VERSION@
+FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
+FILEFLAGS 0
+FILEOS VOS__WINDOWS32
+FILETYPE @FILETYPE@
+FILESUBTYPE VFT2_UNKNOWN
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904E4"
+ BEGIN
+ VALUE "FileVersion", "@MAJOR_VERSION@.@MINOR_VERSION@.@PATCH_VERSION@.@TINY_VERSION@\0"
+ VALUE "ProductVersion", "@MAJOR_VERSION@.@MINOR_VERSION@.@PATCH_VERSION@.@TINY_VERSION@\0"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x409, 1252
+ END
+END
diff --git a/cmake/win_compatibility.manifest b/cmake/win_compatibility.manifest
new file mode 100644
index 00000000000..2e4b27a6dc4
--- /dev/null
+++ b/cmake/win_compatibility.manifest
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
+ <application>
+ <!-- Windows Vista and Windows Server 2008 -->
+ <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
+
+ <!-- Windows 7 and Windows Server 2008 R2 -->
+ <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
+
+ <!-- Windows 8 and Windows Server 2012 -->
+ <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
+
+ <!-- Windows 8.1 and Windows Server 2012 R2 -->
+ <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
+
+ <!-- Windows 10 -->
+ <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
+
+ </application>
+ </compatibility>
+</asmv1:assembly>