summaryrefslogtreecommitdiff
path: root/cmake
diff options
context:
space:
mode:
authorVladislav Vaintroub <vvaintroub@mysql.com>2009-11-09 12:32:48 +0100
committerVladislav Vaintroub <vvaintroub@mysql.com>2009-11-09 12:32:48 +0100
commitbc76ad8f6be7e75c7f1dccc322638566ee0fc0e7 (patch)
treeef650a7fd633d354f237aa267a871fce11fe48d3 /cmake
parentd476bbb0becb27d7d3cb1fc5cc0ac4d401622893 (diff)
downloadmariadb-git-bc76ad8f6be7e75c7f1dccc322638566ee0fc0e7.tar.gz
WL#5161 : Cross-platform build with CMake
BUILD-CMAKE: WL#5161 : Documentation on how to build with CMake on Unix/Windows BUILD/Makefile.am: Add new file BUILD/autorun.sh: WL#5161 : use choose_configure instead of autotools configure script (choose configure will call cmake if cmake is available) BUILD/choose_configure.sh: WL#5161 : use choose_configure instead of autotools configure script (choose configure will call cmake if cmake is available) CMakeLists.txt: WL#5161 : Rewrite top-level CMakeLists.txt. Remove Windows specifics - compiler flags handling moved to configure.cmake - storage engine/plugin stuff moved into cmake/plugin.cmake - copy docs Makefile.am: Added new files client/CMakeLists.txt: WL#5161 : Rewrite CMakeLists.txt to be platform-independent Handle packagng (add INSTALL commands) cmake/Makefile.am: WL#5161 : use choose_configure instead of autotools configure script (choose configure will call cmake if cmake is available) cmake/abi_check.cmake: Custom targets for abi_check (for cmake) cmake/bison.cmake: - Check bison availability - Add RUN_BISON macro (used to create sql_yacc.cc and sql_yacc.h) cmake/cat.cmake: Add helper script to concatenate files. cmake/character_sets.cmake: Handle configuration parameters WITH_EXTRA_CHARSETS cmake/check_minimal_version.cmake: Helper script to check the minimum required version of cmake cmake/configure.pl: Add perl script to convert ./configure parameters for cmake cmake/create_initial_db.cmake.in: Add script helper to create initial database. (on Windows, we pack initial db with the redistribution package) cmake/do_abi_check.cmake: Perform abi check cmake/dtrace.cmake: Handle dtrace in CMake Build. Check for dtrace availablility, run dtrace -G on solaris in prelink step cmake/dtrace_prelink.cmake: Run dtrace -G on Solaris in pre-link step, link the object it creates together with library or executable cmake/install_macros.cmake: Helper macros for packaging (install pdb on Windows, install symlinks on Unix) cmake/make_dist.cmake.in: "make dist" - - pack autotools ./configure script with the source (renamed to configure.am) - pack bison output cmake/merge_archives_unix.cmake.in: script to merge static libraries on Unix cmake/misc.cmake: Build helper macros - MERGE_STATIC_LIBS We use it when building client library and embedded (avoid recompilation) - Convert source file paths to absolute names. We use it in to locate files of a different project, when the files need to be recompiled (e.g in embedded several storage engines are recompiled with -DEMBEDDED_LIBRARY) cmake/mysql_version.cmake: Extract version info from configure.in Handle package names. cmake/plugin.cmake: Rewrote storage/mysql_storage_engine.cmake to handle other types of plugins and do it in OS-independent manner. cmake/readline.cmake: Macros to handle WITH_READLINE/WITH_LIBEDIT parameters cmake/ssl.cmake: Add macros to handle WITH_SSL parameter. cmake/stack_direction.c: Helper to check stack direction. cmake/zlib.cmake: Add macros to handle WITH_ZLIB parameter cmd-line-utils/libedit/CMakeLists.txt: Build libedit with cmake. cmd-line-utils/libedit/Makefile.am: Add new file cmd-line-utils/readline/CMakeLists.txt: Build readline with CMake. cmd-line-utils/readline/Makefile.am: Add new file config.h.cmake: WL#5161 : Add config.h template for cmake configure.cmake: WL#5161 : Add platform tests ( for cmake) configure.in: Added new subdirectories dbug/CMakeLists.txt: WL#5161 extra/CMakeLists.txt: WL#5161 extra/yassl/CMakeLists.txt: WL#5161 extra/yassl/taocrypt/CMakeLists.txt: WL#5161 include/Makefile.am: Add new file include/keycache.h: remove configure-win.h and remove HUGE_PTR defined there. include/my_global.h: use my_config.h for Windows, not config-win.h anymore include/my_pthread.h: - Move thread_safe_increment from config-win.h to other headers (config-win.h is not used anymore) - Declare pthread_cancel on Windows (it is used in daemon_example) include/my_sys.h: Add malloc.h on Windows (we use -D_WIN32_LEAN_AND_MEAN now, and with this define malloc.h is not included automatically via windows.h) include/mysql/plugin.h: Handle pure-C plugins with Microsoft compiler. include/thr_alarm.h: remove rf_SetTimer that used to be defined in config-win.h Replace with UINT_PTR (we do not use config-win.h anymore and typedef was needed in this single place only) libmysql/CMakeLists.txt: Avoid pointless recompilation of source files in client library if possible. Merge static libs (dbug, mysys) to create static client library. libmysqld/CMakeLists.txt: Avoid pointless recompilation of source files when building embedded. Instead, merge dbug and mysys (and some other static libs) into embedded. libmysqld/examples/CMakeLists.txt: Embedded compilation on Unix libmysqld/lib_sql.cc: Do not define THD::clear_error() in lib_sql.cc for embedded. Instead, use the same inline definition from sql_class.h as in none-embedded case (fixes duplicate symbol errors on Windows and removes pointless #ifdef EMBEDDED) man/CMakeLists.txt: Install man files. man/Makefile.am: Add new file. mysql-test/CMakeLists.txt: Install mysql-test files mysql-test/Makefile.am: Add new files mysql-test/lib/My/ConfigFactory.pm: Allow testing with mtr in out-of-source builds. mysql-test/lib/My/Find.pm: the build configurations are now also available on Unix Xcode on Mac uses the Release, RelwithDebinfo and Debug subdirectories for executables. Earlier, build configurations were available only on Windows. mysql-test/lib/My/SafeProcess.pm: Allow testing with mtr in out-of-source builds. mysql-test/lib/My/SafeProcess/CMakeLists.txt: Port CMakeLists.txt to Unix mysql-test/lib/My/SafeProcess/safe_kill_win.cc: add stdlib.h (to be able to compile with -DWIN32_LEAN_AND_MEAN) mysql-test/lib/My/SafeProcess/safe_process_win.cc: Add stdlib.h (to be able to compile with -DWIN32_LEAN_AND_MEAN) define JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE if not defined (can happen using MinGW compiler that comes with old SDK) mysql-test/mtr.out-of-source: Allow testing with mtr in out-of-source builds. mysql-test/mysql-test-run.pl: Allow testing with mtr in out-of-source builds. Use common find_plugin macro for Windows and unix. mysql-test/t/fulltext_plugin.test: This test can now run on Windows as well. mysys/CMakeLists.txt: Port CMakeLists.txt to Unix mysys/my_create.c: config-win.h is dead => NO_OPEN_3 is never defined. mysys/my_getsystime.c: config-win.h is dead => define OFFSET_TO_EPOCH where it is used. mysys/my_winthread.c: Add win32 pthread_cancel - used by daemon_example mysys/mysys_priv.h: config-win.h is dead => include <sys/stat.h> where it is used fix prototype of my_win_(f)stat plugin/daemon_example/CMakeLists.txt: Compile daemon_example with CMake plugin/daemon_example/Makefile.am: Add new file plugin/fulltext/CMakeLists.txt: Compile full-text example with CMake plugin/fulltext/Makefile.am: Add new file. plugin/semisync/CMakeLists.txt: Fix semisync to use common macro for plugins. regex/CMakeLists.txt: Use absolute filenames, when adding regex library (we recompile files in embedded, and want to locate sources via GET_TARGET_PROPERTY( ... SOURCES ..)) regex/regex2.h: Remove pointless typedef (produces error with MinGW compiler) scripts/CMakeLists.txt: Add configure/install for scripts sql-bench/CMakeLists.txt: install sql-bench files sql-bench/Makefile.am: Add new file sql/CMakeLists.txt: Port CmakeLists.txt to Unix sql/nt_servc.cc: compile server with -DWIN32_LEAN_AND_MEAN sql/share/CMakeLists.txt: Install charsets sql/share/Makefile.am: Add new file sql/sql_builtin.cc.in: Handle pure-C plugins on Windows. sql/sql_class.h: Use the same clear_error macro in embedded and not embedded. Fixes pointless #ifdef and avoids duplicate symbols when linking on Windows. storage/Makefile.am: storage/mysql_storage_engine.cmake => cmake/plugin.cmake storage/archive/CMakeLists.txt: Add names for static and dynamic plugin libraries. Link archive with zlib storage/blackhole/CMakeLists.txt: Add names for static and dynamic storage engine libraries storage/csv/CMakeLists.txt: Add names for static and dynamic storage engine libraries storage/example/CMakeLists.txt: Add names for static and dynamic storage engine libraries storage/federated/CMakeLists.txt: Add names for static and dynamic storage engine libraries storage/heap/CMakeLists.txt: Add names for static and dynamic storage engine libraries storage/ibmdb2i/CMakeLists.txt: Better port for ibmdb2i plugin storage/innobase/CMakeLists.txt: Run system checks. Add names for static and dynamic storage engine libraries. storage/innobase/include/page0page.ic: Fix compile error on OpenSolaris. storage/myisam/CMakeLists.txt: Port CmakeLists.txt to Unix storage/myisammrg/CMakeLists.txt: Add names for static and dynamic storage engine libraries storage/mysql_storage_engine.cmake: storage/mysql_storage_engine.cmake => cmake/plugin.cmake support-files/CMakeLists.txt: Configure and install some files from support-files. support-files/Makefile.am: Add new file tests/CMakeLists.txt: In general case, mysqlclient library can be dependent on C++ runtime(if it includes yassl and is not compiled with gcc or MSVC) unittest/mysys/CMakeLists.txt: Add unit tests unittest/mysys/Makefile.am: Add new file unittest/mytap/CMakeLists.txt: Add library for unit tests unittest/mytap/Makefile.am: Add new file unittest/mytap/tap.c: fix function definitions to match declarations win/create_def_file.js: Fix link error with intel compiler (icl defines of special label for exception handler)
Diffstat (limited to 'cmake')
-rw-r--r--cmake/Makefile.am21
-rw-r--r--cmake/abi_check.cmake60
-rw-r--r--cmake/bison.cmake64
-rw-r--r--cmake/cat.cmake27
-rw-r--r--cmake/character_sets.cmake63
-rw-r--r--cmake/check_minimal_version.cmake19
-rw-r--r--cmake/configure.pl79
-rw-r--r--cmake/create_initial_db.cmake.in84
-rw-r--r--cmake/do_abi_check.cmake78
-rw-r--r--cmake/dtrace.cmake92
-rw-r--r--cmake/dtrace_prelink.cmake34
-rw-r--r--cmake/install_macros.cmake69
-rw-r--r--cmake/make_dist.cmake.in176
-rw-r--r--cmake/merge_archives_unix.cmake.in62
-rw-r--r--cmake/misc.cmake128
-rw-r--r--cmake/mysql_version.cmake142
-rw-r--r--cmake/plugin.cmake171
-rw-r--r--cmake/readline.cmake197
-rw-r--r--cmake/ssl.cmake88
-rw-r--r--cmake/stack_direction.c31
-rw-r--r--cmake/zlib.cmake73
21 files changed, 1758 insertions, 0 deletions
diff --git a/cmake/Makefile.am b/cmake/Makefile.am
new file mode 100644
index 00000000000..2326f787ab8
--- /dev/null
+++ b/cmake/Makefile.am
@@ -0,0 +1,21 @@
+EXTRA_DIST = \
+ cat.cmake \
+ check_minimal_version.cmake \
+ create_initial_db.cmake.in \
+ make_dist.cmake.in \
+ dtrace.cmake \
+ abi_check.cmake \
+ bison.cmake \
+ configure.pl \
+ character_sets.cmake \
+ misc.cmake \
+ readline.cmake \
+ mysql_version.cmake \
+ install_macros.cmake \
+ ssl.cmake \
+ plugin.cmake \
+ zlib.cmake \
+ stack_direction.c \
+ do_abi_check.cmake \
+ merge_archives_unix.cmake.in \
+ dtrace_prelink.cmake
diff --git a/cmake/abi_check.cmake b/cmake/abi_check.cmake
new file mode 100644
index 00000000000..61b0d9e7970
--- /dev/null
+++ b/cmake/abi_check.cmake
@@ -0,0 +1,60 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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
+
+#
+# Headers which need to be checked for abi/api compatibility.
+# API_PREPROCESSOR_HEADER will be used until mysql_priv.h stablizes
+# after which TEST_PREPROCESSOR_HEADER will be used.
+#
+# We use gcc specific preprocessing command and sed/diff, so it will
+# only be run on Unix and only if gcc is used.
+IF(CMAKE_COMPILER_IS_GNUCC AND UNIX)
+ IF(CMAKE_C_COMPILER MATCHES "ccache$")
+ SET(COMPILER ${CMAKE_C_COMPILER_ARG1})
+ STRING(REGEX REPLACE "^ " "" COMPILER ${COMPILER})
+ ELSE()
+ SET(COMPILER ${CMAKE_C_COMPILER})
+ ENDIF()
+ SET(API_PREPROCESSOR_HEADER
+ ${CMAKE_SOURCE_DIR}/include/mysql/plugin.h
+ ${CMAKE_SOURCE_DIR}/include/mysql.h)
+
+ SET(TEST_PREPROCESSOR_HEADER
+ ${CMAKE_SOURCE_DIR}/include/mysql/plugin.h
+ ${CMAKE_SOURCE_DIR}/sql/mysql_priv.h
+ ${CMAKE_SOURCE_DIR}/include/mysql.h)
+
+
+ ADD_CUSTOM_TARGET(abi_check ALL
+ COMMAND ${CMAKE_COMMAND}
+ -DCOMPILER=${COMPILER}
+ -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}
+ -DCMAKE_C_COMPILER=${COMPILER}
+ -DCMAKE_SOURCE_DIR=${CMAKE_SOURCE_DIR}
+ -DCMAKE_BINARY_DIR=${CMAKE_BINARY_DIR}
+ "-DABI_HEADERS=${TEST_PREPROCESSOR_HEADER}"
+ -P ${CMAKE_SOURCE_DIR}/cmake/scripts/do_abi_check.cmake
+ VERBATIM
+ )
+ENDIF()
+
diff --git a/cmake/bison.cmake b/cmake/bison.cmake
new file mode 100644
index 00000000000..b1c2d7393fa
--- /dev/null
+++ b/cmake/bison.cmake
@@ -0,0 +1,64 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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
+
+FIND_PROGRAM(BISON_EXECUTABLE bison DOC "path to the bison executable")
+MARK_AS_ADVANCED(BISON_EXECUTABLE "")
+IF(NOT BISON_EXECUTABLE)
+ MESSAGE("Warning: Bison executable not found in PATH")
+ELSEIF(BISON_EXECUTABLE AND NOT BISON_USABLE)
+ # Check version as well
+ EXEC_PROGRAM(${BISON_EXECUTABLE} ARGS --version OUTPUT_VARIABLE BISON_VERSION_STR)
+ # Get first line in case it's multiline
+ STRING(REGEX REPLACE "([^\n]+).*" "\\1" FIRST_LINE "${BISON_VERSION_STR}")
+ # get version information
+ STRING(REGEX REPLACE ".* ([0-9]+)\\.([0-9]+)" "\\1" BISON_VERSION_MAJOR "${FIRST_LINE}")
+ STRING(REGEX REPLACE ".* ([0-9]+)\\.([0-9]+)" "\\2" BISON_VERSION_MINOR "${FIRST_LINE}")
+ IF (BISON_VERSION_MAJOR LESS 2)
+ MESSAGE("Warning: bison version is old. please update to version 2")
+ ELSE()
+ SET(BISON_USABLE 1 CACHE INTERNAL "Bison version 2 or higher")
+ ENDIF()
+ENDIF()
+
+# Use bison to generate C++ and header file
+MACRO (RUN_BISON input_yy output_cc output_h)
+ IF(BISON_TOO_OLD)
+ IF(EXISTS ${output_cc} AND EXISTS ${output_h})
+ SET(BISON_USABLE FALSE)
+ ENDIF()
+ ENDIF()
+ IF(BISON_USABLE)
+ ADD_CUSTOM_COMMAND(
+ OUTPUT ${output_cc}
+ ${output_h}
+ COMMAND bison -y -p MYSQL
+ --output=${output_cc}
+ --defines=${output_h}
+ ${input_yy}
+ DEPENDS ${input_yy}
+ )
+ ELSE()
+ # Bison is missing or not usable, e.g too old
+ IF(EXISTS ${output_cc} AND EXISTS ${output_h})
+ IF(${input_yy} IS_NEWER_THAN ${output_cc} OR ${input_yy} IS_NEWER_THAN ${output_h})
+ # Possibly timestamps are messed up in source distribution.
+ MESSAGE("Warning: no usable bison found, ${input_yy} will not be rebuilt.")
+ ENDIF()
+ ELSE()
+ # Output files are missing, bail out.
+ MESSAGE(FATAL_ERROR "Please install bison.")
+ ENDIF()
+ ENDIF()
+ENDMACRO()
diff --git a/cmake/cat.cmake b/cmake/cat.cmake
new file mode 100644
index 00000000000..532f4115104
--- /dev/null
+++ b/cmake/cat.cmake
@@ -0,0 +1,27 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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
+
+# Concatenate files
+#
+# Parameters :
+# IN - input files (list)
+# OUT - output file
+FILE(WRITE ${OUT} "")
+FOREACH(FILENAME ${IN})
+ FILE(READ ${FILENAME} CONTENTS)
+ FILE(APPEND ${OUT} "${CONTENTS}")
+ENDFOREACH()
+
+
diff --git a/cmake/character_sets.cmake b/cmake/character_sets.cmake
new file mode 100644
index 00000000000..c21b6c60113
--- /dev/null
+++ b/cmake/character_sets.cmake
@@ -0,0 +1,63 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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
+
+#Charsets and collations
+IF(NOT DEFAULT_CHARSET)
+SET(DEFAULT_CHARSET "latin1")
+ENDIF()
+
+IF(NOT DEFAULT_COLLATIONS)
+SET(DEFAULT_COLLATION "latin1_swedish_ci")
+ENDIF()
+
+SET(CHARSETS ${DEFAULT_CHARSET} latin1 utf8 utf8mb3)
+SET(CHARSETS_COMPLEX big5 cp1250 cp932 eucjpms euckr gb2312 gbk latin1 latin2 sjis tis620 ucs2 ujis utf8 utf8mb3 utf16 utf32)
+
+SET(CHARSETS_AVAILABLE
+binary armscii8 ascii big5 cp1250 cp1251 cp1256 cp1257
+cp850 cp852 cp866 cp932 dec8 eucjpms euckr gb2312 gbk geostd8
+greek hebrew hp8 keybcs2 koi8r koi8u
+latin1 latin2 latin5 latin7 macce macroman
+sjis swe7 tis620 ucs2 ujis utf8 utf8mb3 utf16 utf32)
+
+
+IF(WIN32)
+ SET (EXTRA_CHARSETS "all")
+ELSE()
+ SET (EXTRA_CHARSETS "none")
+ENDIF()
+SET(WITH_EXTRA_CHARSETS ${EXTRA_CHARSETS} CACHE
+ STRING "Options are: none, complex,all")
+
+
+IF(WITH_EXTRA_CHARSETS MATCHES "complex")
+ SET(CHARSETS ${CHARSETS} ${CHARSETS_COMPLEX})
+ELSEIF(WITH_EXTRA_CHARSETS MATCHES "all")
+ SET(CHARSETS ${CHARSETS} ${CHARSETS_AVAILABLE})
+ENDIF()
+
+SET(MYSQL_DEFAULT_CHARSET_NAME "${DEFAULT_CHARSET}")
+SET(MYSQL_DEFAULT_COLLATION_NAME "${DEFAULT_COLLATION}")
+
+FOREACH(cs in ${CHARSETS})
+ SET(HAVE_CHARSET_${cs} 1)
+ENDFOREACH()
+
+SET(HAVE_UCA_COLLATIONS 1)
+
+SET(HAVE_UTF8_GENERAL_CS 1)
+SET(USE_MB 1)
+SET(USE_MB_IDENT 1)
+
diff --git a/cmake/check_minimal_version.cmake b/cmake/check_minimal_version.cmake
new file mode 100644
index 00000000000..4f134712fae
--- /dev/null
+++ b/cmake/check_minimal_version.cmake
@@ -0,0 +1,19 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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
+
+# This is a helper script is used to check for the minimal required version
+# It helps to decide whether to use autoconf based configure or cmake's
+# configure
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6.0 FATAL_ERROR)
diff --git a/cmake/configure.pl b/cmake/configure.pl
new file mode 100644
index 00000000000..ee7846b9c36
--- /dev/null
+++ b/cmake/configure.pl
@@ -0,0 +1,79 @@
+#!/usr/bin/perl
+use Switch;
+
+my $cmakeargs="";
+foreach $option (@ARGV)
+{
+ if (substr ($option, 0, 2) == "--")
+ {
+ $option = substr($option, 2);
+ }
+ if($option =~ /help/)
+ {
+ system("cmake -LH");
+ exit(0);
+ }
+ if($option =~ /with-plugins=/)
+ {
+ my @plugins= split(/,/, substr($option,13));
+ foreach $p (@plugins)
+ {
+ $p =~ s/-/_/g;
+ $cmakeargs = $cmakeargs." -DWITH_".uc($p)."=1";
+ }
+ next;
+ }
+ if($option =~ /with-extra-charsets=/)
+ {
+ my $charsets= substr($option,20);
+ $cmakeargs = $cmakeargs." -DWITH_EXTRA_CHARSETS=".$charsets;
+ next;
+ }
+ if($option =~ /without-plugin=/)
+ {
+ $cmakeargs = $cmakeargs." -DWITHOUT_".uc(substr($option,15))."=1";
+ next;
+ }
+ if($option =~ /with-zlib-dir=bundled/)
+ {
+ $cmakeargs = $cmakeargs." -DWITH_ZLIB=bundled";
+ next;
+ }
+ if($option =~ /with-zlib-dir=/)
+ {
+ $cmakeargs = $cmakeargs." -DWITH_ZLIB=system";
+ next;
+ }
+ if($option =~ /with-ssl=/)
+ {
+ $cmakeargs = $cmakeargs." -DWITH_SSL=bundled";
+ next;
+ }
+ if($option =~ /with-ssl/)
+ {
+ $cmakeargs = $cmakeargs." -DWITH_SSL=yes";
+ next;
+ }
+ if($option =~ /prefix=/)
+ {
+ my $cmake_install_prefix= substr($option, 7);
+ $cmakeargs = $cmakeargs." -DCMAKE_INSTALL_PREFIX=".$cmake_install_prefix;
+ next;
+ }
+ if ($options =~ /extra-charsets=all/)
+ {
+ $cmakeargs = $cmakeargs." -DWITH_CHARSETS=all";
+ next;
+ }
+ if ($options =~ /extra-charsets=complex/)
+ {
+ $cmakeargs = $cmakeargs." -DWITH_CHARSETS=complex";
+ next;
+ }
+ $option = uc($option);
+ $option =~ s/-/_/g;
+ $cmakeargs = $cmakeargs." -D".$option."=1";
+}
+print("configure.pl : calling cmake . $cmakeargs\n");
+my $rc = system("cmake . $cmakeargs");
+exit($rc);
diff --git a/cmake/create_initial_db.cmake.in b/cmake/create_initial_db.cmake.in
new file mode 100644
index 00000000000..92ebc72d425
--- /dev/null
+++ b/cmake/create_initial_db.cmake.in
@@ -0,0 +1,84 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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
+
+# This script creates initial database for packaging on Windows
+SET(CMAKE_SOURCE_DIR "@CMAKE_SOURCE_DIR@")
+SET(CMAKE_CURRENT_BINARY_DIR "@CMAKE_CURRENT_BINARY_DIR@")
+SET(MYSQLD_EXECUTABLE "@MYSQLD_EXECUTABLE@")
+SET(CMAKE_CFG_INTDIR "@CMAKE_CFG_INTDIR@")
+SET(WIN32 "@WIN32@")
+SET ($ENV{VS_UNICODE_OUTPUT})
+IF(CMAKE_CFG_INTDIR)
+ IF(CONFIG)
+ MESSAGE(${CONFIG})
+ #Resolve build configuration variables
+ STRING(REPLACE "${CMAKE_CFG_INTDIR}" ${CONFIG} MYSQLD_EXECUTABLE
+ "${MYSQLD_EXECUTABLE}")
+ ELSE()
+ MESSAGE(FATAL_ERROR "Please provide CONFIG parameter to the script")
+ ENDIF()
+ENDIF()
+
+# Create bootstrapper SQL script
+FILE(WRITE bootstrap.sql "use mysql;\n" )
+FOREACH(FILENAME mysql_system_tables.sql mysql_system_tables_data.sql
+ fill_help_tables.sql)
+ FILE(STRINGS ${CMAKE_SOURCE_DIR}/scripts/${FILENAME} CONTENTS)
+ FOREACH(STR ${CONTENTS})
+ IF(NOT STR MATCHES "@current_hostname")
+ FILE(APPEND bootstrap.sql "${STR}\n")
+ ENDIF()
+ ENDFOREACH()
+ENDFOREACH()
+
+
+MAKE_DIRECTORY(data)
+FILE(REMOVE_RECURSE data/mysql)
+MAKE_DIRECTORY(data/mysql)
+IF(WIN32)
+ SET(CONSOLE --console)
+ENDIF()
+
+SET(BOOTSTRAP_COMMAND
+ ${MYSQLD_EXECUTABLE}
+ --no-defaults
+ ${CONSOLE}
+ --bootstrap
+ --lc-messages-dir=${CMAKE_CURRENT_BINARY_DIR}/share
+ --basedir=.
+ --datadir=.
+ --loose-skip-innodb
+ --loose-skip-ndbcluster
+ --max_allowed_packet=8M
+ --net_buffer_length=16K
+)
+
+GET_FILENAME_COMPONENT(CWD . ABSOLUTE)
+EXECUTE_PROCESS(
+ COMMAND "@CMAKE_COMMAND@" -E echo Executing ${BOOTSTRAP_COMMAND}
+)
+EXECUTE_PROCESS (
+ COMMAND "@CMAKE_COMMAND@" -E echo input file bootstrap.sql, current directory ${CWD}
+)
+EXECUTE_PROCESS (
+ COMMAND ${BOOTSTRAP_COMMAND} INPUT_FILE bootstrap.sql OUTPUT_VARIABLE OUT
+ ERROR_VARIABLE ERR
+ RESULT_VARIABLE RESULT
+ )
+
+IF(NOT RESULT EQUAL 0)
+ MESSAGE(FATAL_ERROR "Could not create initial database \n ${OUT} \n ${ERR}")
+ENDIF()
+ \ No newline at end of file
diff --git a/cmake/do_abi_check.cmake b/cmake/do_abi_check.cmake
new file mode 100644
index 00000000000..aa7784e7372
--- /dev/null
+++ b/cmake/do_abi_check.cmake
@@ -0,0 +1,78 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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
+
+#
+# Rules for checking that the abi/api has not changed.
+#
+# The following steps are followed in the do_abi_check rule below
+#
+# 1) Generate preprocessor output for the files that need to
+# be tested for abi/api changes. use -nostdinc to prevent
+# generation of preprocessor output for system headers. This
+# results in messages in stderr saying that these headers
+# were not found. Redirect the stderr output to /dev/null
+# to prevent seeing these messages.
+# 2) sed the output to
+# 2.1) remove blank lines and lines that begin with "# "
+# 2.2) When gcc -E is run on the Mac OS and solaris sparc platforms it
+# introduces a line of output that shows up as a difference between
+# the .pp and .out files. Remove these OS specific preprocessor text
+# inserted by the preprocessor.
+# 3) diff the generated file and the canons (.pp files already in
+# the repository).
+# 4) delete the .out file that is generated.
+#
+# If the diff fails, the generated file is not removed. This will
+# be useful for analysis of ABI differences (e.g. using a visual
+# diff tool).
+#
+# A ABI change that causes a build to fail will always be accompanied
+# by new canons (.out files). The .out files that are not removed will
+# be replaced as the new .pp files.
+#
+# e.g. If include/mysql/plugin.h has an ABI change then this rule would
+# leave a <build directory>/abi_check.out file.
+#
+# A developer with a justified API change will then do a
+# mv <build directory>/abi_check.out include/mysql/plugin.pp
+# to replace the old canons with the new ones.
+#
+
+SET(abi_check_out ${BINARY_DIR}/abi_check.out)
+
+FOREACH(file ${ABI_HEADERS})
+ SET(tmpfile ${file}.pp.tmp)
+ EXECUTE_PROCESS(
+ COMMAND ${COMPILER}
+ -E -nostdinc -dI -I${SOURCE_DIR}/include -I${BINARY_DIR}/include
+ -I${SOURCE_DIR}/include/mysql -I${SOURCE_DIR}/sql ${file}
+ ERROR_QUIET OUTPUT_FILE ${tmpfile})
+ EXECUTE_PROCESS(
+ COMMAND sed -e
+ "/^# /d" -e "/^[ ]*$/d" -e "/^#pragma GCC set_debug_pwd/d" -e "/^#ident/d"
+ RESULT_VARIABLE result OUTPUT_FILE ${abi_check_out} INPUT_FILE ${tmpfile})
+ IF(NOT ${result} EQUAL 0)
+ MESSAGE(FATAL_ERROR "sed returned error ${result}")
+ ENDIF()
+ FILE(REMOVE ${tmpfile})
+ 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}")
+ ENDIF()
+ FILE(REMOVE ${abi_check_out})
+ENDFOREACH()
+
diff --git a/cmake/dtrace.cmake b/cmake/dtrace.cmake
new file mode 100644
index 00000000000..5c031e04841
--- /dev/null
+++ b/cmake/dtrace.cmake
@@ -0,0 +1,92 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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
+
+# Check if OS supports DTrace
+MACRO(CHECK_DTRACE)
+ FIND_PROGRAM(DTRACE dtrace)
+ MARK_AS_ADVANCED(DTRACE)
+
+ # On FreeBSD, dtrace does not handle userland tracing yet
+ IF(DTRACE AND NOT CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
+ SET(ENABLE_DTRACE ON CACHE BOOL "Enable dtrace")
+ ENDIF()
+ SET(HAVE_DTRACE ${ENABLE_DTRACE})
+ IF(CMAKE_SYSTEM_NAME MATCHES "SunOS")
+ IF(CMAKE_SIZEOF_VOID_P EQUAL 4)
+ SET(DTRACE_FLAGS -32 CACHE INTERNAL "DTrace architecture flags")
+ ELSE()
+ SET(DTRACE_FLAGS -64 CACHE INTERNAL "DTrace architecture flags")
+ ENDIF()
+ ENDIF()
+ENDMACRO()
+
+CHECK_DTRACE()
+
+# Produce a header file with
+# DTrace macros
+MACRO (DTRACE_HEADER provider header header_no_dtrace)
+ IF(ENABLE_DTRACE)
+ ADD_CUSTOM_COMMAND(
+ OUTPUT ${header} ${header_no_dtrace}
+ COMMAND ${DTRACE} -h -s ${provider} -o ${header}
+ COMMAND perl ${CMAKE_SOURCE_DIR}/scripts/dheadgen.pl -f ${provider} > ${header_no_dtrace}
+ DEPENDS ${provider}
+ )
+ ENDIF()
+ENDMACRO()
+
+
+# Create provider headers
+IF(ENABLE_DTRACE)
+ CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/include/probes_mysql.d.base
+ ${CMAKE_BINARY_DIR}/include/probes_mysql.d COPYONLY)
+ DTRACE_HEADER(
+ ${CMAKE_BINARY_DIR}/include/probes_mysql.d
+ ${CMAKE_BINARY_DIR}/include/probes_mysql_dtrace.h
+ ${CMAKE_BINARY_DIR}/include/probes_mysql_nodtrace.h
+ )
+ ADD_CUSTOM_TARGET(gen_dtrace_header
+ DEPENDS
+ ${CMAKE_BINARY_DIR}/include/probes_mysql.d
+ ${CMAKE_BINARY_DIR}/include/probes_mysql_dtrace.h
+ ${CMAKE_BINARY_DIR}/include/probes_mysql_nodtrace.h
+ )
+ENDIF()
+
+
+MACRO (DTRACE_INSTRUMENT target)
+ IF(ENABLE_DTRACE)
+ ADD_DEPENDENCIES(${target} gen_dtrace_header)
+
+ # On Solaris, invoke dtrace -G to generate object file and
+ # link it together with target.
+ IF(CMAKE_SYSTEM_NAME MATCHES "SunOS")
+ SET(objdir ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${target}.dir)
+ SET(outfile ${CMAKE_CURRENT_BINARY_DIR}/${target}_dtrace.o)
+
+ ADD_CUSTOM_COMMAND(
+ TARGET ${target} PRE_LINK
+ COMMAND ${CMAKE_COMMAND}
+ -DDTRACE=${DTRACE}
+ -DOUTFILE=${outfile}
+ -DDFILE=${CMAKE_BINARY_DIR}/include/probes_mysql.d
+ -DDTRACE_FLAGS=${DTRACE_FLAGS}
+ -P ${CMAKE_SOURCE_DIR}/cmake/dtrace_prelink.cmake
+ WORKING_DIRECTORY ${OBJDIR}
+ )
+ SET_TARGET_PROPERTIES(${target} PROPERTIES LINK_FLAGS "${outfile}")
+ ENDIF()
+ ENDIF()
+ENDMACRO()
diff --git a/cmake/dtrace_prelink.cmake b/cmake/dtrace_prelink.cmake
new file mode 100644
index 00000000000..53e12407cb9
--- /dev/null
+++ b/cmake/dtrace_prelink.cmake
@@ -0,0 +1,34 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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
+
+# Generates an ELF object file with dtrace entry points.
+# This object that must to be linked with together with
+# the target. This script needs to run on Solaris only
+
+# Do not follow symlinks in GLOB_RECURSE
+CMAKE_POLICY(SET CMP0009 NEW)
+FILE(GLOB_RECURSE OBJECTS *.o)
+
+# Use relative paths to generate shorter command line
+GET_FILENAME_COMPONENT(CURRENT_ABS_DIR . ABSOLUTE)
+FOREACH(OBJ ${OBJECTS})
+ FILE(RELATIVE_PATH REL ${CURRENT_ABS_DIR} ${OBJ})
+ LIST(APPEND REL_OBJECTS ${REL})
+ENDFOREACH()
+
+EXECUTE_PROCESS(
+ COMMAND ${DTRACE} ${DTRACE_FLAGS} -o ${OUTFILE} -G -s ${DFILE} ${REL_OBJECTS}
+)
+
diff --git a/cmake/install_macros.cmake b/cmake/install_macros.cmake
new file mode 100644
index 00000000000..4fc6db6b9b7
--- /dev/null
+++ b/cmake/install_macros.cmake
@@ -0,0 +1,69 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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
+
+MACRO (INSTALL_DEBUG_SYMBOLS targets)
+ IF(MSVC)
+ 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()
+ STRING(REPLACE ".exe" ".pdb" pdb_location ${location})
+ STRING(REPLACE ".dll" ".pdb" pdb_location ${pdb_location})
+ STRING(REPLACE ".lib" ".pdb" pdb_location ${pdb_location})
+ STRING(REPLACE "$(OutDir)" "\${CMAKE_INSTALL_CONFIG_NAME}" pdb_location ${pdb_location})
+ STRING(REPLACE "$(ConfigurationName)" "\${CMAKE_INSTALL_CONFIG_NAME}" pdb_location ${pdb_location})
+ INSTALL(FILES ${pdb_location} DESTINATION ${INSTALL_LOCATION})
+ ENDFOREACH()
+ ENDIF()
+ENDMACRO()
+
+# Install symbolic link to CMake target.
+# the link is created in the same directory as target
+# and extension will be the same as for target file.
+MACRO(INSTALL_SYMLINK linkbasename target destination)
+IF(UNIX)
+ GET_TARGET_PROPERTY(location ${target} LOCATION)
+ GET_FILENAME_COMPONENT(path ${location} PATH)
+ GET_FILENAME_COMPONENT(name_we ${location} NAME_WE)
+ GET_FILENAME_COMPONENT(ext ${location} EXT)
+ SET(output ${path}/${linkbasename}${ext})
+ ADD_CUSTOM_COMMAND(
+ OUTPUT ${output}
+ COMMAND ${CMAKE_COMMAND} ARGS -E remove -f ${output}
+ COMMAND ${CMAKE_COMMAND} ARGS -E create_symlink
+ ${name_we}${ext}
+ ${linkbasename}${ext}
+ WORKING_DIRECTORY ${path}
+ DEPENDS ${target}
+ )
+
+ ADD_CUSTOM_TARGET(symlink_${linkbasename}${ext}
+ ALL
+ DEPENDS ${output})
+ SET_TARGET_PROPERTIES(symlink_${linkbasename}${ext} PROPERTIES CLEAN_DIRECT_OUTPUT 1)
+ # For Xcode, replace project config with install config
+ STRING(REPLACE "$(CONFIGURATION)" "\${CMAKE_INSTALL_CONFIG_NAME}" output ${output})
+ INSTALL(FILES ${output} DESTINATION ${destination})
+ENDIF()
+ENDMACRO()
+
diff --git a/cmake/make_dist.cmake.in b/cmake/make_dist.cmake.in
new file mode 100644
index 00000000000..aae5bdbc666
--- /dev/null
+++ b/cmake/make_dist.cmake.in
@@ -0,0 +1,176 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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
+
+# Make source distribution
+# If bzr is present, run bzr export, add output of BUILD/autorun.sh
+# if autotools are present, also pack bison output into it.
+# Otherwise, just run cpack with source configuration.
+
+SET(CMAKE_SOURCE_DIR "@CMAKE_SOURCE_DIR@")
+SET(CMAKE_BINARY_DIR "@CMAKE_BINARY_DIR@")
+SET(CPACK_SOURCE_PACKAGE_FILE_NAME "@CPACK_SOURCE_PACKAGE_FILE_NAME@")
+SET(GLIBTOOLIZE_EXECUTABLE "@GLIBTOOLIZE_EXECUTABLE@")
+SET(LIBTOOLIZE_EXECUTABLE "@LIBTOOLIZE_EXECUTABLE@")
+SET(ACLOCAL_EXECUTABLE "@ACLOCAL_EXECUTABLE@")
+SET(AUTOCONF_EXECUTABLE "@AUTOCONF_EXECUTABLE@")
+SET(AUTOHEADER_EXECUTABLE "@AUTOHEADER_EXECUTABLE@")
+SET(AUTOMAKE_EXECUTABLE "@AUTOMAKE_EXECUTABLE@")
+SET(CMAKE_CPACK_COMMAND "@CMAKE_CPACK_COMMAND@")
+SET(CMAKE_COMMAND "@CMAKE_COMMAND@")
+SET(BZR_EXECUTABLE "@BZR_EXECUTABLE@")
+SET(GTAR_EXECUTABLE "@GTAR_EXECUTABLE@")
+SET(TAR_EXECUTABLE "@TAR_EXECUTABLE@")
+SET(CMAKE_GENERATOR "@CMAKE_GENERATOR@")
+SET(CMAKE_MAKE_PROGRAM "@CMAKE_MAKE_PROGRAM@")
+SET(CMAKE_SYSTEM_NAME "@CMAKE_SYSTEM_NAME@")
+
+
+SET(PACKAGE_DIR ${CMAKE_BINARY_DIR}/${CPACK_SOURCE_PACKAGE_FILE_NAME})
+
+FILE(REMOVE_RECURSE ${PACKAGE_DIR})
+FILE(REMOVE ${PACKAGE_DIR}.tar.gz )
+
+IF(BZR_EXECUTABLE)
+ MESSAGE(STATUS "Running bzr export")
+ EXECUTE_PROCESS(
+ COMMAND "${BZR_EXECUTABLE}" export
+ ${PACKAGE_DIR}
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ RESULT_VARIABLE RESULT
+ )
+
+ IF(NOT RESULT EQUAL 0)
+ SET(BZR_EXECUTABLE)
+ ENDIF()
+ENDIF()
+
+IF(NOT BZR_EXECUTABLE)
+ MESSAGE(STATUS "bzr not found or source dir is not a repo, use CPack")
+
+ IF(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR)
+ # In-source build is the worst option, we have to cleanup source tree.
+
+ # Save bison output first.
+ CONFIGURE_FILE(${CMAKE_BINARY_DIR}/sql/sql_yacc.cc
+ ${CMAKE_BINARY_DIR}/sql_yacc.cc COPY_ONLY)
+ CONFIGURE_FILE(${CMAKE_BINARY_DIR}/sql/sql_yacc.h
+ ${CMAKE_BINARY_DIR}/sql_yacc.h COPY_ONLY)
+
+ IF(CMAKE_GENERATOR MATCHES "Makefiles")
+ # make clean
+ EXECUTE_PROCESS(
+ COMMAND ${CMAKE_MAKE_PROGRAM} clean
+ WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+ )
+ ENDIF()
+
+ # Restore bison output
+ CONFIGURE_FILE(${CMAKE_BINARY_DIR}/sql_yacc.cc
+ ${CMAKE_BINARY_DIR}/sql/sql_yacc.cc COPY_ONLY)
+ CONFIGURE_FILE(${CMAKE_BINARY_DIR}/sql_yacc.h
+ ${CMAKE_BINARY_DIR}/sql/sql_yacc.h COPY_ONLY)
+ FILE(REMOVE ${CMAKE_BINARY_DIR}/sql_yacc.cc)
+ FILE(REMOVE ${CMAKE_BINARY_DIR}/sql_yacc.h)
+ ENDIF()
+
+ EXECUTE_PROCESS(
+ COMMAND ${CMAKE_CPACK_COMMAND} -G TGZ --config ./CPackSourceConfig.cmake
+ ${CMAKE_BINARY_DIR}/CPackSourceConfig.cmake
+
+ WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+ )
+ EXECUTE_PROCESS(
+ COMMAND ${CMAKE_COMMAND} -E tar xzf
+ ${CPACK_SOURCE_PACKAGE_FILE_NAME}.tar.gz
+ ${PACK_SOURCE_PACKAGE_FILE_NAME}
+ WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+ )
+ENDIF()
+
+# Try to pack output of BUILD/autorun, if autotools are present
+IF(GLIBTOOLIZE_EXECUTABLE OR LIBTOOLIZE_EXECUTABLE)
+ IF(ACLOCAL_EXECUTABLE AND AUTOMAKE_EXECUTABLE AND AUTOCONF_EXECUTABLE
+ AND AUTOHEADER_EXECUTABLE)
+ SET(HAVE_AUTOTOOLS 1)
+ ENDIF()
+ENDIF()
+
+IF(HAVE_AUTOTOOLS)
+ EXECUTE_PROCESS(COMMAND BUILD/autorun.sh
+ WORKING_DIRECTORY ${PACKAGE_DIR})
+ELSE()
+ MESSAGE( "Autotools not found, resulting source package can only be built"
+ " with cmake")
+ CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/cmake/configure.pl
+ ${PACKAGE_DIR}/configure
+ COPYONLY)
+ IF(UNIX)
+ EXECUTE_PROCESS(COMMAND chmod +x ${PACKAGE_DIR}/configure)
+ ENDIF()
+ENDIF()
+
+# Copy bison output
+CONFIGURE_FILE(${CMAKE_BINARY_DIR}/sql/sql_yacc.h
+ ${PACKAGE_DIR}/sql/sql_yacc.h COPYONLY)
+CONFIGURE_FILE(${CMAKE_BINARY_DIR}/sql/sql_yacc.cc
+ ${PACKAGE_DIR}/sql/sql_yacc.cc COPYONLY)
+
+
+# In case we used CPack, it could have copied some
+# extra files that are not usable on different machines.
+FILE(REMOVE ${PACKAGE_DIR}/CMakeCache.txt)
+
+# When packing source, prefer gnu tar to "cmake -P tar"
+# cmake does not preserve timestamps.gnuwin32 tar is broken, cygwin is ok
+
+IF(CMAKE_SYSTEM_NAME MATCHES "Windows")
+ IF (EXISTS C:/cygwin/bin/tar.exe)
+ SET(TAR_EXECUTABLE C:/cygwin/bin/tar.exe)
+ ENDIF()
+ENDIF()
+
+IF(GTAR_EXECUTABLE)
+ SET(GNUTAR ${GTAR_EXECUTABLE})
+ELSEIF(TAR_EXECUTABLE)
+ EXECUTE_PROCESS(
+ COMMAND "${TAR_EXECUTABLE}" --version
+ RESULT_VARIABLE RESULT OUTPUT_VARIABLE OUT ERROR_VARIABLE ERR
+ )
+ IF(RESULT EQUAL 0 AND OUT MATCHES "GNU")
+ SET(GNUTAR ${TAR_EXECUTABLE})
+ ENDIF()
+ENDIF()
+
+SET($ENV{GZIP} "--best")
+
+IF(GNUTAR)
+ SET(PACK_COMMAND
+ ${GNUTAR} cfz
+ ${CPACK_SOURCE_PACKAGE_FILE_NAME}.tar.gz
+ ${CPACK_SOURCE_PACKAGE_FILE_NAME}
+ )
+ELSE()
+ SET(PACK_COMMAND ${CMAKE_COMMAND} -E tar cfz
+ ${CPACK_SOURCE_PACKAGE_FILE_NAME}.tar.gz
+ ${CPACK_SOURCE_PACKAGE_FILE_NAME}
+)
+ENDIF()
+
+MESSAGE(STATUS "Creating source package")
+
+EXECUTE_PROCESS(
+ COMMAND ${PACK_COMMAND}
+)
+MESSAGE(STATUS "Source package ${PACKAGE_DIR}.tar.gz created")
diff --git a/cmake/merge_archives_unix.cmake.in b/cmake/merge_archives_unix.cmake.in
new file mode 100644
index 00000000000..a9a060ab49e
--- /dev/null
+++ b/cmake/merge_archives_unix.cmake.in
@@ -0,0 +1,62 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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
+
+# This script merges many static libraries into
+# one big library on Unix.
+SET(TARGET_LOCATION "@TARGET_LOCATION@")
+SET(TARGET "@TARGET@")
+SET(STATIC_LIBS "@STATIC_LIBS@")
+SET(CMAKE_CURRENT_BINARY_DIR "@CMAKE_CURRENT_BINARY_DIR@")
+SET(CMAKE_AR "@CMAKE_AR@")
+SET(CMAKE_RANLIB "@CMAKE_RANLIB@")
+
+
+SET(TEMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/merge_archives_${TARGET})
+MAKE_DIRECTORY(${TEMP_DIR})
+# Extract each archive to its own subdirectory(avoid object filename clashes)
+FOREACH(LIB ${STATIC_LIBS})
+ GET_FILENAME_COMPONENT(NAME_NO_EXT ${LIB} NAME_WE)
+ SET(TEMP_SUBDIR ${TEMP_DIR}/${NAME_NO_EXT})
+ MAKE_DIRECTORY(${TEMP_SUBDIR})
+ EXECUTE_PROCESS(
+ COMMAND ${CMAKE_AR} -x ${LIB}
+ WORKING_DIRECTORY ${TEMP_SUBDIR}
+ )
+
+ FILE(GLOB_RECURSE LIB_OBJECTS "${TEMP_SUBDIR}/*")
+ SET(OBJECTS ${OBJECTS} ${LIB_OBJECTS})
+ENDFOREACH()
+
+# Use relative paths, makes command line shorter.
+GET_FILENAME_COMPONENT(ABS_TEMP_DIR ${TEMP_DIR} ABSOLUTE)
+FOREACH(OBJ ${OBJECTS})
+ FILE(RELATIVE_PATH OBJ ${ABS_TEMP_DIR} ${OBJ})
+ FILE(TO_NATIVE_PATH ${OBJ} OBJ)
+ SET(ALL_OBJECTS ${ALL_OBJECTS} ${OBJ})
+ENDFOREACH()
+
+FILE(TO_NATIVE_PATH ${TARGET_LOCATION} ${TARGET_LOCATION})
+# Now pack the objects into library with ar.
+EXECUTE_PROCESS(
+ COMMAND ${CMAKE_AR} -r ${TARGET_LOCATION} ${ALL_OBJECTS}
+ WORKING_DIRECTORY ${TEMP_DIR}
+)
+EXECUTE_PROCESS(
+ COMMAND ${CMAKE_RANLIB} ${TARGET_LOCATION}
+ WORKING_DIRECTORY ${TEMP_DIR}
+)
+
+# Cleanup
+FILE(REMOVE_RECURSE ${TEMP_DIR})
diff --git a/cmake/misc.cmake b/cmake/misc.cmake
new file mode 100644
index 00000000000..c73e66ef3d7
--- /dev/null
+++ b/cmake/misc.cmake
@@ -0,0 +1,128 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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
+
+# Merge static libraries.
+MACRO(MERGE_STATIC_LIBS TARGET OUTPUT_NAME LIBS_TO_MERGE)
+ # To produce a library we need at least one source file.
+ # It is created by ADD_CUSTOM_COMMAND below and will helps
+ # also help to track dependencies.
+ SET(SOURCE_FILE ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_depends.c)
+ ADD_LIBRARY(${TARGET} STATIC ${SOURCE_FILE})
+ SET_TARGET_PROPERTIES(${TARGET} PROPERTIES OUTPUT_NAME ${OUTPUT_NAME})
+
+ FOREACH(LIB ${LIBS_TO_MERGE})
+ GET_TARGET_PROPERTY(LIB_LOCATION ${LIB} LOCATION)
+ GET_TARGET_PROPERTY(LIB_TYPE ${LIB} TYPE)
+ IF(NOT LIB_LOCATION)
+ # 3rd party library like libz.so. Make sure that everything
+ # that links to our library links to this one as well.
+ TARGET_LINK_LIBRARIES(${TARGET} ${LIB})
+ ELSE()
+ # This is a target in current project
+ # (can be a static or shared lib)
+ IF(LIB_TYPE STREQUAL "STATIC_LIBRARY")
+ SET(STATIC_LIBS ${STATIC_LIBS} ${LIB_LOCATION})
+ ADD_DEPENDENCIES(${TARGET} ${LIB})
+ ELSE()
+ # This is a shared library our static lib depends on.
+ TARGET_LINK_LIBRARIES(${TARGET} ${LIB})
+ ENDIF()
+ ENDIF()
+ ENDFOREACH()
+
+ # Make the generated dummy source file depended on all static input
+ # libs. If input lib changes,the source file is touched
+ # which causes the desired effect (relink).
+ ADD_CUSTOM_COMMAND(
+ OUTPUT ${SOURCE_FILE}
+ COMMAND ${CMAKE_COMMAND} -E touch ${SOURCE_FILE}
+ DEPENDS ${STATIC_LIBS})
+
+ IF(MSVC)
+ # To merge libs, just pass them to lib.exe command line.
+ SET(LINKER_EXTRA_FLAGS "")
+ FOREACH(LIB ${STATIC_LIBS})
+ SET(LINKER_EXTRA_FLAGS "${LINKER_EXTRA_FLAGS} ${LIB}")
+ ENDFOREACH()
+ SET_TARGET_PROPERTIES(${TARGET} PROPERTIES STATIC_LIBRARY_FLAGS
+ "${LINKER_EXTRA_FLAGS}")
+ ELSE()
+ GET_TARGET_PROPERTY(TARGET_LOCATION ${TARGET} LOCATION)
+ IF(APPLE)
+ # Use OSX's libtool to merge archives (ihandles universal
+ # binaries properly)
+ ADD_CUSTOM_COMMAND(TARGET ${TARGET} POST_BUILD
+ COMMAND rm ${TARGET_LOCATION}
+ COMMAND /usr/bin/libtool -static -o ${TARGET_LOCATION}
+ ${STATIC_LIBS}
+ )
+ ELSE()
+ # Generic Unix, Cygwin or MinGW. In post-build step, call
+ # script, that extracts objects from archives with "ar x"
+ # and repacks them with "ar r"
+ SET(TARGET ${TARGET})
+ CONFIGURE_FILE(
+ ${CMAKE_SOURCE_DIR}/cmake/merge_archives_unix.cmake.in
+ ${CMAKE_CURRENT_BINARY_DIR}/merge_archives_${TARGET}.cmake
+ @ONLY
+ )
+ ADD_CUSTOM_COMMAND(TARGET ${TARGET} POST_BUILD
+ COMMAND rm ${TARGET_LOCATION}
+ COMMAND ${CMAKE_COMMAND} -P
+ ${CMAKE_CURRENT_BINARY_DIR}/merge_archives_${TARGET}.cmake
+ )
+ ENDIF()
+ ENDIF()
+ENDMACRO()
+
+# Convert static library to shared
+MACRO(STATIC_TO_SHARED STATIC_LIB SHARED_LIB EXPORTS_FILE)
+ IF(NOT MSVC)
+ MESSAGE(FATAL_ERROR
+ "Cannot convert static ${STATIC_LIB} to shared ${TARGET} library."
+ )
+ ENDIF()
+
+ # Need one source file.
+ SET(SOURCE_FILE ${CMAKE_CURRENT_BINARY_DIR}/${SHARED_LIB}_dummy.c)
+ ADD_CUSTOM_COMMAND(
+ OUTPUT ${SOURCE_FILE}
+ COMMAND ${CMAKE_COMMAND} -E touch ${SOURCE_FILE}
+ )
+
+ ADD_LIBRARY(${SHARED_LIB} SHARED ${SOURCE_FILE} ${EXPORTS_FILE})
+ TARGET_LINK_LIBRARIES(${SHARED_LIB} ${STATIC_LIB})
+ENDMACRO()
+
+MACRO(SET_TARGET_SOURCEDIR TARGET)
+ SET(${TARGET}_SOURCEDIR ${CMAKE_CURRENT_SOURCE_DIR} CACHE INTERNAL "source directory for a target")
+ENDMACRO()
+
+# Handy macro to use when source projects maybe used somewhere else
+# For example, embedded or client library may recompile mysys sources
+# In such cases, using absolute names in ADD_LIBRARY has the advantage that
+# GET_TARGET_PROPERTY(xxx SOURCES) also returns absolute names, so there is
+# no need to know the base directory of a target.
+MACRO(USE_ABSOLUTE_FILENAMES FILELIST)
+ # Use absolute file paths for sources
+ # It helps when building embedded where we need to
+ # sources files for the plugin to recompile.
+ SET(RESOLVED_PATHS)
+ FOREACH(FILE ${${FILELIST}})
+ GET_FILENAME_COMPONENT(ABSOLUTE_PATH ${FILE} ABSOLUTE)
+ LIST(APPEND RESOLVED_PATHS ${ABSOLUTE_PATH})
+ ENDFOREACH()
+ SET(${FILELIST} ${RESOLVED_PATHS})
+ENDMACRO()
diff --git a/cmake/mysql_version.cmake b/cmake/mysql_version.cmake
new file mode 100644
index 00000000000..8b0e8f4efab
--- /dev/null
+++ b/cmake/mysql_version.cmake
@@ -0,0 +1,142 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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
+
+# Read value for a variable from configure.in
+
+MACRO(MYSQL_GET_CONFIG_VALUE keyword var)
+ IF(NOT ${var})
+ IF (EXISTS ${CMAKE_SOURCE_DIR}/configure.in)
+ FILE (STRINGS ${CMAKE_SOURCE_DIR}/configure.in str REGEX "^[ ]*${keyword}=")
+ IF(str)
+ STRING(REPLACE "${keyword}=" "" str ${str})
+ STRING(REGEX REPLACE "[ ].*" "" str ${str})
+ SET(${var} ${str} CACHE INTERNAL "Config variable")
+ ENDIF()
+ ENDIF()
+ ENDIF()
+ENDMACRO()
+
+
+# Read mysql version for configure script
+
+MACRO(GET_MYSQL_VERSION)
+
+ IF(NOT VERSION_STRING)
+ IF(EXISTS ${CMAKE_SOURCE_DIR}/configure.in)
+ FILE(STRINGS ${CMAKE_SOURCE_DIR}/configure.in str REGEX "AM_INIT_AUTOMAKE")
+ STRING(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+[-][^ \\)]+" VERSION_STRING "${str}")
+ IF(NOT VERSION_STRING)
+ FILE(STRINGS configure.in str REGEX "AC_INIT\\(")
+ STRING(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+[-][^ \\]]+" VERSION_STRING "${str}")
+ ENDIF()
+ ENDIF()
+ ENDIF()
+
+ IF(NOT VERSION_STRING)
+ MESSAGE(FATAL_ERROR
+ "VERSION_STRING cannot be parsed, please specify -DVERSION_STRING=major.minor.patch-extra"
+ "when calling cmake")
+ ENDIF()
+
+ SET(VERSION ${VERSION_STRING})
+
+ STRING(REGEX REPLACE "([0-9]+)\\.[0-9]+\\.[0-9]+[^ ]+" "\\1" MAJOR_VERSION "${VERSION_STRING}")
+ STRING(REGEX REPLACE "[0-9]+\\.([0-9]+)\\.[0-9]+[^ ]+" "\\1" MINOR_VERSION "${VERSION_STRING}")
+ STRING(REGEX REPLACE "[0-9]+\\.[0-9]+\\.([0-9]+)[^ ]+" "\\1" PATCH "${VERSION_STRING}")
+ SET(MYSQL_BASE_VERSION "${MAJOR_VERSION}.${MINOR_VERSION}" CACHE INTERNAL "MySQL Base version")
+ SET(MYSQL_NO_DASH_VERSION "${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH}")
+ MATH(EXPR MYSQL_VERSION_ID "10000*${MAJOR_VERSION} + 100*${MINOR_VERSION} + ${PATCH}")
+ 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})
+ENDMACRO()
+
+# Get mysql version and other interesting variables
+GET_MYSQL_VERSION()
+
+MYSQL_GET_CONFIG_VALUE("PROTOCOL_VERSION" PROTOCOL_VERSION)
+MYSQL_GET_CONFIG_VALUE("DOT_FRM_VERSION" DOT_FRM_VERSION)
+MYSQL_GET_CONFIG_VALUE("MYSQL_TCP_PORT_DEFAULT" MYSQL_TCP_PORT_DEFAULT)
+MYSQL_GET_CONFIG_VALUE("MYSQL_UNIX_ADDR_DEFAULT" MYSQL_UNIX_ADDR_DEFAULT)
+MYSQL_GET_CONFIG_VALUE("SHARED_LIB_MAJOR_VERSION" SHARED_LIB_MAJOR_VERSION)
+IF(NOT MYSQL_TCP_PORT_DEFAULT)
+ SET(MYSQL_TCP_PORT_DEFAULT "3306")
+ENDIF()
+IF(NOT MYSQL_TCP_PORT)
+ SET(MYSQL_TCP_PORT ${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()
+
+
+
+# Use meaningful package name for the binary package
+IF(NOT CPACK_PACKAGE_FILE_NAME)
+ IF( NOT SYSTEM_NAME_AND_PROCESSOR)
+ IF(WIN32)
+ # CMake does not set CMAKE_SYSTEM_PROCESSOR correctly on Win64
+ # (uses x86). Besides, we try to be compatible with existing naming
+ IF(CMAKE_SIZEOF_VOID_P EQUAL 8)
+ SET(SYSTEM_NAME_AND_PROCESSOR "winx64")
+ ELSE()
+ SET(SYSTEM_NAME_AND_PROCESSOR "win32")
+ ENDIF()
+ ELSE()
+ IF(NOT PLATFORM)
+ SET(PLATFORM ${CMAKE_SYSTEM_NAME})
+ ENDIF()
+ IF(NOT MACHINE)
+ SET(MACHINE ${CMAKE_SYSTEM_PROCESSOR})
+ IF(CMAKE_SIZEOF_VOID_P EQUAL 8 AND NOT ${MACHINE} MATCHES "ia64")
+ # On almost every 64 bit machine (except IA64) it is possible
+ # to build 32 bit packages. Add -64bit suffix to differentiate
+ # between 32 and 64 bit packages.
+ SET(MACHINE ${MACHINE}-64bit)
+ ENDIF()
+ ENDIF()
+ SET(SYSTEM_NAME_AND_PROCESSOR "${PLATFORM}-${MACHINE}")
+ ENDIF()
+ ENDIF()
+
+ SET(package_name "mysql-${VERSION}-${SYSTEM_NAME_AND_PROCESSOR}" )
+ # Sometimes package suffix is added (something like icc-glibc23)
+ IF(PACKAGE_SUFFIX)
+ SET(package_name "${package_name}-${PACKAGE_SUFFIX}")
+ ENDIF()
+ STRING(TOLOWER ${package_name} package_name)
+ SET(CPACK_PACKAGE_FILE_NAME ${package_name})
+ENDIF()
+
+IF(NOT CPACK_SOURCE_PACKAGE_FILE_NAME)
+ SET(CPACK_SOURCE_PACKAGE_FILE_NAME "mysql-${VERSION}")
+ENDIF()
+SET(CPACK_PACKAGE_VENDOR "Sun Microsystems")
+SET(CPACK_SOURCE_GENERATOR "TGZ")
+SET(CPACK_SOURCE_IGNORE_FILES
+ \\\\.bzr/
+ \\\\.bzr-mysql
+ .bzrignore
+ CMakeCache.txt
+ /CMakeFiles/
+ /_CPack_Packages/
+ $.gz
+ $.zip
+)
diff --git a/cmake/plugin.cmake b/cmake/plugin.cmake
new file mode 100644
index 00000000000..58a3dafa2f4
--- /dev/null
+++ b/cmake/plugin.cmake
@@ -0,0 +1,171 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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
+
+# Creates a project to build plugin either as static or shared library
+# Parameters:
+# plugin - storage engine name.
+# variable BUILD_TYPE should be set to "STATIC" or "DYNAMIC"
+# Remarks:
+# ${PLUGIN}_SOURCES variable containing source files to produce the
+# library must set before calling this macro
+
+MACRO(MYSQL_PLUGIN plugin)
+ # Add common include directories
+ INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include
+ ${CMAKE_SOURCE_DIR}/sql
+ ${CMAKE_SOURCE_DIR}/regex
+ ${SSL_INCLUDE_DIRS}
+ ${ZLIB_INCLUDE_DIR})
+
+ STRING(TOUPPER ${plugin} plugin)
+ STRING(TOLOWER ${plugin} target)
+
+ IF(NOT ${plugin}_PLUGIN_STATIC AND NOT ${plugin}_PLUGIN_DYNAMIC)
+ MESSAGE(FATAL_ERROR
+ "Neither ${plugin}_PLUGIN_STATIC nor ${plugin}_PLUGIN_DYNAMIC is defined.
+ Please set at least one of these variables to the name of the output
+ library in CMakeLists.txt prior to calling MYSQL_PLUGIN"
+ )
+ ENDIF()
+
+ IF(WITH_PLUGIN_${plugin})
+ SET(WITH_${plugin} 1)
+ ENDIF()
+
+ IF(WITH_${plugin}_STORAGE_ENGINE OR WITH_{$plugin} OR WITH_ALL
+ OR WITH_MAX AND NOT WITHOUT_${plugin}_STORAGE_ENGINE AND NOT
+ WITHOUT_${plugin})
+ SET(WITH_${plugin} 1)
+ ELSEIF(WITHOUT_${plugin}_STORAGE_ENGINE OR WITH_NONE OR ${plugin}_DISABLED)
+ SET(WITHOUT_${plugin} 1)
+ SET(WITH_${plugin}_STORAGE_ENGINE 0)
+ SET(WITH_${plugin} 0)
+ ENDIF()
+
+ IF(${plugin}_PLUGIN_MANDATORY)
+ SET(WITH_${plugin} 1)
+ ENDIF()
+
+ IF(${plugin} MATCHES NDBCLUSTER AND WITH_MAX_NO_NDB)
+ SET(WITH_${plugin} 0)
+ SET(WITH_${plugin}_STORAGE_ENGINE 0)
+ SET(WITHOUT_${plugin} 1)
+ SET(WITHOUT_${plugin}_STORAGE_ENGINE 0)
+ ENDIF()
+
+ IF(STORAGE_ENGINE)
+ SET(with_var "WITH_${plugin}_STORAGE_ENGINE" )
+ ELSE()
+ SET(with_var "WITH_${plugin}")
+ ENDIF()
+
+
+ USE_ABSOLUTE_FILENAMES(${plugin}_SOURCES)
+
+ IF (WITH_${plugin} AND ${plugin}_PLUGIN_STATIC)
+ ADD_DEFINITIONS(-DMYSQL_SERVER)
+ #Create static library.
+ ADD_LIBRARY(${target} ${${plugin}_SOURCES})
+ DTRACE_INSTRUMENT(${target})
+ ADD_DEPENDENCIES(${target} GenError)
+ IF(${plugin}_LIBS)
+ TARGET_LINK_LIBRARIES(${target} ${${plugin}_LIBS})
+ ENDIF()
+ SET_TARGET_PROPERTIES(${target} PROPERTIES
+ OUTPUT_NAME "${${plugin}_PLUGIN_STATIC}")
+ # Update mysqld dependencies
+ SET (MYSQLD_STATIC_PLUGIN_LIBS ${MYSQLD_STATIC_PLUGIN_LIBS}
+ ${target} PARENT_SCOPE)
+ SET (mysql_plugin_defs "${mysql_plugin_defs},builtin_${target}_plugin"
+ PARENT_SCOPE)
+ SET(${with_var} ON CACHE BOOL "Link ${plugin} statically to the server"
+ FORCE)
+ ELSEIF(NOT WITHOUT_${plugin} AND ${plugin}_PLUGIN_DYNAMIC
+ AND NOT WITHOUT_DYNAMIC_PLUGINS)
+
+ # Create a shared module.
+ ADD_DEFINITIONS(-DMYSQL_DYNAMIC_PLUGIN)
+ ADD_LIBRARY(${target} MODULE ${${plugin}_SOURCES})
+ IF(${plugin}_LIBS)
+ TARGET_LINK_LIBRARIES(${target} ${${plugin}_LIBS})
+ ENDIF()
+ DTRACE_INSTRUMENT(${target})
+ SET_TARGET_PROPERTIES (${target} PROPERTIES PREFIX "")
+ TARGET_LINK_LIBRARIES (${target} mysqlservices)
+
+ # Plugin uses symbols defined in mysqld executable.
+ # Some operating systems like Windows and OSX and are pretty strict about
+ # unresolved symbols. Others are less strict and allow unresolved symbols
+ # in shared libraries. On Linux for example, CMake does not even add
+ # executable to the linker command line (it would result into link error).
+ # Thus we skip TARGET_LINK_LIBRARIES on Linux, as it would only generate
+ # an additional dependency.
+ IF(NOT CMAKE_SYSTEM_NAME STREQUAL "Linux")
+ TARGET_LINK_LIBRARIES (${target} mysqld)
+ ENDIF()
+
+ ADD_DEPENDENCIES(${target} GenError)
+
+ IF(${plugin}_PLUGIN_DYNAMIC)
+ SET_TARGET_PROPERTIES(${target} PROPERTIES
+ OUTPUT_NAME "${${plugin}_PLUGIN_DYNAMIC}")
+ ENDIF()
+
+ # Update cache "WITH" variable for plugins that support static linking
+ IF(${plugin}_PLUGIN_STATIC)
+ SET(${with_var} OFF CACHE BOOL "Link ${plugin} statically to the server"
+ FORCE)
+ ENDIF()
+
+ # Install dynamic library
+ SET(INSTALL_LOCATION lib/plugin)
+ INSTALL(TARGETS ${target} DESTINATION ${INSTALL_LOCATION})
+ INSTALL_DEBUG_SYMBOLS(${target})
+ ELSE()
+ IF(STORAGE_ENGINE)
+ SET(without_var "WITHOUT_${plugin}_STORAGE_ENGINE")
+ ELSE()
+ SET(without_var "WITHOUT_${plugin}")
+ ENDIF()
+ SET(${without_var} ON CACHE BOOL "Link ${plugin} statically to the server"
+ FORCE)
+ MARK_AS_ADVANCED(${without_var})
+ ENDIF()
+ENDMACRO()
+
+MACRO (MYSQL_STORAGE_ENGINE engine)
+ SET(STORAGE_ENGINE 1)
+ MYSQL_PLUGIN(${engine})
+ENDMACRO()
+
+# Add all CMake projects under storage and plugin
+# subdirectories, configure sql_builtins.cc
+MACRO(CONFIGURE_PLUGINS)
+ FILE(GLOB dirs_storage ${CMAKE_SOURCE_DIR}/storage/*)
+ FILE(GLOB dirs_plugin ${CMAKE_SOURCE_DIR}/plugin/*)
+ FOREACH(dir ${dirs_storage} ${dirs_plugin})
+ IF (EXISTS ${dir}/CMakeLists.txt)
+ ADD_SUBDIRECTORY(${dir})
+ ENDIF()
+ ENDFOREACH()
+ # Special handling for partition(not really pluggable)
+ IF(NOT WITHOUT_PARTITION_STORAGE_ENGINE)
+ SET (WITH_PARTITION_STORAGE_ENGINE 1)
+ SET (mysql_plugin_defs "${mysql_plugin_defs},builtin_partition_plugin")
+ ENDIF(NOT WITHOUT_PARTITION_STORAGE_ENGINE)
+ ADD_DEFINITIONS(${STORAGE_ENGINE_DEFS})
+ CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/sql/sql_builtin.cc.in
+ ${CMAKE_BINARY_DIR}/sql/sql_builtin.cc)
+ENDMACRO()
diff --git a/cmake/readline.cmake b/cmake/readline.cmake
new file mode 100644
index 00000000000..7661f12cce2
--- /dev/null
+++ b/cmake/readline.cmake
@@ -0,0 +1,197 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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
+
+MACRO(SET_WITH_BUNDLED_READLINE option)
+ IF(option)
+ SET(not_option OFF)
+ ELSE()
+ SET(not_option ON)
+ ENDIF()
+ SET(WITH_READLINE ${option} CACHE BOOL "Use bundled readline")
+ SET(WITH_LIBEDIT ${not_option} CACHE BOOL "Use bundled libedit")
+ENDMACRO()
+
+MACRO (MYSQL_CHECK_MULTIBYTE)
+ CHECK_INCLUDE_FILE(wctype.h HAVE_WCTYPE_H)
+ CHECK_INCLUDE_FILE(wchar.h HAVE_WCHAR_H)
+ IF(HAVE_WCHAR_H)
+ SET(CMAKE_EXTRA_INCLUDE_FILES wchar.h)
+ CHECK_TYPE_SIZE(mbstate_t SIZEOF_MBSTATE_T)
+ SET(CMAKE_EXTRA_INCLUDE_FILES)
+ IF(SIZEOF_MBSTATE_T)
+ SET(HAVE_MBSTATE_T 1)
+ ENDIF()
+ ENDIF()
+
+ CHECK_C_SOURCE_COMPILES("
+ #include <langinfo.h>
+ int main(int ac, char **av)
+ {
+ char *cs = nl_langinfo(CODESET);
+ return 0;
+ }"
+ HAVE_LANGINFO_CODESET)
+
+ CHECK_FUNCTION_EXISTS(mbrlen HAVE_MBRLEN)
+ CHECK_FUNCTION_EXISTS(mbscmp HAVE_MBSCMP)
+ CHECK_FUNCTION_EXISTS(mbsrtowcs HAVE_MBSRTOWCS)
+ CHECK_FUNCTION_EXISTS(wcrtomb HAVE_WCRTOMB)
+ CHECK_FUNCTION_EXISTS(mbrtowc HAVE_MBRTOWC)
+ CHECK_FUNCTION_EXISTS(wcscoll HAVE_WCSCOLL)
+ CHECK_FUNCTION_EXISTS(wcsdup HAVE_WCSDUP)
+ CHECK_FUNCTION_EXISTS(wcwidth HAVE_WCWIDTH)
+ CHECK_FUNCTION_EXISTS(wctype HAVE_WCTYPE)
+ CHECK_FUNCTION_EXISTS(iswlower HAVE_ISWLOWER)
+ CHECK_FUNCTION_EXISTS(iswupper HAVE_ISWUPPER)
+ CHECK_FUNCTION_EXISTS(towlower HAVE_TOWLOWER)
+ CHECK_FUNCTION_EXISTS(towupper HAVE_TOWUPPER)
+ CHECK_FUNCTION_EXISTS(iswctype HAVE_ISWCTYPE)
+
+ SET(CMAKE_EXTRA_INCLUDE_FILES wchar.h)
+ CHECK_TYPE_SIZE(wchar_t SIZEOF_WCHAR_T)
+ IF(SIZEOF_WCHAR_T)
+ SET(HAVE_WCHAR_T 1)
+ ENDIF()
+
+ SET(CMAKE_EXTRA_INCLUDE_FILES wctype.h)
+ CHECK_TYPE_SIZE(wctype_t SIZEOF_WCTYPE_T)
+ IF(SIZEOF_WCTYPE_T)
+ SET(HAVE_WCTYPE_T 1)
+ ENDIF()
+ CHECK_TYPE_SIZE(wint_t SIZEOF_WINT_T)
+ IF(SIZEOF_WINT_T)
+ SET(HAVE_WINT_T 1)
+ ENDIF()
+ SET(CMAKE_EXTRA_INCLUDE_FILES)
+
+ENDMACRO()
+
+MACRO (FIND_CURSES)
+ INCLUDE (FindCurses)
+ MARK_AS_ADVANCED(CURSES_CURSES_H_PATH CURSES_FORM_LIBRARY CURSES_HAVE_CURSES_H)
+ IF(NOT CURSES_FOUND)
+ MESSAGE(FATAL_ERROR "curses library not found")
+ ENDIF()
+
+ IF(CURSES_HAVE_CURSES_H)
+ SET(HAVE_CURSES_H 1 CACHE INTERNAL "")
+ ELSEIF(CURSES_HAVE_NCURSES_H)
+ SET(HAVE_NCURSES_H 1 CACHE INTERNAL "")
+ ENDIF()
+ IF(CMAKE_SYSTEM_NAME MATCHES "HP")
+ # CMake uses full path to library /lib/libcurses.sl
+ # On Itanium, it results into architecture mismatch+
+ # the library is for PA-RISC
+ SET(CURSES_LIBRARY "curses" CACHE INTERNAL "" FORCE)
+ SET(CURSES_CURSES_LIBRARY "curses" CACHE INTERNAL "" FORCE)
+ ENDIF()
+ENDMACRO()
+
+MACRO (MYSQL_USE_BUNDLED_READLINE)
+ SET_WITH_BUNDLED_READLINE(ON)
+ SET(USE_NEW_READLINE_INTERFACE 1)
+ SET(READLINE_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/cmd-line-utils)
+ SET(READLINE_LIBRARY readline)
+ FIND_CURSES()
+ ADD_SUBDIRECTORY(${CMAKE_SOURCE_DIR}/cmd-line-utils/readline)
+ENDMACRO()
+
+MACRO (MYSQL_USE_BUNDLED_LIBEDIT)
+ SET_WITH_BUNDLED_READLINE(OFF)
+ SET(USE_LIBEDIT_INTERFACE 1 CACHE INTERNAL "")
+ SET(HAVE_HIST_ENTRY 1 CACHE INTERNAL "")
+ 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)
+ FIND_PATH(SYSTEM_READLINE_INCLUDE_DIR readline/readline.h )
+ FIND_LIBRARY(SYSTEM_READLINE_LIBRARY NAMES ${name})
+ MARK_AS_ADVANCED(SYSTEM_READLINE_INCLUDE_DIR SYSTEM_READLINE_LIBRARY)
+
+ INCLUDE(CheckCXXSourceCompiles)
+ SET(CMAKE_REQUIRES_LIBRARIES ${SYSTEM_READLINE_LIBRARY})
+
+ IF(SYSTEM_READLINE_LIBRARY AND SYSTEM_READLINE_INCLUDE_DIR)
+ SET(SYSTEM_READLINE_FOUND 1)
+ SET(CMAKE_REQUIRED_LIBRARIES ${SYSTEM_READLINE_LIBRARY})
+ CHECK_CXX_SOURCE_COMPILES("
+ #include <stdio.h>
+ #include <readline/readline.h>
+ int main(int argc, char **argv)
+ {
+ HIST_ENTRY entry;
+ return 0;
+ }"
+ HAVE_HIST_ENTRY)
+
+ CHECK_CXX_SOURCE_COMPILES("
+ #include <stdio.h>
+ #include <readline/readline.h>
+ int main(int argc, char **argv)
+ {
+ char res= *(*rl_completion_entry_function)(0,0);
+ completion_matches(0,0);
+ }"
+ USE_LIBEDIT_INTERFACE)
+
+
+ CHECK_CXX_SOURCE_COMPILES("
+ #include <stdio.h>
+ #include <readline/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;
+ }"
+ USE_NEW_READLINE_INTERFACE)
+
+ IF(USE_LIBEDIT_INTERFACE OR USE_NEW_READLINE_INTERFACE)
+ SET(READLINE_LIBRARY ${SYSTEM_READLINE_LIBRARY})
+ SET(READLINE_INCLUDE_DIR ${SYSTEM_READLINE_INCLUDE_DIR})
+ SET(READLINE_FOUND 1)
+ ENDIF()
+ ENDIF()
+ENDMACRO()
+
+MACRO (MYSQL_CHECK_READLINE)
+ IF (NOT WIN32)
+ MYSQL_CHECK_MULTIBYTE()
+ OPTION(WITH_READLINE "Use bundled readline" OFF)
+ IF(NOT CYGWIN)
+ # Bundled libedit does not compile on cygwin
+ OPTION(WITH_LIBEDIT "Use bundled libedit" ON)
+ ELSE()
+ OPTION(WITH_LIBEDIT "Use bundled libedit" OFF)
+ ENDIF()
+
+ IF(WITH_READLINE)
+ MYSQL_USE_BUNDLED_READLINE()
+ ELSEIF(WITH_LIBEDIT)
+ MYSQL_USE_BUNDLED_LIBEDIT()
+ 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")
+ ENDIF()
+ ENDIF()
+ ENDIF()
+ ENDIF(NOT WIN32)
+ENDMACRO()
+
diff --git a/cmake/ssl.cmake b/cmake/ssl.cmake
new file mode 100644
index 00000000000..44f57899784
--- /dev/null
+++ b/cmake/ssl.cmake
@@ -0,0 +1,88 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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
+
+MACRO (CHANGE_SSL_SETTINGS string)
+ 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)
+ SET(INC_DIRS
+ ${CMAKE_SOURCE_DIR}/extra/yassl/include
+ ${CMAKE_SOURCE_DIR}/extra/yassl/taocrypt/include
+ )
+ SET(SSL_LIBRARIES yassl taocrypt)
+ 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")
+ CHANGE_SSL_SETTINGS("bundled")
+ #Remove -fno-implicit-templates
+ #(yassl sources cannot be compiled with it)
+ SET(SAVE_CXX_FLAGS ${CXX_FLAGS})
+ STRING(REPLACE "-fno-implicit-templates" "" CMAKE_CXX_FLAGS
+ ${CMAKE_CXX_FLAGS})
+ ADD_SUBDIRECTORY(extra/yassl)
+ ADD_SUBDIRECTORY(extra/yassl/taocrypt)
+ SET(CXX_FLAGS ${SAVE_CXX_FLAGS})
+ GET_TARGET_PROPERTY(src yassl SOURCES)
+ FOREACH(file ${src})
+ SET(SSL_SOURCES ${SSL_SOURCES} ${CMAKE_SOURCE_DIR}/extra/yassl/${file})
+ ENDFOREACH()
+ GET_TARGET_PROPERTY(src taocrypt SOURCES)
+ FOREACH(file ${src})
+ SET(SSL_SOURCES ${SSL_SOURCES} ${CMAKE_SOURCE_DIR}/extra/yassl/taocrypt/${file})
+ ENDFOREACH()
+ENDMACRO()
+
+# MYSQL_CHECK_SSL
+#
+# Provides the following configure options:
+# WITH_SSL=[yes|no|bundled]
+MACRO (MYSQL_CHECK_SSL)
+ IF(NOT WITH_SSL)
+ IF(WIN32)
+ CHANGE_SSL_SETTINGS("bundled")
+ ELSE()
+ CHANGE_SSL_SETTINGS("no")
+ ENDIF()
+ ENDIF()
+
+ IF(WITH_SSL STREQUAL "bundled")
+ MYSQL_USE_BUNDLED_SSL()
+ ELSEIF(WITH_SSL STREQUAL "system" OR WITH_SSL STREQUAL "yes")
+ # Check for system library
+ SET(OPENSSL_FIND_QUIETLY TRUE)
+ INCLUDE(FindOpenSSL)
+ FIND_LIBRARY(CRYPTO_LIBRARY crypto)
+ MARK_AS_ADVANCED(CRYPTO_LIBRARY)
+ INCLUDE(CheckSymbolExists)
+ CHECK_SYMBOL_EXISTS(SHA512_DIGEST_LENGTH "openssl/sha.h"
+ HAVE_SHA512_DIGEST_LENGTH)
+ IF(OPENSSL_FOUND AND CRYPTO_LIBRARY AND HAVE_SHA512_DIGEST_LENGTH)
+ SET(SSL_SOURCES "")
+ SET(SSL_LIBRARIES ${OPENSSL_LIBRARIES} ${CRYPTO_LIBRARY})
+ SET(SSL_INCLUDE_DIRS ${OPENSSL_INCLUDE_DIR})
+ SET(SSL_INTERNAL_INCLUDE_DIRS "")
+ SET(SSL_DEFINES "-DHAVE_OPENSSL")
+ CHANGE_SSL_SETTINGS("system")
+ ELSE()
+ IF(WITH_SSL STREQUAL "system")
+ MESSAGE(SEND_ERROR "Cannot find appropriate system libraries for SSL. Use WITH_SSL=bundled to enable SSL support")
+ ENDIF()
+ MYSQL_USE_BUNDLED_SSL()
+ ENDIF()
+ 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/stack_direction.c b/cmake/stack_direction.c
new file mode 100644
index 00000000000..11bcf803bfa
--- /dev/null
+++ b/cmake/stack_direction.c
@@ -0,0 +1,31 @@
+/* Copyright (C) 2009 Sun Microsystems, Inc
+
+ 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 */
+
+/* Check stack direction (0-down, 1-up) */
+int f(int *a)
+{
+ int b;
+ return(&b > a)?1:0;
+}
+/*
+ Prevent compiler optimizations by calling function
+ through pointer.
+*/
+volatile int (*ptr_f)(int *) = f;
+int main()
+{
+ int a;
+ return ptr_f(&a);
+} \ No newline at end of file
diff --git a/cmake/zlib.cmake b/cmake/zlib.cmake
new file mode 100644
index 00000000000..59f1f7ba68e
--- /dev/null
+++ b/cmake/zlib.cmake
@@ -0,0 +1,73 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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
+
+MACRO (MYSQL_USE_BUNDLED_ZLIB)
+ SET(ZLIB_LIBRARY zlib)
+ SET(ZLIB_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/zlib)
+ SET(ZLIB_FOUND TRUE)
+ SET(WITH_ZLIB "bundled" CACHE STRING "Use bundled zlib")
+ ADD_SUBDIRECTORY(zlib)
+ GET_TARGET_PROPERTY(src zlib SOURCES)
+ FOREACH(file ${src})
+ SET(ZLIB_SOURCES ${ZLIB_SOURCES} ${CMAKE_SOURCE_DIR}/zlib/${file})
+ ENDFOREACH()
+ENDMACRO()
+
+# MYSQL_CHECK_ZLIB_WITH_COMPRESS
+#
+# Provides the following configure options:
+# WITH_ZLIB_BUNDLED
+# If this is set,we use bindled zlib
+# If this is not set,search for system zlib.
+# if system zlib is not found, use bundled copy
+# ZLIB_LIBRARIES, ZLIB_INCLUDE_DIR and ZLIB_SOURCES
+# are set after this macro has run
+
+MACRO (MYSQL_CHECK_ZLIB_WITH_COMPRESS)
+
+ IF(CMAKE_SYSTEM_NAME STREQUAL "OS400" OR
+ CMAKE_SYSTEM_NAME STREQUAL "AIX" OR
+ CMAKE_SYSTEM_NAME STREQUAL "Windows")
+ # Use bundled zlib on some platforms by default (system one is too
+ # old or not existent)
+ IF (NOT WITH_ZLIB)
+ SET(WITH_ZLIB "bundled" CACHE STRING "By default use bundled zlib on this platform")
+ ENDIF()
+ ENDIF()
+
+ IF(WITH_ZLIB STREQUAL "bundled")
+ MYSQL_USE_BUNDLED_ZLIB()
+ ELSE()
+ SET(ZLIB_FIND_QUIETLY TRUE)
+ INCLUDE(FindZLIB)
+ IF(ZLIB_FOUND)
+ INCLUDE(CheckFunctionExists)
+ SET(CMAKE_REQUIRED_LIBRARIES z)
+ CHECK_FUNCTION_EXISTS(crc32 HAVE_CRC32)
+ SET(CMAKE_REQUIRED_LIBRARIES)
+ IF(HAVE_CRC32)
+ SET(ZLIB_LIBRARY z CACHE INTERNAL "System zlib library")
+ SET(WITH_ZLIB "system" CACHE STRING "Which zlib to use (possible values are 'bundled' or 'system')")
+ SET(ZLIB_SOURCES "")
+ ELSE()
+ SET(ZLIB_FOUND FALSE CACHE INTERNAL "Zlib found but not usable")
+ ENDIF()
+ ENDIF()
+ IF(NOT ZLIB_FOUND)
+ MYSQL_USE_BUNDLED_ZLIB()
+ ENDIF()
+ ENDIF()
+ SET(HAVE_COMPRESS 1)
+ENDMACRO()