diff options
author | Vladislav Vaintroub <vvaintroub@mysql.com> | 2009-11-09 12:32:48 +0100 |
---|---|---|
committer | Vladislav Vaintroub <vvaintroub@mysql.com> | 2009-11-09 12:32:48 +0100 |
commit | bc76ad8f6be7e75c7f1dccc322638566ee0fc0e7 (patch) | |
tree | ef650a7fd633d354f237aa267a871fce11fe48d3 | |
parent | d476bbb0becb27d7d3cb1fc5cc0ac4d401622893 (diff) | |
download | mariadb-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)
110 files changed, 6265 insertions, 1030 deletions
diff --git a/BUILD-CMAKE b/BUILD-CMAKE new file mode 100644 index 00000000000..b5a01d52a5a --- /dev/null +++ b/BUILD-CMAKE @@ -0,0 +1,243 @@ +How to Build MySQL server with CMake + +WHAT YOU NEED +--------------------------------------------------------------- +CMake version 2.6 or later installed on your system. + +HOW TO INSTALL: + +Linux distributions: +shell> sudo apt-get install cmake + +The above works on do Debian/Ubuntu based distributions.On others, command +line needs to be modified to e.g "yum install" on Fedora or "zypper install" +on OpenSUSE. + +OpenSolaris: +shell> pfexec pkgadd install SUNWCMake + +Windows and Mac OSX: +Download and install the latest distribution from +http://www.cmake.org/cmake/resources/software.html.On Windows, download +installer exe file and run it. On Mac, download the .dmg image and open it. + +Other Unixes: +Precompiled packages for other Unix flavors (HPUX, AIX) are available from +http://www.cmake.org/cmake/resources/software.html + +Alternatively, you can build from source, source package is also available on +CMake download page. + + +Compiler Tools +-------------- +You will need a working compiler and make utility on your OS. +On Windows, install Visual Studio (Express editions will work too). +On Mac OSX, install Xcode tools. + + + +BUILD +--------------------------------------------------------------- +Ensure that compiler and cmake are in PATH. +The following description assumes that current working directory +is the source directory. + + +- Generic build on Unix, using "Unix Makefiles" generator + +shell>cmake . +shell>make + +Note: by default, cmake build is less verbose than automake build. Use +"make VERBOSE=1" if you want to see add command lines for each compiled source. + +- Windows, using "Visual Studio 9 2008" generator +shell>cmake . -G "Visual Studio 9 2008" +shell>devenv MySQL.sln /build /relwithdebinfo +(alternatively, open MySQL.sln and build using the IDE) + +- Windows, using "NMake Makefiles" generator +shell>cmake . -G "NMake Makefiles" +shell>nmake + +- Mac OSX build with Xcode +shell>cmake . -G Xcode +shell>xcodebuild -configuration Relwithdebinfo +(alternatively, open MySQL.xcodeproj and build using the IDE) + +Command line build with CMake 2.8 +After creating project with cmake -G as above, issue +cmake . --build +this works with any CMake generator. + +For Visual Studio and Xcode you might want to add an extra +configuration parameter, to avoid building all configurations. + +cmake . --build --config Relwithdebinfo + + +Building "out-of-source" +--------------------------------------------------------------- +Building out-of-source provides additional benefits. For example it allows to +build both Release and Debug configurations using the single source tree.Or +build the same source with different version of the same compiler or with +different compilers. Also you will prevent polluting the source tree with the +objects and binaries produced during the make. + +Here is an example on how to do it (generic Unix), assuming the source tree is +in directory named src and the current working directory is source root. + +shell>mkdir ../build # build directory is called build +shell>cd ../build +shell>cmake ../src + +Note: if a directory was used for in-source build, out-of-source will +not work. To reenable out-of-source build, remove <source-root>/CMakeCache.txt +file. + + +CONFIGURATION PARAMETERS +--------------------------------------------------------------- +The procedure above will build with default configuration. + +Let's you want to change the configuration parameters and have archive +storage engine compiled into the server instead of building it as pluggable +module. + +1)You can provide parameters on the command line, like + +shell> cmake . -DWITH_ARCHIVE_STORAGE_ENGINE=1 + +This can be done during the initial configuration or any time later. + +Note, that parameters are "sticky", that is they are remebered in the CMake +cache (CMakeCache.txt file in the build directory) + +2) Configuration using cmake-gui (Windows, OSX, or Linux with cmake-gui +installed) + +From the build directory, issue +shell> cmake-gui . + +- Check the WITH_INNOBASE_STORAGE_ENGINE checkbox +- Click on "Configure" button +- Click on "Generate" button +- Close cmake-gui +shell> make + +3)Using ccmake (Unix) +ccmake is curses-based GUI application that provides the same functionality +as cmake-gui. It is less user-friendly compared to cmake-gui but works also +on exotic Unixes like HPUX, AIX or Solaris. + +Besides storage engines, probably the most important parameter from a +developer's point of view is WITH_DEBUG (this allows to build server with +dbug tracing library and with debug compile flags). + +After changing the configuration, recompile using +shell> make + + +Listing configuration parameters +--------------------------------------------------------------- +shell> cmake -L + +Gives a brief overview of important configuration parameters (dump to stdout) + +shell> cmake -LH + +Does the same but also provides a short help text for each parameter. + +shell> cmake -LAH + +Dumps all config parameters (including advanced) to the stdout. + +PACKAGING +--------------------------------------------------------------- +-- Binary distribution -- +Packaging in form of tar.gz archives (or .zip on Windows) is also supported +To create a tar.gz package, + +1)If you're using "generic" Unix build with makefiles + +shell> make package +this will create a tar.gz file in the top level build directory. + +2)On Windows, using "NMake Makefiles" generator + +shell> nmake package + +3)On Windows, using "Visual Studio" generator + +shell> devenv mysql.sln /build relwithdebinfo /project package + +Note On Windows, 7Zip or Winzip must be installed and 7z.exe rsp winzip.exe +need to be in the PATH. + + +Another way to build packages is calling cpack executable directly like +shell> cpack -G TGZ --config CPackConfig.cmake +(-G TGZ is for tar.gz generator, there is also -GZIP) + +-- Source distribution -- +"make dist" target is provided. + +ADDITIONAL MAKE TARGETS: "make install" AND "make test" +---------------------------------------------------------------- +install target also provided for Makefile based generators. Installation +directory can be controlled using configure-time parameter +CMAKE_INSTALL_PREFIX (default is /usr/local. It is also possible to install to +non-configured directory, using + +shell> make install DESTDIR="/some/absolute/path" + +"make test" runs unit tests (uses CTest for it) +"make test-force" runs mysql-test-run.pl tests with --test-force parameter + +FOR PROGRAMMERS: WRITING PLATFORM CHECKS +-------------------------------------------------------------- +If you modify MySQL source and want to add a new platform check,please read +http://www.vtk.org/Wiki/CMake_HowToDoPlatformChecks first. In MySQL, most of +the platform tests are implemented in config.cmake and the template header file +is config.h.cmake + +Bigger chunks of functionality, for example non-trivial macros are implemented +in files <src-root>/cmake subdirectory. + +For people with autotools background, it is important to remember CMake does +not provide autoheader functionality. That is, when you add a check + +CHECK_FUNCTION_EXISTS(foo HAVE_FOO) +to config.cmake, then you will also need to add +#cmakedefine HAVE_FOO 1 +to config.h.cmake + +Troubleshooting platform checks +-------------------------------- +If you suspect that a platform check returned wrong result, examine +<build-root>/CMakeFiles/CMakeError.log and +<build-root>/CMakeFiles/CMakeOutput.log +These files they contain compiler command line, and exact error messages. + +Troubleshooting CMake code +---------------------------------- +While there are advanced flags for cmake like -debug-trycompile and --trace, +a simple and efficient way to debug to add +MESSAGE("interesting variable=${some_invariable}") +to the interesting places in CMakeLists.txt + + +Tips: +- When using Makefile generator it is easy to examine which compiler flags are +used to build. For example, compiler flags for mysqld are in +<build-root>/sql/CMakeFiles/mysqld.dir/flags.make and the linker command line +is in <build-root>/sql/CMakeFiles/mysqld.dir/link.txt + +- CMake caches results of platform checks in CMakeCache.txt. It is a nice +feature because tests do not rerun when reconfiguring (e.g when a new test was +added).The downside of caching is that when a platform test was wrong and was +later corrected, the cached result is still used. If you encounter this +situation, which should be a rare occation, you need either to remove the +offending entry from CMakeCache.txt (if test was for HAVE_FOO, remove lines +containing HAVE_FOO from CMakeCache.txt) or just remove the cache file. diff --git a/BUILD/Makefile.am b/BUILD/Makefile.am index cd4b00ea731..312340e7132 100644 --- a/BUILD/Makefile.am +++ b/BUILD/Makefile.am @@ -20,6 +20,7 @@ EXTRA_DIST = FINISH.sh \ SETUP.sh \ autorun.sh \ + choose_configure.sh \ build_mccge.sh \ check-cpu \ cleanup \ diff --git a/BUILD/autorun.sh b/BUILD/autorun.sh index 35a2e56cbdf..f45b1f7d08c 100755 --- a/BUILD/autorun.sh +++ b/BUILD/autorun.sh @@ -20,6 +20,7 @@ do done IFS="$save_ifs" +rm -rf configure aclocal || die "Can't execute aclocal" autoheader || die "Can't execute autoheader" # --force means overwrite ltmain.sh script if it already exists @@ -29,3 +30,9 @@ $LIBTOOLIZE --automake --force --copy || die "Can't execute libtoolize" # and --force to overwrite them if they already exist automake --add-missing --force --copy || die "Can't execute automake" autoconf || die "Can't execute autoconf" +# Do not use autotools generated configure directly. Instead, use a script +# that will either call CMake or original configure shell script at build +# time (CMake is preferred if installed). +mv configure configure.am +cp BUILD/choose_configure.sh configure +chmod a+x configure diff --git a/BUILD/choose_configure.sh b/BUILD/choose_configure.sh new file mode 100644 index 00000000000..71243ea09b6 --- /dev/null +++ b/BUILD/choose_configure.sh @@ -0,0 +1,14 @@ +#!/bin/sh +# Choose whether to use autoconf created configure +# of perl script that calls cmake. + +# Ensure cmake and perl are there +cmake -P cmake/check_minimal_version.cmake >/dev/null 2>&1 || HAVE_CMAKE=no +perl --version >/dev/null 2>&1 || HAVE_CMAKE=no +if test "$HAVE_CMAKE" = "no" +then + sh ./configure.am $@ +else + perl ./cmake/configure.pl $@ +fi + diff --git a/CMakeLists.txt b/CMakeLists.txt index 6e53ff30159..3d55d115cff 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2006 MySQL AB +# Copyright (C) 2006-2008 MySQL AB, 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 @@ -13,308 +13,217 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -CMAKE_MINIMUM_REQUIRED(VERSION 2.6 FATAL_ERROR) -IF(COMMAND cmake_policy) - cmake_policy(SET CMP0005 NEW) -ENDIF(COMMAND cmake_policy) +CMAKE_MINIMUM_REQUIRED(VERSION 2.6.0 FATAL_ERROR) -PROJECT(MySql) +# First, decide about build type (debug or release) +# If custom compiler flags are set or cmake is invoked with -DCMAKE_BUILD_TYPE, +# respect user wishes and do not (re)define CMAKE_BUILD_TYPE. If WITH_DEBUG{_FULL} +# is given, set CMAKE_BUILD_TYPE = Debug. Otherwise, use Relwithdebinfo. -# This reads user configuration, generated by configure.js. -INCLUDE(win/configure.data) -# Hardcode support for CSV storage engine -SET(WITH_CSV_STORAGE_ENGINE TRUE) +IF(CMAKE_BUILD_TYPE) + SET(HAVE_CMAKE_BUILD_TYPE TRUE) +ENDIF() +SET(CUSTOM_C_FLAGS $ENV{CFLAGS}) +IF(NOT CUSTOM_C_FLAGS) + SET(CUSTOM_C_FLAGS ${CMAKE_C_FLAGS}) +ENDIF() -CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/include/mysql_version.h.in - ${CMAKE_SOURCE_DIR}/include/mysql_version.h @ONLY) - -# Set standard options -ADD_DEFINITIONS(-DHAVE_YASSL) -ADD_DEFINITIONS(-DCMAKE_CONFIGD) -ADD_DEFINITIONS(-DDEFAULT_MYSQL_HOME="c:/Program Files/MySQL/MySQL Server ${MYSQL_BASE_VERSION}/") -ADD_DEFINITIONS(-DDEFAULT_BASEDIR="c:/Program Files/MySQL/") -ADD_DEFINITIONS(-DMYSQL_DATADIR="c:/Program Files/MySQL/MySQL Server ${MYSQL_BASE_VERSION}/data") -ADD_DEFINITIONS(-DDEFAULT_CHARSET_HOME="c:/Program Files/MySQL/MySQL Server ${MYSQL_BASE_VERSION}/") -ADD_DEFINITIONS(-DPACKAGE=mysql) -ADD_DEFINITIONS(-DSHAREDIR="share") - -# Set debug options -SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DFORCE_INIT_OF_VARS") - -# Do not use SAFEMALLOC for Windows builds, as Debug CRT has the same functionality -# Neither SAFE_MUTEX works on Windows and it has been explicitely undefined in -# my_pthread.h -IF(NOT WIN32) - SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX") - SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX") -ENDIF(NOT WIN32) - -SET(localstatedir "C:\\mysql\\data") -CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/support-files/my-huge.cnf.sh - ${CMAKE_SOURCE_DIR}/support-files/my-huge.ini @ONLY) -CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/support-files/my-innodb-heavy-4G.cnf.sh - ${CMAKE_SOURCE_DIR}/support-files/my-innodb-heavy-4G.ini @ONLY) -CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/support-files/my-large.cnf.sh - ${CMAKE_SOURCE_DIR}/support-files/my-large.ini @ONLY) -CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/support-files/my-medium.cnf.sh - ${CMAKE_SOURCE_DIR}/support-files/my-medium.ini @ONLY) -CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/support-files/my-small.cnf.sh - ${CMAKE_SOURCE_DIR}/support-files/my-small.ini @ONLY) - -IF(CYBOZU) - ADD_DEFINITIONS(-DCYBOZU) -ENDIF(CYBOZU) - -IF(EXTRA_DEBUG) - ADD_DEFINITIONS(-D EXTRA_DEBUG) -ENDIF(EXTRA_DEBUG) - -IF(ENABLED_DEBUG_SYNC) - ADD_DEFINITIONS(-D ENABLED_DEBUG_SYNC) -ENDIF(ENABLED_DEBUG_SYNC) -SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DENABLED_DEBUG_SYNC") -SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DENABLED_DEBUG_SYNC") - -# in some places we use DBUG_OFF -SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DDBUG_OFF") -SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -DDBUG_OFF") -SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -DDBUG_OFF") -SET(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -DDBUG_OFF") - -#TODO: update the code and remove the disabled warnings -SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4800 /wd4805") -SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4800 /wd4805") - -# Disable warnings in Visual Studio 8 and above -IF(MSVC AND NOT CMAKE_GENERATOR MATCHES "Visual Studio 7") - SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /wd4996") - SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /wd4996") - SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /wd4996") - SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /wd4996") - SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /wd4996") - SET(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} /wd4996") -ENDIF(MSVC AND NOT CMAKE_GENERATOR MATCHES "Visual Studio 7") - -IF(CMAKE_GENERATOR MATCHES "Visual Studio 7") - # VS2003 has a bug that prevents linking mysqld with module definition file - # (/DEF option for linker). Linker would incorrectly complain about multiply - # defined symbols. Workaround is to disable dynamic plugins, so /DEF is not - # used. - MESSAGE("Warning: Building MySQL with Visual Studio 2003.NET is no more supported.") - MESSAGE("Please use a newer version of Visual Studio.") - SET(WITHOUT_DYNAMIC_PLUGINS TRUE) -ENDIF(CMAKE_GENERATOR MATCHES "Visual Studio 7") - -# Settings for Visual Studio 7 and above. -IF(MSVC) - # replace /MDd with /MTd - STRING(REPLACE "/MD" "/MT" CMAKE_C_FLAGS_RELEASE ${CMAKE_C_FLAGS_RELEASE}) - STRING(REPLACE "/MD" "/MT" CMAKE_C_FLAGS_RELWITHDEBINFO ${CMAKE_C_FLAGS_RELWITHDEBINFO}) - STRING(REPLACE "/MDd" "/MTd" CMAKE_C_FLAGS_DEBUG ${CMAKE_C_FLAGS_DEBUG}) - STRING(REPLACE "/MDd" "/MTd" CMAKE_C_FLAGS_DEBUG_INIT ${CMAKE_C_FLAGS_DEBUG_INIT}) - - STRING(REPLACE "/MD" "/MT" CMAKE_CXX_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE}) - STRING(REPLACE "/MD" "/MT" CMAKE_CXX_FLAGS_RELWITHDEBINFO ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}) - STRING(REPLACE "/MDd" "/MTd" CMAKE_CXX_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG}) - STRING(REPLACE "/MDd" "/MTd" CMAKE_CXX_FLAGS_DEBUG_INIT ${CMAKE_CXX_FLAGS_DEBUG_INIT}) - - # generate map files, set stack size (see bug#20815) - SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /MAP /MAPINFO:EXPORTS") - SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /STACK:1048576") - - # remove support for Exception handling - STRING(REPLACE "/GX" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) - STRING(REPLACE "/EHsc" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) - STRING(REPLACE "/EHsc" "" CMAKE_CXX_FLAGS_INIT ${CMAKE_CXX_FLAGS_INIT}) - STRING(REPLACE "/EHsc" "" CMAKE_CXX_FLAGS_DEBUG_INIT ${CMAKE_CXX_FLAGS_DEBUG_INIT}) - - # Mark 32 bit executables large address aware so they can - # use > 2GB address space - IF(CMAKE_SIZEOF_VOID_P MATCHES 4) - SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LARGEADDRESSAWARE") - ENDIF(CMAKE_SIZEOF_VOID_P MATCHES 4) - - # Disable automatic manifest generation. - STRING(REPLACE "/MANIFEST" "/MANIFEST:NO" CMAKE_EXE_LINKER_FLAGS - ${CMAKE_EXE_LINKER_FLAGS}) - # Explicitly disable it since it is the default for newer versions of VS - STRING(REGEX MATCH "MANIFEST:NO" tmp_manifest ${CMAKE_EXE_LINKER_FLAGS}) - IF(NOT tmp_manifest) - SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /MANIFEST:NO") - ENDIF(NOT tmp_manifest) -ENDIF(MSVC) +OPTION(WITH_DEBUG "Use dbug" OFF) +OPTION(WITH_DEBUG_FULL "Use dbug and safemalloc/safemutex. Slow" OFF) + +IF(NOT HAVE_CMAKE_BUILD_TYPE AND NOT CUSTOM_C_FLAGS) + IF(WITH_DEBUG) + SET(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Debug build" FORCE) + ELSE() + SET(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "RelWithDebInfo build" FORCE) + ENDIF() +ENDIF() +IF(WITH_DEBUG_FULL) + SET(WITH_DEBUG ON CACHE BOOL "Use DBUG") +ENDIF() + +PROJECT(MySQL) + +IF(CYGWIN) + SET(WIN32 0) +ENDIF() IF(WIN32) - ADD_DEFINITIONS("-D_WINDOWS -D__WIN__ -D_CRT_SECURE_NO_DEPRECATE") - ADD_DEFINITIONS("-D_WIN32_WINNT=0x0501") -ENDIF(WIN32) - -# default to x86 platform. We'll check for X64 in a bit -SET (PLATFORM X86) - -# This definition is necessary to work around a bug with Intellisense described -# here: http://tinyurl.com/2cb428. Syntax highlighting is important for proper -# debugger functionality. -IF(CMAKE_SIZEOF_VOID_P MATCHES 8) - MESSAGE(STATUS "Detected 64-bit platform.") - ADD_DEFINITIONS("-D_WIN64") - SET (PLATFORM X64) -ENDIF(CMAKE_SIZEOF_VOID_P MATCHES 8) - -IF(EMBED_MANIFESTS) - # Search for the tools (mt, makecat, signtool) necessary for embedding - # manifests and signing executables with the MySQL AB authenticode cert. - # - # CMake will first search it's defaults (CMAKE_FRAMEWORK_PATH, - # CMAKE_APPBUNDLE_PATH, CMAKE_PROGRAM_PATH and the system PATH) followed - # by the listed paths which are the current possible defaults and should be - # updated when necessary. - # - # The custom manifests are designed to be compatible with all mt versions. - # The MySQL AB Authenticode certificate is available only internally. - # Others should store a single signing certificate in a local cryptographic - # service provider and alter the signtool command as necessary. - FIND_PROGRAM(HAVE_MANIFEST_TOOL NAMES mt - PATHS - "$ENV{PROGRAMFILES}/Microsoft Visual Studio 8/VC/bin" - "$ENV{PROGRAMFILES}/Microsoft Visual Studio 8/Common7/Tools/Bin" - "$ENV{PROGRAMFILES}/Microsoft Visual Studio 8/SDK/v2.0/Bin") - FIND_PROGRAM(HAVE_CATALOG_TOOL NAMES makecat - PATHS - "$ENV{PROGRAMFILES}/Microsoft Visual Studio 8/Common7/Tools/Bin") - FIND_PROGRAM(HAVE_SIGN_TOOL NAMES signtool - PATHS - "$ENV{PROGRAMFILES}/Microsoft Visual Studio 8/Common7/Tools/Bin" - "$ENV{PROGRAMFILES}/Microsoft Visual Studio 8/SDK/v2.0/Bin") - - IF(HAVE_MANIFEST_TOOL) - MESSAGE(STATUS "Found Mainfest Tool.") - ELSE(HAVE_MANIFEST_TOOL) - MESSAGE(FATAL_ERROR "Manifest tool, mt.exe, can't be found.") - ENDIF(HAVE_MANIFEST_TOOL) - IF(HAVE_CATALOG_TOOL) - MESSAGE(STATUS "Found Catalog Tool.") - ELSE(HAVE_CATALOG_TOOL) - MESSAGE(FATAL_ERROR "Catalog tool, makecat.exe, can't be found.") - ENDIF(HAVE_CATALOG_TOOL) - IF(HAVE_SIGN_TOOL) - MESSAGE(STATUS "Found Sign Tool. Embedding custom manifests and signing executables.") - ELSE(HAVE_SIGN_TOOL) - MESSAGE(FATAL_ERROR "Sign tool, signtool.exe, can't be found.") - ENDIF(HAVE_SIGN_TOOL) - - # Set the processor architecture. - IF(CMAKE_GENERATOR MATCHES "Visual Studio 8 2005 Win64") - SET(PROCESSOR_ARCH "amd64") - ELSE(CMAKE_GENERATOR MATCHES "Visual Studio 8 2005 Win64") - SET(PROCESSOR_ARCH "X86") - ENDIF(CMAKE_GENERATOR MATCHES "Visual Studio 8 2005 Win64") -ENDIF(EMBED_MANIFESTS) - -# Figure out what engines to build and how (statically or dynamically), -# add preprocessor defines for storage engines. -IF(WITHOUT_DYNAMIC_PLUGINS) - MESSAGE("Dynamic plugins are disabled.") -ENDIF(WITHOUT_DYNAMIC_PLUGINS) - -FILE(GLOB STORAGE_SUBDIRS storage/*) -FOREACH(SUBDIR ${STORAGE_SUBDIRS}) - FILE(RELATIVE_PATH DIRNAME ${PROJECT_SOURCE_DIR}/storage ${SUBDIR}) - IF (EXISTS ${SUBDIR}/CMakeLists.txt) - # Check MYSQL_STORAGE_ENGINE macro is present - FILE(STRINGS ${SUBDIR}/CMakeLists.txt HAVE_STORAGE_ENGINE REGEX MYSQL_STORAGE_ENGINE) - IF(HAVE_STORAGE_ENGINE) - # Extract name of engine from HAVE_STORAGE_ENGINE - STRING(REGEX REPLACE ".*MYSQL_STORAGE_ENGINE\\((.*\)\\).*" - "\\1" ENGINE_NAME ${HAVE_STORAGE_ENGINE}) - STRING(TOUPPER ${ENGINE_NAME} ENGINE) - STRING(TOLOWER ${ENGINE_NAME} ENGINE_LOWER) - - SET(ENGINE_BUILD_TYPE "DYNAMIC") - # Read plug.in to find out if a plugin is mandatory and whether it supports - # build as shared library (dynamic). - IF(EXISTS ${SUBDIR}/plug.in) - FILE(READ ${SUBDIR}/plug.in PLUGIN_FILE_CONTENT) - STRING (REGEX MATCH "MYSQL_PLUGIN_DYNAMIC" MYSQL_PLUGIN_DYNAMIC ${PLUGIN_FILE_CONTENT}) - STRING (REGEX MATCH "MYSQL_PLUGIN_MANDATORY" MYSQL_PLUGIN_MANDATORY ${PLUGIN_FILE_CONTENT}) - STRING (REGEX MATCH "MYSQL_PLUGIN_STATIC" MYSQL_PLUGIN_STATIC ${PLUGIN_FILE_CONTENT}) - - IF(MYSQL_PLUGIN_MANDATORY) - SET(WITH_${ENGINE}_STORAGE_ENGINE TRUE) - ENDIF(MYSQL_PLUGIN_MANDATORY) - - IF (WITH_${ENGINE}_STORAGE_ENGINE AND MYSQL_PLUGIN_STATIC) - SET(ENGINE_BUILD_TYPE "STATIC") - ELSEIF(NOT WITHOUT_${ENGINE}_STORAGE_ENGINE AND MYSQL_PLUGIN_DYNAMIC AND NOT WITHOUT_DYNAMIC_PLUGINS) - SET(ENGINE_BUILD_TYPE "DYNAMIC") - ELSE(WITH_${ENGINE}_STORAGE_ENGINE AND MYSQL_PLUGIN_STATIC) - SET(ENGINE_BUILD_TYPE "NONE") - ENDIF(WITH_${ENGINE}_STORAGE_ENGINE AND MYSQL_PLUGIN_STATIC) - IF (ENGINE_BUILD_TYPE STREQUAL "STATIC") - SET (mysql_plugin_defs "${mysql_plugin_defs},builtin_${ENGINE_LOWER}_plugin") - SET (MYSQLD_STATIC_ENGINE_LIBS ${MYSQLD_STATIC_ENGINE_LIBS} ${ENGINE_LOWER}) - SET (STORAGE_ENGINE_DEFS "${STORAGE_ENGINE_DEFS} -DWITH_${ENGINE}_STORAGE_ENGINE") - SET (WITH_${ENGINE}_STORAGE_ENGINE TRUE) - SET (${ENGINE}_DIR ${DIRNAME}) - ENDIF (ENGINE_BUILD_TYPE STREQUAL "STATIC") - ENDIF(EXISTS ${SUBDIR}/plug.in) - - IF(NOT ENGINE_BUILD_TYPE STREQUAL "NONE") - LIST(APPEND ${ENGINE_BUILD_TYPE}_ENGINE_DIRECTORIES ${SUBDIR}) - ENDIF(NOT ENGINE_BUILD_TYPE STREQUAL "NONE") - - ENDIF(HAVE_STORAGE_ENGINE) - ENDIF(EXISTS ${SUBDIR}/CMakeLists.txt) -ENDFOREACH(SUBDIR ${STORAGE_SUBDIRS}) - -# Special handling for partition(not really pluggable) -IF(NOT WITHOUT_PARTITION_STORAGE_ENGINE) - SET (STORAGE_ENGINE_DEFS "${STORAGE_ENGINE_DEFS} -DWITH_PARTITION_STORAGE_ENGINE") - SET (mysql_plugin_defs "${mysql_plugin_defs},builtin_partition_plugin") -ENDIF(NOT WITHOUT_PARTITION_STORAGE_ENGINE) - -ADD_DEFINITIONS(${STORAGE_ENGINE_DEFS}) - -# Now write out our mysql_plugin_defs struct -CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/sql/sql_builtin.cc.in - ${CMAKE_SOURCE_DIR}/sql/sql_builtin.cc @ONLY) - -# Add subdirectories for storage engines -SET (ENGINE_BUILD_TYPE "STATIC") -FOREACH(DIR ${STATIC_ENGINE_DIRECTORIES}) - ADD_SUBDIRECTORY(${DIR}) -ENDFOREACH(DIR ${STATIC_ENGINE_DIRECTORIES}) - -SET (ENGINE_BUILD_TYPE "DYNAMIC") -FOREACH(DIR ${DYNAMIC_ENGINE_DIRECTORIES}) - ADD_SUBDIRECTORY(${DIR}) -ENDFOREACH(DIR ${DYNAMIC_ENGINE_DIRECTORIES}) - -# Add subdirectories for semisync plugin -IF(NOT WITHOUT_DYNAMIC_PLUGINS) - ADD_SUBDIRECTORY(plugin/semisync) -ENDIF(NOT WITHOUT_DYNAMIC_PLUGINS) - -# FIXME "debug" only needed if build type is "Debug", but -# CMAKE_BUILD_TYPE is not set during configure time. -ADD_SUBDIRECTORY(vio) + SET(IF_WIN 0) +ELSE() + SET(IF_WIN 1) +ENDIF() + +# Add macros +INCLUDE(cmake/character_sets.cmake) +INCLUDE(cmake/zlib.cmake) +INCLUDE(cmake/ssl.cmake) +INCLUDE(cmake/readline.cmake) +INCLUDE(cmake/mysql_version.cmake) +INCLUDE(cmake/misc.cmake) +INCLUDE(cmake/dtrace.cmake) +INCLUDE(cmake/plugin.cmake) +INCLUDE(cmake/install_macros.cmake) + +# Handle options +OPTION(ENABLED_PROFILING "Enable profiling" ON) +OPTION(CYBOZU "" OFF) +OPTION(BACKUP_TEST "" OFF) +OPTION(WITHOUT_SERVER OFF) +MARK_AS_ADVANCED(CYBOZU BACKUP_TEST WITHOUT_SERVER) + + +OPTION(ENABLE_DEBUG_SYNC "Enable debug sync (debug builds only)" ON) +IF(ENABLE_DEBUG_SYNC) + SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DENABLED_DEBUG_SYNC") + SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DENABLED_DEBUG_SYNC") +ENDIF() + +OPTION(WITH_ERROR_INJECT + "Enable error injection in MySQL Server (debug builds only)" OFF) +IF(WITH_ERROR_INJECT) + SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DERROR_INJECT_SUPPORT") + SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DERROR_INJECT_SUPPORT") +ENDIF() + + + +OPTION(ENABLE_LOCAL_INFILE + "If we should should enable LOAD DATA LOCAL by default" ${IF_WIN}) +MARK_AS_ADVANCED(ENABLE_LOCAL_INFILE) + +# Set DBUG_OFF for non-debug project types. +FOREACH(BUILD_TYPE RELEASE RELWITHDEBINFO MINSIZEREL) + FOREACH(LANG C CXX) + SET(CMAKE_${LANG}_FLAGS_${BUILD_TYPE} + "${CMAKE_${LANG}_FLAGS_${BUILD_TYPE}} -DDBUG_OFF") + ENDFOREACH() +ENDFOREACH() + +IF(NOT CMAKE_BUILD_TYPE + AND NOT CMAKE_GENERATOR MATCHES "Visual Studio" + AND NOT CMAKE_GENERATOR MATCHES "Xcode") + # This is the case of no CMAKE_BUILD_TYPE choosen, typical for VS and Xcode + # or if custom C flags are set. In VS and Xcode for non-Debug configurations + # DBUG_OFF is already correctly set. Use DBUG_OFF for Makefile based projects + # without build type too, unless user specifically requests DBUG. + IF(NOT CMAKE_C_FLAGS MATCHES "-DDBUG_ON") + ADD_DEFINITIONS(-DDBUG_OFF) + ENDIF() +ENDIF() + +# Add safemalloc and safemutex for debug condifurations, except on Windows +# (C runtime library provides safemalloc functionality and safemutex has never +# worked there) +IF(WITH_DEBUG OR WITH_DEBUG_FULL AND NOT WIN32) + FOREACH(LANG C CXX) + IF(WITH_DEBUG_FULL) + SET(CMAKE_${LANG}_FLAGS_DEBUG "-DSAFEMALLOC -DSAFE_MUTEX") + ELSE() + SET(CMAKE_${LANG}_FLAGS_DEBUG "-DSAFE_MUTEX") + ENDIF() + ENDFOREACH() +ENDIF() + + + + +# Set commonly used variables +IF(WIN32) + SET(DEFAULT_MYSQL_HOME "C:/Program Files/MySQL/MySQL Server ${MYSQL_BASE_VERSION}/" ) + SET(SHAREDIR share) +ELSE() + SET(DEFAULT_MYSQL_HOME ${CMAKE_INSTALL_PREFIX}/mysql/) + SET(SHAREDIR ${DEFAULT_MYSQL_HOME}share) +ENDIF() + +SET(DEFAULT_BASEDIR "${DEFAULT_MYSQL_HOME}") +SET(MYSQL_DATADIR "${DEFAULT_MYSQL_HOME}data") +SET(DEFAULT_CHARSET_HOME "${DEFAULT_MYSQL_HOME}") + + +# Optionally read user configuration, generated by configure.js. +# This is left for backward compatibility reasons only. +IF(WIN32) + INCLUDE(win/configure.data OPTIONAL) +ENDIF() + +# Run platform tests +INCLUDE(configure.cmake) + +# Common defines and includes +ADD_DEFINITIONS(-DHAVE_CONFIG_H) +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/include) + +# Add bundled or system zlib. +MYSQL_CHECK_ZLIB_WITH_COMPRESS() +# Optionally add bundled yassl/taocrypt or system openssl. +MYSQL_CHECK_SSL() +# Add readline or libedit. +MYSQL_CHECK_READLINE() + +IF(NOT WITHOUT_SERVER) + # Add storage engines and plugins. + CONFIGURE_PLUGINS() +ENDIF() + +ADD_SUBDIRECTORY(include) ADD_SUBDIRECTORY(dbug) ADD_SUBDIRECTORY(strings) +ADD_SUBDIRECTORY(vio) ADD_SUBDIRECTORY(regex) ADD_SUBDIRECTORY(mysys) -ADD_SUBDIRECTORY(scripts) -ADD_SUBDIRECTORY(zlib) -ADD_SUBDIRECTORY(extra/yassl) -ADD_SUBDIRECTORY(extra/yassl/taocrypt) -ADD_SUBDIRECTORY(extra) -ADD_SUBDIRECTORY(client) -ADD_SUBDIRECTORY(sql) ADD_SUBDIRECTORY(libmysql) -ADD_SUBDIRECTORY(libservices) -ADD_SUBDIRECTORY(tests) -IF(WITH_EMBEDDED_SERVER) - ADD_SUBDIRECTORY(libmysqld) - ADD_SUBDIRECTORY(libmysqld/examples) -ENDIF(WITH_EMBEDDED_SERVER) -ADD_SUBDIRECTORY(mysql-test/lib/My/SafeProcess) + +OPTION (WITH_UNIT_TESTS "Compile MySQL with unit tests" ON) +IF(WITH_UNIT_TESTS) + ENABLE_TESTING() +ENDIF() +IF(WITH_UNIT_TESTS) + ADD_SUBDIRECTORY(unittest/mytap) + ADD_SUBDIRECTORY(unittest/mysys) +ENDIF() + +IF(NOT WITHOUT_SERVER) + ADD_SUBDIRECTORY(tests) + ADD_SUBDIRECTORY(extra) + ADD_SUBDIRECTORY(client) + ADD_SUBDIRECTORY(sql) + ADD_SUBDIRECTORY(sql/share) + ADD_SUBDIRECTORY(libservices) + OPTION (WITH_EMBEDDED_SERVER "Compile MySQL with embedded server" OFF) + IF(WITH_EMBEDDED_SERVER) + ADD_SUBDIRECTORY(libmysqld) + ADD_SUBDIRECTORY(libmysqld/examples) + ENDIF(WITH_EMBEDDED_SERVER) + + ADD_SUBDIRECTORY(mysql-test) + ADD_SUBDIRECTORY(mysql-test/lib/My/SafeProcess) + ADD_SUBDIRECTORY(support-files) + ADD_SUBDIRECTORY(scripts) + ADD_SUBDIRECTORY(sql-bench) + IF(UNIX) + ADD_SUBDIRECTORY(man) + ENDIF() +ENDIF() + +INCLUDE(cmake/abi_check.cmake) + +CONFIGURE_FILE(config.h.cmake ${CMAKE_BINARY_DIR}/include/my_config.h) +CONFIGURE_FILE(config.h.cmake ${CMAKE_BINARY_DIR}/include/config.h) +CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/include/mysql_version.h.in + ${CMAKE_BINARY_DIR}/include/mysql_version.h ) + + +# Packaging +IF(WIN32) + SET(CPACK_GENERATOR "ZIP") +ELSE() + SET(CPACK_GENERATOR "TGZ") +ENDIF() +INCLUDE(CPack) +INSTALL(FILES COPYING EXCEPTIONS-CLIENT README DESTINATION .) +IF(UNIX) + INSTALL(FILES Docs/INSTALL-BINARY DESTINATION .) +ENDIF() diff --git a/Makefile.am b/Makefile.am index a4b02d23393..498184330ba 100644 --- a/Makefile.am +++ b/Makefile.am @@ -19,7 +19,8 @@ AUTOMAKE_OPTIONS = foreign # These are built from source in the Docs directory EXTRA_DIST = INSTALL-SOURCE INSTALL-WIN-SOURCE \ - README COPYING EXCEPTIONS-CLIENT CMakeLists.txt + README COPYING EXCEPTIONS-CLIENT \ + CMakeLists.txt configure.cmake config.h.cmake BUILD-CMAKE SUBDIRS = . include @docs_dirs@ @zlib_dir@ \ @readline_topdir@ sql-common scripts \ @@ -28,8 +29,8 @@ SUBDIRS = . include @docs_dirs@ @zlib_dir@ \ @sql_server@ @man_dirs@ tests \ netware @libmysqld_dirs@ \ mysql-test support-files sql-bench \ - win - + win \ + cmake DIST_SUBDIRS = . include Docs zlib \ cmd-line-utils sql-common scripts \ pstack libservices \ @@ -38,6 +39,7 @@ DIST_SUBDIRS = . include Docs zlib \ netware libmysqld \ mysql-test support-files sql-bench \ win \ + cmake \ BUILD DISTCLEANFILES = ac_available_languages_fragment @@ -58,6 +60,7 @@ dist-hook: --datadir=$(distdir)/win/data \ --srcdir=$(top_srcdir) storage/myisam/myisamchk --silent --fast $(distdir)/win/data/mysql/*.MYI + test ! -f configure.am || $(INSTALL_DATA) configure.am $(distdir) all-local: @ABI_CHECK@ diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt index 28e4c354a69..1cda6592a6e 100755 --- a/client/CMakeLists.txt +++ b/client/CMakeLists.txt @@ -12,46 +12,49 @@ # 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("${PROJECT_SOURCE_DIR}/win/mysql_manifest.cmake") -INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include - ${CMAKE_SOURCE_DIR}/zlib - ${CMAKE_SOURCE_DIR}/extra/yassl/include - ${CMAKE_SOURCE_DIR}/libmysql - ${CMAKE_SOURCE_DIR}/regex - ${CMAKE_SOURCE_DIR}/sql - ${CMAKE_SOURCE_DIR}/strings) +INCLUDE_DIRECTORIES( + ${CMAKE_SOURCE_DIR}/include + ${ZLIB_INCLUDE_DIR} + ${SSL_INCLUDE_DIRS} + ${CMAKE_SOURCE_DIR}/libmysql + ${CMAKE_SOURCE_DIR}/regex + ${CMAKE_SOURCE_DIR}/sql + ${CMAKE_SOURCE_DIR}/strings + ${READLINE_INCLUDE_DIR} + ${CMAKE_CURRENT_BINARY_DIR} +) -ADD_EXECUTABLE(mysql completion_hash.cc mysql.cc readline.cc sql_string.cc ../mysys/my_conio.c) +ADD_DEFINITIONS(${READLINE_DEFINES}) +ADD_DEFINITIONS(${SSL_DEFINES}) +ADD_EXECUTABLE(mysql completion_hash.cc mysql.cc readline.cc sql_string.cc) TARGET_LINK_LIBRARIES(mysql mysqlclient) +IF(UNIX) + TARGET_LINK_LIBRARIES(mysql ${READLINE_LIBRARY}) +ENDIF(UNIX) ADD_EXECUTABLE(mysqltest mysqltest.cc) SET_SOURCE_FILES_PROPERTIES(mysqltest.cc PROPERTIES COMPILE_FLAGS "-DTHREADS") -TARGET_LINK_LIBRARIES(mysqltest mysqlclient mysys regex dbug) +TARGET_LINK_LIBRARIES(mysqltest mysqlclient regex) + ADD_EXECUTABLE(mysqlcheck mysqlcheck.c) TARGET_LINK_LIBRARIES(mysqlcheck mysqlclient) -ADD_EXECUTABLE(mysqldump mysqldump.c ../sql-common/my_user.c ../mysys/mf_getdate.c) +ADD_EXECUTABLE(mysqldump mysqldump.c ../sql-common/my_user.c) TARGET_LINK_LIBRARIES(mysqldump mysqlclient) ADD_EXECUTABLE(mysqlimport mysqlimport.c) TARGET_LINK_LIBRARIES(mysqlimport mysqlclient) -ADD_EXECUTABLE(mysql_upgrade mysql_upgrade.c ../mysys/my_getpagesize.c) +ADD_EXECUTABLE(mysql_upgrade mysql_upgrade.c) TARGET_LINK_LIBRARIES(mysql_upgrade mysqlclient) ADD_DEPENDENCIES(mysql_upgrade GenFixPrivs) ADD_EXECUTABLE(mysqlshow mysqlshow.c) TARGET_LINK_LIBRARIES(mysqlshow mysqlclient) -ADD_EXECUTABLE(mysqlbinlog mysqlbinlog.cc - ../mysys/mf_tempdir.c - ../mysys/my_new.cc - ../mysys/my_bit.c - ../mysys/my_bitmap.c - ../mysys/my_vle.c - ../mysys/base64.c) +ADD_EXECUTABLE(mysqlbinlog mysqlbinlog.cc) TARGET_LINK_LIBRARIES(mysqlbinlog mysqlclient) ADD_EXECUTABLE(mysqladmin mysqladmin.cc) @@ -59,20 +62,25 @@ TARGET_LINK_LIBRARIES(mysqladmin mysqlclient) ADD_EXECUTABLE(mysqlslap mysqlslap.c) SET_SOURCE_FILES_PROPERTIES(mysqlslap.c PROPERTIES COMPILE_FLAGS "-DTHREADS") -TARGET_LINK_LIBRARIES(mysqlslap mysqlclient mysys zlib dbug) +TARGET_LINK_LIBRARIES(mysqlslap mysqlclient) ADD_EXECUTABLE(echo echo.c) -IF(EMBED_MANIFESTS) - MYSQL_EMBED_MANIFEST("mysql" "asInvoker") - MYSQL_EMBED_MANIFEST("mysqltest" "asInvoker") - MYSQL_EMBED_MANIFEST("mysqlcheck" "asInvoker") - MYSQL_EMBED_MANIFEST("mysqldump" "asInvoker") - MYSQL_EMBED_MANIFEST("mysqlimport" "asInvoker") - MYSQL_EMBED_MANIFEST("mysql_upgrade" "asInvoker") - MYSQL_EMBED_MANIFEST("mysqlshow" "asInvoker") - MYSQL_EMBED_MANIFEST("mysqlbinlog" "asInvoker") - MYSQL_EMBED_MANIFEST("mysqladmin" "asInvoker") - MYSQL_EMBED_MANIFEST("echo" "asInvoker") -ENDIF(EMBED_MANIFESTS) +SET_TARGET_PROPERTIES (mysqlcheck mysqldump mysqlimport mysql_upgrade mysqlshow mysqlslap +PROPERTIES HAS_CXX TRUE) + +SET(INSTALL_EXES + mysqlcheck + mysqldump + mysqlimport + mysql_upgrade + mysqlshow + mysqlslap + mysql + mysqladmin + mysqlbinlog + mysqltest) + +INSTALL(TARGETS ${INSTALL_EXES} DESTINATION bin) +INSTALL_DEBUG_SYMBOLS("${INSTALL_EXES}") 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() diff --git a/cmd-line-utils/libedit/CMakeLists.txt b/cmd-line-utils/libedit/CMakeLists.txt new file mode 100644 index 00000000000..0c58fe9546f --- /dev/null +++ b/cmd-line-utils/libedit/CMakeLists.txt @@ -0,0 +1,167 @@ +# 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 + +INCLUDE_DIRECTORIES(BEFORE ${CMAKE_CURRENT_SOURCE_DIR} ) +INCLUDE(CheckIncludeFile) +CHECK_INCLUDE_FILES(term.h HAVE_TERM_H) + +SET(CMAKE_REQUIRED_LIBRARIES ${CURSES_CURSES_LIBRARY}) +CHECK_CXX_SOURCE_COMPILES(" +#include <term.h> +int main() +{ + tgoto(0,0,0); + return 0; +}" HAVE_DECL_TGOTO) +SET(CMAKE_REQUIRED_LIBRARIES) + + + +IF(CMAKE_SYSTEM_NAME STREQUAL "SunOS") + #On Solaris, default awk is next to unusable while the xpg4 one is ok. + IF(EXISTS /usr/xpg4/bin/awk) + SET(AWK_EXECUTABLE /usr/xpg4/bin/awk) + ENDIF() +ELSEIF(CMAKE_SYSTEM_NAME STREQUAL "OS400") + #Workaround for cases, where /usr/bin/gawk is not executable + IF(EXISTS /QOpenSys/usr/bin/awk) + SET(AWK_EXECUTABLE /QOpenSys/usr/bin/awk) + ENDIF() +ENDIF() + +IF(NOT AWK_EXECUTABLE) + FIND_PROGRAM(AWK_EXECUTABLE NAMES gawk awk DOC "path to the awk executable") +ENDIF() + +MARK_AS_ADVANCED(AWK_EXECUTABLE) +SET(AWK ${AWK_EXECUTABLE}) +CONFIGURE_FILE(makelist.sh ${CMAKE_CURRENT_SOURCE_DIR}/makelist @ONLY) + + +INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include + ${CURSES_INCLUDE_PATH} + } +) + +SET(ASRC vi.c emacs.c common.c) +SET(AHDR vi.h emacs.h common.h) + + +SET(LIBEDIT_SOURCES + chared.c el.c history.c map.c prompt.c readline.c + search.c tokenizer.c vi.c common.c emacs.c + hist.c key.c parse.c read.c refresh.c sig.c term.c + tty.c help.c fcns.c filecomplete.c + ${AHDR} + ) + +include(CheckFunctionExists) +include(CheckIncludeFile) +CHECK_INCLUDE_FILE(vis.h HAVE_VIS_H) + +IF(HAVE_VIS_H) + CHECK_FUNCTION_EXISTS(strvis HAVE_STRVIS) + IF(NOT HAVE_STRVIS) + SET(HAVE_VIS_H FALSE CACHE INTERNAL "" FORCE) + ENDIF() +ENDIF() + +CHECK_FUNCTION_EXISTS(strvis HAVE_STRVIS) +IF(NOT HAVE_STRVIS) + SET(LIBEDIT_SOURCES ${LIBEDIT_SOURCES} np/vis.c) +ENDIF() + + +CHECK_FUNCTION_EXISTS(strunvis HAVE_STRUNVIS) +IF(NOT HAVE_STRUNVIS) + SET(LIBEDIT_SOURCES ${LIBEDIT_SOURCES} np/unvis.c) +ENDIF() + +CHECK_FUNCTION_EXISTS(strlcpy HAVE_STRLCPY) +IF(NOT HAVE_STRLCPY) + SET(LIBEDIT_SOURCES ${LIBEDIT_SOURCES} np/strlcpy.c) +ENDIF() + + +CHECK_FUNCTION_EXISTS(strlcat HAVE_STRLCAT) +IF(NOT HAVE_STRLCAT) + SET(LIBEDIT_SOURCES ${LIBEDIT_SOURCES} np/strlcat.c) +ENDIF() + + +CHECK_FUNCTION_EXISTS(fgetln HAVE_FGETLN) +IF(NOT HAVE_FGETLN) + SET(LIBEDIT_SOURCES ${LIBEDIT_SOURCES} np/fgetln.c) +ENDIF() + + +ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/vi.h + COMMAND sh ./makelist -h vi.c > vi.h + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + DEPENDS vi.c) + +ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/emacs.h + COMMAND sh ./makelist -h emacs.c > emacs.h + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + DEPENDS emacs.c) + +ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/common.h + COMMAND sh ./makelist -h common.c > common.h + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + DEPENDS common.c) + +ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/help.c + COMMAND sh ./makelist -bc ${ASRC} > help.c + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + DEPENDS ${ASRC} + ) + +ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/help.h + COMMAND sh ./makelist -bh ${ASRC} > help.h + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + DEPENDS ${ASRC} + ) + +ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/fcns.h + COMMAND sh ./makelist -fh ${AHDR} > fcns.h + VERBATIM + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + DEPENDS ${AHDR} + ) + +ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/fcns.c + COMMAND sh ./makelist -fc ${AHDR} > fcns.c + VERBATIM + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + DEPENDS ${AHDR} + ) + + +ADD_CUSTOM_TARGET( + GenLibeditSource + DEPENDS + ${CMAKE_CURRENT_SOURCE_DIR}/vi.h + ${CMAKE_CURRENT_SOURCE_DIR}/emacs.h + ${CMAKE_CURRENT_SOURCE_DIR}/common.h + ${CMAKE_CURRENT_SOURCE_DIR}/help.c + ${CMAKE_CURRENT_SOURCE_DIR}/help.h + ${CMAKE_CURRENT_SOURCE_DIR}/fcns.c + ${CMAKE_CURRENT_SOURCE_DIR}/fcns.h +) + +ADD_LIBRARY(edit ${LIBEDIT_SOURCES}) +ADD_DEPENDENCIES(edit GenLibeditSource) +TARGET_LINK_LIBRARIES(edit ${CURSES_LIBRARY}) + diff --git a/cmd-line-utils/libedit/Makefile.am b/cmd-line-utils/libedit/Makefile.am index ddafa4aab44..88ea97afffd 100644 --- a/cmd-line-utils/libedit/Makefile.am +++ b/cmd-line-utils/libedit/Makefile.am @@ -23,7 +23,7 @@ noinst_HEADERS = chared.h el.h el_term.h histedit.h key.h parse.h refresh.h sig. sys.h config.h hist.h map.h prompt.h read.h \ search.h tty.h filecomplete.h np/vis.h -EXTRA_DIST = makelist.sh +EXTRA_DIST = makelist.sh CMakeLists.txt CLEANFILES = makelist common.h emacs.h vi.h fcns.h help.h fcns.c help.c diff --git a/cmd-line-utils/readline/CMakeLists.txt b/cmd-line-utils/readline/CMakeLists.txt new file mode 100644 index 00000000000..506dc1a0ef6 --- /dev/null +++ b/cmd-line-utils/readline/CMakeLists.txt @@ -0,0 +1,60 @@ +# Copyright (C) 2007 MySQL AB +# +# 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_DIRECTORIES(${CMAKE_SOURCE_DIR}/include + ${CMAKE_SOURCE_DIR}/cmd-line-utils) + +ADD_DEFINITIONS(-DHAVE_CONFIG_H -DNO_KILL_INTR -DMYSQL_CLIENT_NO_THREADS) + +INCLUDE_DIRECTORIES(${CURSES_INCLUDE_PATH}) + +ADD_LIBRARY(readline + readline.c + funmap.c + keymaps.c + vi_mode.c + parens.c + rltty.c + complete.c + bind.c + isearch.c + display.c + signals.c + util.c + kill.c + undo.c + macro.c + input.c + callback.c + terminal.c + xmalloc.c + history.c + histsearch.c + histexpand.c + histfile.c + nls.c + search.c + shell.c + tilde.c + misc.c + text.c + mbutil.c + compat.c + savestring.c +) + +# Declare dependency +# so every executable that links with readline links with curses as well +TARGET_LINK_LIBRARIES(readline ${CURSES_LIBRARY}) diff --git a/cmd-line-utils/readline/Makefile.am b/cmd-line-utils/readline/Makefile.am index e5f5717858d..d58ce0f1de1 100644 --- a/cmd-line-utils/readline/Makefile.am +++ b/cmd-line-utils/readline/Makefile.am @@ -29,7 +29,7 @@ noinst_HEADERS = readline.h chardefs.h keymaps.h \ tilde.h rlconf.h rltty.h ansi_stdlib.h \ tcap.h rlstdc.h -EXTRA_DIST= emacs_keymap.c vi_keymap.c +EXTRA_DIST= emacs_keymap.c vi_keymap.c CMakeLists.txt DEFS = -DMYSQL_CLIENT_NO_THREADS -DHAVE_CONFIG_H -DNO_KILL_INTR diff --git a/config.h.cmake b/config.h.cmake new file mode 100644 index 00000000000..054777e9f43 --- /dev/null +++ b/config.h.cmake @@ -0,0 +1,618 @@ +/* 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 */ + +#ifndef MY_CONFIG_H +#define MY_CONFIG_H +#cmakedefine DOT_FRM_VERSION @DOT_FRM_VERSION@ +/* Headers we may want to use. */ +#cmakedefine STDC_HEADERS 1 +#cmakedefine HAVE_ALLOCA_H 1 +#cmakedefine HAVE_AIO_H 1 +#cmakedefine HAVE_ARPA_INET_H 1 +#cmakedefine HAVE_BSEARCH 1 +#cmakedefine HAVE_CRYPT_H 1 +#cmakedefine HAVE_CURSES_H 1 +#cmakedefine HAVE_CXXABI_H 1 +#cmakedefine HAVE_NCURSES_H 1 +#cmakedefine HAVE_DIRENT_H 1 +#cmakedefine HAVE_DLFCN_H 1 +#cmakedefine HAVE_EXECINFO_H 1 +#cmakedefine HAVE_FCNTL_H 1 +#cmakedefine HAVE_FENV_H 1 +#cmakedefine HAVE_FLOAT_H 1 +#cmakedefine HAVE_FLOATINGPOINT_H 1 +#cmakedefine HAVE_FNMATCH_H 1 +#cmakedefine HAVE_FPU_CONTROL_H 1 +#cmakedefine HAVE_GRP_H 1 +#cmakedefine HAVE_EXPLICIT_TEMPLATE_INSTANTIATION 1 +#cmakedefine HAVE_IEEEFP_H 1 +#cmakedefine HAVE_INTTYPES_H 1 +#cmakedefine HAVE_LIMITS_H 1 +#cmakedefine HAVE_LOCALE_H 1 +#cmakedefine HAVE_MALLOC_H 1 +#cmakedefine HAVE_MEMORY_H 1 +#cmakedefine HAVE_NETINET_IN_H 1 +#cmakedefine HAVE_PATHS_H 1 +#cmakedefine HAVE_PORT_H 1 +#cmakedefine HAVE_PWD_H 1 +#cmakedefine HAVE_SCHED_H 1 +#cmakedefine HAVE_SELECT_H 1 +#cmakedefine HAVE_SOLARIS_LARGE_PAGES 1 +#cmakedefine HAVE_STDDEF_H 1 +#cmakedefine HAVE_STDLIB_H 1 +#cmakedefine HAVE_STDARG_H 1 +#cmakedefine HAVE_STRINGS_H 1 +#cmakedefine HAVE_STRING_H 1 +#cmakedefine HAVE_STDINT_H 1 +#cmakedefine HAVE_SEMAPHORE_H 1 +#cmakedefine HAVE_SYNCH_H 1 +#cmakedefine HAVE_SYSENT_H 1 +#cmakedefine HAVE_SYS_DIR_H 1 +#cmakedefine HAVE_SYS_CDEFS_H 1 +#cmakedefine HAVE_SYS_FILE_H 1 +#cmakedefine HAVE_SYS_FPU_H 1 +#cmakedefine HAVE_SYS_IOCTL_H 1 +#cmakedefine HAVE_SYS_IPC_H 1 +#cmakedefine HAVE_SYS_MALLOC_H 1 +#cmakedefine HAVE_SYS_MMAN_H 1 +#cmakedefine HAVE_SYS_PTE_H 1 +#cmakedefine HAVE_SYS_PTEM_H 1 +#cmakedefine HAVE_SYS_PRCTL_H 1 +#cmakedefine HAVE_SYS_RESOURCE_H 1 +#cmakedefine HAVE_SYS_SELECT_H 1 +#cmakedefine HAVE_SYS_SHM_H 1 +#cmakedefine HAVE_SYS_SOCKET_H 1 +#cmakedefine HAVE_SYS_STAT_H 1 +#cmakedefine HAVE_SYS_STREAM_H 1 +#cmakedefine HAVE_SYS_TERMCAP_H 1 +#cmakedefine HAVE_SYS_TIMEB_H 1 +#cmakedefine HAVE_SYS_TYPES_H 1 +#cmakedefine HAVE_SYS_UN_H 1 +#cmakedefine HAVE_SYS_VADVISE_H 1 +#cmakedefine HAVE_TERM_H 1 +#cmakedefine HAVE_TERMIOS_H 1 +#cmakedefine HAVE_TERMIO_H 1 +#cmakedefine HAVE_TERMCAP_H 1 +#cmakedefine HAVE_UNISTD_H 1 +#cmakedefine HAVE_UTIME_H 1 +#cmakedefine HAVE_VARARGS_H 1 +#cmakedefine HAVE_VIS_H 1 +#cmakedefine HAVE_SYS_UTIME_H 1 +#cmakedefine HAVE_SYS_WAIT_H 1 +#cmakedefine HAVE_SYS_PARAM_H 1 + +/* Libraries */ +#cmakedefine HAVE_LIBPTHREAD 1 +#cmakedefine HAVE_LIBM 1 +#cmakedefine HAVE_LIBDL 1 +#cmakedefine HAVE_LIBRT 1 +#cmakedefine HAVE_LIBSOCKET 1 +#cmakedefine HAVE_LIBNSL 1 +#cmakedefine HAVE_LIBCRYPT 1 +#cmakedefine HAVE_LIBMTMALLOC 1 +#cmakedefine HAVE_LIBWRAP 1 +/* Does "struct timespec" have a "sec" and "nsec" field? */ +#cmakedefine HAVE_TIMESPEC_TS_SEC 1 + +/* Readline */ +#cmakedefine HAVE_HIST_ENTRY 1 +#cmakedefine USE_LIBEDIT_INTERFACE 1 +#cmakedefine USE_NEW_READLINE_INTERFACE 1 + +#cmakedefine FIONREAD_IN_SYS_IOCTL 1 +#cmakedefine GWINSZ_IN_SYS_IOCTL 1 +#cmakedefine TIOCSTAT_IN_SYS_IOCTL 1 + +/* Functions we may want to use. */ +#cmakedefine HAVE_AIOWAIT 1 +#cmakedefine HAVE_ALARM 1 +#cmakedefine HAVE_ALLOCA 1 +#cmakedefine HAVE_BCMP 1 +#cmakedefine HAVE_BFILL 1 +#cmakedefine HAVE_BMOVE 1 +#cmakedefine HAVE_BZERO 1 +#cmakedefine HAVE_INDEX 1 +#cmakedefine HAVE_CLOCK_GETTIME 1 +#cmakedefine HAVE_CRYPT 1 +#cmakedefine HAVE_CUSERID 1 +#cmakedefine HAVE_DIRECTIO 1 +#cmakedefine HAVE_DLERROR 1 +#cmakedefine HAVE_DLOPEN 1 +#cmakedefine HAVE_DOPRNT 1 +#cmakedefine HAVE_FCHMOD 1 +#cmakedefine HAVE_FCNTL 1 +#cmakedefine HAVE_FCONVERT 1 +#cmakedefine HAVE_FDATASYNC 1 +#cmakedefine HAVE_FESETROUND 1 +#cmakedefine HAVE_FINITE 1 +#cmakedefine HAVE_FP_EXCEPT 1 +#cmakedefine HAVE_FPSETMASK 1 +#cmakedefine HAVE_FSEEKO 1 +#cmakedefine HAVE_FSYNC 1 +#cmakedefine HAVE_GETADDRINFO 1 +#cmakedefine HAVE_GETCWD 1 +#cmakedefine HAVE_GETHOSTBYADDR_R 1 +#cmakedefine HAVE_GETHOSTBYNAME_R 1 +#cmakedefine HAVE_GETHRTIME 1 +#cmakedefine HAVE_GETLINE 1 +#cmakedefine HAVE_GETNAMEINFO 1 +#cmakedefine HAVE_GETPAGESIZE 1 +#cmakedefine HAVE_GETPASS 1 +#cmakedefine HAVE_GETPASSPHRASE 1 +#cmakedefine HAVE_GETPWNAM 1 +#cmakedefine HAVE_GETPWUID 1 +#cmakedefine HAVE_GETRLIMIT 1 +#cmakedefine HAVE_GETRUSAGE 1 +#cmakedefine HAVE_GETTIMEOFDAY 1 +#cmakedefine HAVE_GETWD 1 +#cmakedefine HAVE_GMTIME_R 1 +#cmakedefine gmtime_r @gmtime_r@ +#cmakedefine HAVE_INITGROUPS 1 +#cmakedefine HAVE_ISSETUGID 1 +#cmakedefine HAVE_ISNAN 1 +#cmakedefine HAVE_ISINF 1 +#cmakedefine HAVE_LARGE_PAGE_OPTION 1 +#cmakedefine HAVE_LDIV 1 +#cmakedefine HAVE_LRAND48 1 +#cmakedefine HAVE_LOCALTIME_R 1 +#cmakedefine HAVE_LOG2 1 +#cmakedefine HAVE_LONGJMP 1 +#cmakedefine HAVE_LSTAT 1 +#cmakedefine HAVE_NPTL 1 +#cmakedefine HAVE_NL_LANGINFO 1 +#cmakedefine HAVE_MADVISE 1 +#cmakedefine HAVE_DECL_MADVISE 1 +#cmakedefine HAVE_DECL_TGOTO 1 +#cmakedefine HAVE_DECL_MHA_MAPSIZE_VA +#cmakedefine HAVE_MALLINFO 1 +#cmakedefine HAVE_MEMCPY 1 +#cmakedefine HAVE_MEMMOVE 1 +#cmakedefine HAVE_MKSTEMP 1 +#cmakedefine HAVE_MLOCKALL 1 +#cmakedefine HAVE_MMAP 1 +#cmakedefine HAVE_MMAP64 1 +#cmakedefine HAVE_PERROR 1 +#cmakedefine HAVE_POLL 1 +#cmakedefine HAVE_PORT_CREATE 1 +#cmakedefine HAVE_POSIX_FALLOCATE 1 +#cmakedefine HAVE_PREAD 1 +#cmakedefine HAVE_PAUSE_INSTRUCTION 1 +#cmakedefine HAVE_FAKE_PAUSE_INSTRUCTION 1 +#cmakedefine HAVE_PTHREAD_ATTR_CREATE 1 +#cmakedefine HAVE_PTHREAD_ATTR_GETSTACKSIZE 1 +#cmakedefine HAVE_PTHREAD_ATTR_SETPRIO 1 +#cmakedefine HAVE_PTHREAD_ATTR_SETSCHEDPARAM 1 +#cmakedefine HAVE_PTHREAD_ATTR_SETSCOPE 1 +#cmakedefine HAVE_PTHREAD_ATTR_SETSTACKSIZE 1 +#cmakedefine HAVE_PTHREAD_CONDATTR_CREATE 1 +#cmakedefine HAVE_PTHREAD_CONDATTR_SETCLOCK 1 +#cmakedefine HAVE_PTHREAD_INIT 1 +#cmakedefine HAVE_PTHREAD_KEY_DELETE 1 +#cmakedefine HAVE_PTHREAD_KEY_DELETE 1 +#cmakedefine HAVE_PTHREAD_KILL 1 +#cmakedefine HAVE_PTHREAD_RWLOCK_RDLOCK 1 +#cmakedefine HAVE_PTHREAD_SETPRIO_NP 1 +#cmakedefine HAVE_PTHREAD_SETSCHEDPARAM 1 +#cmakedefine HAVE_PTHREAD_SIGMASK 1 +#cmakedefine HAVE_PTHREAD_THREADMASK 1 +#cmakedefine HAVE_PTHREAD_YIELD_NP 1 +#cmakedefine HAVE_PTHREAD_YIELD_ZERO_ARG 1 +#cmakedefine HAVE_PUTENV 1 +#cmakedefine HAVE_RE_COMP 1 +#cmakedefine HAVE_REGCOMP 1 +#cmakedefine HAVE_READDIR_R 1 +#cmakedefine HAVE_READLINK 1 +#cmakedefine HAVE_REALPATH 1 +#cmakedefine HAVE_RENAME 1 +#cmakedefine HAVE_RINT 1 +#cmakedefine HAVE_RWLOCK_INIT 1 +#cmakedefine HAVE_SCHED_YIELD 1 +#cmakedefine HAVE_SELECT 1 +#cmakedefine HAVE_SETFD 1 +#cmakedefine HAVE_SETENV 1 +#cmakedefine HAVE_SETLOCALE 1 +#cmakedefine HAVE_SIGADDSET 1 +#cmakedefine HAVE_SIGEMPTYSET 1 +#cmakedefine HAVE_SIGHOLD 1 +#cmakedefine HAVE_SIGSET 1 +#cmakedefine HAVE_SIGSET_T 1 +#cmakedefine HAVE_SIGACTION 1 +#cmakedefine HAVE_SIGTHREADMASK 1 +#cmakedefine HAVE_SIGWAIT 1 +#cmakedefine HAVE_SLEEP 1 +#cmakedefine HAVE_SNPRINTF 1 +#cmakedefine HAVE_STPCPY 1 +#cmakedefine HAVE_STRERROR 1 +#cmakedefine HAVE_STRCOLL 1 +#cmakedefine HAVE_STRSIGNAL 1 +#cmakedefine HAVE_STRLCPY 1 +#cmakedefine HAVE_STRLCAT 1 +#cmakedefine HAVE_FGETLN 1 +#cmakedefine HAVE_STRNLEN 1 +#cmakedefine HAVE_STRPBRK 1 +#cmakedefine HAVE_STRSEP 1 +#cmakedefine HAVE_STRSTR 1 +#cmakedefine HAVE_STRTOK_R 1 +#cmakedefine HAVE_STRTOL 1 +#cmakedefine HAVE_STRTOLL 1 +#cmakedefine HAVE_STRTOUL 1 +#cmakedefine HAVE_STRTOULL 1 +#cmakedefine HAVE_SHMAT 1 +#cmakedefine HAVE_SHMCTL 1 +#cmakedefine HAVE_SHMDT 1 +#cmakedefine HAVE_SHMGET 1 +#cmakedefine HAVE_TELL 1 +#cmakedefine HAVE_TEMPNAM 1 +#cmakedefine HAVE_THR_SETCONCURRENCY 1 +#cmakedefine HAVE_THR_YIELD 1 +#cmakedefine HAVE_VALLOC 1 +#define HAVE_VIO_READ_BUFF 1 +#cmakedefine HAVE_VASPRINTF 1 +#cmakedefine HAVE_VPRINTF 1 +#cmakedefine HAVE_VSNPRINTF 1 +#cmakedefine HAVE_FTRUNCATE 1 +#cmakedefine HAVE_TZNAME 1 +#cmakedefine HAVE_AIO_READ 1 +/* Symbols we may use */ +#cmakedefine HAVE_SYS_ERRLIST 1 +/* used by stacktrace functions */ +#cmakedefine HAVE_BSS_START 1 +#cmakedefine HAVE_BACKTRACE 1 +#cmakedefine HAVE_BACKTRACE_SYMBOLS 1 +#cmakedefine HAVE_BACKTRACE_SYMBOLS_FD 1 +#cmakedefine HAVE_STRUCT_SOCKADDR_IN6 1 +#cmakedefine HAVE_STRUCT_IN6_ADDR 1 +#cmakedefine HAVE_NETINET_IN6_H 1 +#cmakedefine HAVE_IPV6 1 +#cmakedefine ss_family @ss_family@ +#cmakedefine HAVE_TIMESPEC_TS_SEC 1 +#cmakedefine STRUCT_DIRENT_HAS_D_INO 1 +#cmakedefine STRUCT_DIRENT_HAS_D_NAMLEN 1 +#cmakedefine SPRINTF_RETURNS_INT 1 + +#define USE_MB 1 +#define USE_MB_IDENT 1 + + + +/* Types we may use */ +#cmakedefine SIZEOF_CHAR @SIZEOF_CHAR@ +#if SIZEOF_CHAR +# define HAVE_CHAR 1 +#endif + +#cmakedefine SIZEOF_CHARP @SIZEOF_CHARP@ +#if SIZEOF_CHARP +#define HAVE_CHARP 1 +#define SIZEOF_VOIDP SIZEOF_CHARP +#endif + +#cmakedefine SIZEOF_SHORT @SIZEOF_SHORT@ +#if SIZEOF_SHORT +# define HAVE_SHORT 1 +#endif + +#cmakedefine SIZEOF_INT @SIZEOF_INT@ +#if SIZEOF_INT +# define HAVE_INT 1 +#endif + +#cmakedefine SIZEOF_LONG @SIZEOF_LONG@ +#if SIZEOF_LONG +# define HAVE_LONG 1 +#endif + +#cmakedefine SIZEOF_LONG_LONG @SIZEOF_LONG_LONG@ +#if SIZEOF_LONG_LONG +# define HAVE_LONG_LONG 1 +#endif + +#cmakedefine SIZEOF_OFF_T @SIZEOF_OFF_T@ +#if SIZEOF_OFF_T +#define HAVE_OFF_T 1 +#endif + +#cmakedefine SIZEOF_SIGSET_T @SIZEOF_SIGSET_T@ +#if SIZEOF_SIGSET_T +#define HAVE_SIGSET_T 1 +#endif + +#cmakedefine SIZEOF_SIZE_T @SIZEOF_SIZE_T@ +#if SIZEOF_SIZE_T +#define HAVE_SIZE_T 1 +#endif + +#cmakedefine SIZEOF_UCHAR @SIZEOF_UCHAR@ +#if SIZEOF_UCHAR +#define HAVE_UCHAR 1 +#endif + +#cmakedefine SIZEOF_UINT @SIZEOF_UINT@ +#if SIZEOF_UINT +#define HAVE_UINT 1 +#endif + +#cmakedefine SIZEOF_ULONG @SIZEOF_ULONG@ +#if SIZEOF_ULONG +#define HAVE_ULONG 1 +#endif + +#cmakedefine SIZEOF_INT8 @SIZEOF_INT8@ +#if SIZEOF_INT8 +#define HAVE_INT8 1 +#endif +#cmakedefine SIZEOF_UINT8 @SIZEOF_UINT8@ +#if SIZEOF_UINT8 +#define HAVE_UINT8 1 +#endif + +#cmakedefine SIZEOF_INT16 @SIZEOF_INT16@ +#if SIZEOF_INT16 +# define HAVE_INT16 1 +#endif +#cmakedefine SIZEOF_UINT16 @SIZEOF_UINT16@ +#if SIZEOF_UINT16 +#define HAVE_UINT16 1 +#endif + +#cmakedefine SIZEOF_INT32 @SIZEOF_INT32@ +#if SIZEOF_INT32 +#define HAVE_INT32 1 +#endif +#cmakedefine SIZEOF_UINT32 @SIZEOF_UINT32@ +#if SIZEOF_UINT32 +#define HAVE_UINT32 1 +#endif +#cmakedefine SIZEOF_U_INT32_T @SIZEOF_U_INT32_T@ +#if SIZEOF_U_INT32_T +#define HAVE_U_INT32_T 1 +#endif + +#cmakedefine SIZEOF_INT64 @SIZEOF_INT64@ +#if SIZEOF_INT64 +#define HAVE_INT64 1 +#endif +#cmakedefine SIZEOF_UINT64 @SIZEOF_UINT64@ +#if SIZEOF_UINT64 +#define HAVE_UINT64 1 +#endif + +#cmakedefine SOCKET_SIZE_TYPE @SOCKET_SIZE_TYPE@ + +#cmakedefine SIZEOF_BOOL @SIZEOF_BOOL@ +#if SIZEOF_BOOL +#define HAVE_BOOL 1 +#endif +#cmakedefine HAVE_MBSTATE_T + +#define MAX_INDEXES 64 + +#cmakedefine QSORT_TYPE_IS_VOID 1 +#define RETQSORTTYPE void + +#cmakedefine SIGNAL_RETURN_TYPE_IS_VOID 1 +#define RETSIGTYPE void +#if SIGNAL_RETURN_TYPE_IS_VOID +#define VOID_SIGHANDLER 1 +#endif +#define STRUCT_RLIMIT struct rlimit + +#cmakedefine WORDS_BIGENDIAN 1 + +/* Define to `__inline__' or `__inline' if that's what the C compiler calls + it, or to nothing if 'inline' is not supported under any name. */ +#cmakedefine C_HAS_inline 1 +#if !(C_HAS_inline) +#ifndef __cplusplus +# define inline @C_INLINE@ +#endif +#endif + + +#cmakedefine TARGET_OS_LINUX 1 +#cmakedefine TARGET_OS_SOLARIS 1 + +#cmakedefine HAVE_WCTYPE_H 1 +#cmakedefine HAVE_WCHAR_H 1 +#cmakedefine HAVE_LANGINFO_H 1 +#cmakedefine HAVE_MBRLEN +#cmakedefine HAVE_MBSCMP +#cmakedefine HAVE_MBSRTOWCS +#cmakedefine HAVE_WCRTOMB +#cmakedefine HAVE_MBRTOWC +#cmakedefine HAVE_WCSCOLL +#cmakedefine HAVE_WCSDUP +#cmakedefine HAVE_WCWIDTH +#cmakedefine HAVE_WCTYPE +#cmakedefine HAVE_ISWLOWER 1 +#cmakedefine HAVE_ISWUPPER 1 +#cmakedefine HAVE_TOWLOWER 1 +#cmakedefine HAVE_TOWUPPER 1 +#cmakedefine HAVE_ISWCTYPE 1 +#cmakedefine HAVE_WCHAR_T 1 +#cmakedefine HAVE_WCTYPE_T 1 +#cmakedefine HAVE_WINT_T 1 + + +#cmakedefine HAVE_STRCASECMP 1 +#cmakedefine HAVE_STRNCASECMP 1 +#cmakedefine HAVE_STRDUP 1 +#cmakedefine HAVE_LANGINFO_CODESET +#cmakedefine HAVE_TCGETATTR 1 +#cmakedefine HAVE_FLOCKFILE 1 + +#cmakedefine HAVE_WEAK_SYMBOL 1 +#cmakedefine HAVE_ABI_CXA_DEMANGLE 1 + + +#cmakedefine HAVE_POSIX_SIGNALS 1 +#cmakedefine HAVE_BSD_SIGNALS 1 +#cmakedefine HAVE_SVR3_SIGNALS 1 +#cmakedefine HAVE_V7_SIGNALS 1 + + +#cmakedefine HAVE_SOLARIS_STYLE_GETHOST 1 +#cmakedefine HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE 1 +#cmakedefine HAVE_GETHOSTBYNAME_R_RETURN_INT 1 + +#cmakedefine MY_ATOMIC_MODE_DUMMY 1 +#cmakedefine MY_ATOMIC_MODE_RWLOCKS 1 +#cmakedefine HAVE_GCC_ATOMIC_BUILTINS 1 +#cmakedefine HAVE_SOLARIS_ATOMIC 1 +#cmakedefine HAVE_DECL_SHM_HUGETLB 1 +#cmakedefine HAVE_LARGE_PAGES 1 +#cmakedefine HUGETLB_USE_PROC_MEMINFO 1 +#cmakedefine NO_FCNTL_NONBLOCK 1 + +#cmakedefine _LARGE_FILES 1 +#cmakedefine _LARGEFILE_SOURCE 1 +#cmakedefine _LARGEFILE64_SOURCE 1 +#cmakedefine _FILE_OFFSET_BITS @_FILE_OFFSET_BITS@ + +#cmakedefine TIME_WITH_SYS_TIME 1 + +#cmakedefine STACK_DIRECTION @STACK_DIRECTION@ + +#define THREAD 1 +#define THREAD_SAFE_CLIENT 1 + +#define SYSTEM_TYPE "@SYSTEM_TYPE@" +#define MACHINE_TYPE "@CMAKE_SYSTEM_PROCESSOR@" +#cmakedefine HAVE_DTRACE 1 + +#cmakedefine SIGNAL_WITH_VIO_CLOSE 1 + +/* Windows stuff, mostly functions, that have Posix analogs but named differently */ +#cmakedefine S_IROTH @S_IROTH@ +#cmakedefine S_IFIFO @S_IFIFO@ +#cmakedefine IPPROTO_IPV6 @IPPROTO_IPV6@ +#cmakedefine IPV6_V6ONLY @IPV6_V6ONLY@ +#cmakedefine sigset_t @sigset_t@ +#cmakedefine mode_t @mode_t@ +#cmakedefine SIGQUIT @SIGQUIT@ +#cmakedefine SIGPIPE @SIGPIPE@ +#cmakedefine isnan @isnan@ +#cmakedefine finite @finite@ +#cmakedefine popen @popen@ +#cmakedefine pclose @pclose@ +#cmakedefine ssize_t @ssize_t@ +#cmakedefine strcasecmp @strcasecmp@ +#cmakedefine strncasecmp @strncasecmp@ +#cmakedefine snprintf @snprintf@ +#cmakedefine strtok_r @strtok_r@ +#cmakedefine strtoll @strtoll@ +#cmakedefine strtoull @strtoull@ + + + +/* + MySQL features +*/ +#cmakedefine ENABLED_LOCAL_INFILE 1 +#cmakedefine ENABLED_PROFILING 1 +#cmakedefine EXTRA_DEBUG 1 +#cmakedefine BACKUP_TEST 1 +#cmakedefine CYBOZU 1 + +/* Character sets and collations */ +#cmakedefine MYSQL_DEFAULT_CHARSET_NAME "latin1" +#cmakedefine MYSQL_DEFAULT_COLLATION_NAME "latin1_swedish_ci" + +#cmakedefine USE_MB 1 +#cmakedefine USE_MB_IDENT 1 +#cmakedefine USE_STRCOLL 1 + +#cmakedefine HAVE_CHARSET_armscii8 1 +#cmakedefine HAVE_CHARSET_ascii +#cmakedefine HAVE_CHARSET_big5 1 +#cmakedefine HAVE_CHARSET_cp1250 1 +#cmakedefine HAVE_CHARSET_cp1251 1 +#cmakedefine HAVE_CHARSET_cp1256 1 +#cmakedefine HAVE_CHARSET_cp1257 1 +#cmakedefine HAVE_CHARSET_cp850 1 +#cmakedefine HAVE_CHARSET_cp852 1 +#cmakedefine HAVE_CHARSET_cp866 1 +#cmakedefine HAVE_CHARSET_cp932 1 +#cmakedefine HAVE_CHARSET_dec8 1 +#cmakedefine HAVE_CHARSET_eucjpms 1 +#cmakedefine HAVE_CHARSET_euckr 1 +#cmakedefine HAVE_CHARSET_gb2312 1 +#cmakedefine HAVE_CHARSET_gbk 1 +#cmakedefine HAVE_CHARSET_geostd8 1 +#cmakedefine HAVE_CHARSET_greek 1 +#cmakedefine HAVE_CHARSET_hebrew 1 +#cmakedefine HAVE_CHARSET_hp8 1 +#cmakedefine HAVE_CHARSET_keybcs2 1 +#cmakedefine HAVE_CHARSET_koi8r 1 +#cmakedefine HAVE_CHARSET_koi8u 1 +#cmakedefine HAVE_CHARSET_latin1 1 +#cmakedefine HAVE_CHARSET_latin2 1 +#cmakedefine HAVE_CHARSET_latin5 1 +#cmakedefine HAVE_CHARSET_latin7 1 +#cmakedefine HAVE_CHARSET_macce 1 +#cmakedefine HAVE_CHARSET_macroman 1 +#cmakedefine HAVE_CHARSET_sjis 1 +#cmakedefine HAVE_CHARSET_swe7 1 +#cmakedefine HAVE_CHARSET_tis620 1 +#cmakedefine HAVE_CHARSET_ucs2 1 +#cmakedefine HAVE_CHARSET_ujis 1 +#cmakedefine HAVE_CHARSET_utf8mb4 1 +#cmakedefine HAVE_CHARSET_utf8mb3 1 +#cmakedefine HAVE_CHARSET_utf8 1 +#cmakedefine HAVE_CHARSET_utf16 1 +#cmakedefine HAVE_CHARSET_utf32 1 +#cmakedefine HAVE_UCA_COLLATIONS 1 +#cmakedefine HAVE_COMPRESS 1 + + +/* + Stuff that always need to be defined (compile breaks without it) +*/ +#define HAVE_SPATIAL 1 +#define HAVE_RTREE_KEYS 1 +#define HAVE_QUERY_CACHE 1 + +/* + Important storage engines (those that really need define + WITH_<ENGINE>_STORAGE_ENGINE for the whole server) +*/ +#cmakedefine WITH_MYISAM_STORAGE_ENGINE 1 +#cmakedefine WITH_MYISAMMRG_STORAGE_ENGINE 1 +#cmakedefine WITH_HEAP_STORAGE_ENGINE 1 +#cmakedefine WITH_CSV_STORAGE_ENGINE 1 +#cmakedefine WITH_PARTITION_STORAGE_ENGINE 1 +#cmakedefine WITH_PERFSCHEMA_STORAGE_ENGINE 1 +#cmakedefine WITH_NDBCLUSTER_STORAGE_ENGINE 1 +#if (WITH_NDBCLUSTER_STORAGE_ENGINE) && !defined(EMBEDDED_LIBRARY) +#define HAVE_NDB_BINLOG 1 +#endif + +#cmakedefine DEFAULT_MYSQL_HOME "@DEFAULT_MYSQL_HOME@" +#cmakedefine SHAREDIR "@SHAREDIR@" +#cmakedefine DEFAULT_BASEDIR "@DEFAULT_BASEDIR@" +#cmakedefine MYSQL_DATADIR "@MYSQL_DATADIR@" +#cmakedefine DEFAULT_CHARSET_HOME "@DEFAULT_CHARSET_HOME@" + +#define PACKAGE "mysql" +#define PACKAGE_BUGREPORT "" +#define PACKAGE_NAME "MySQL Server" +#define PACKAGE_STRING "MySQL Server @VERSION@" +#define PACKAGE_TARNAME "mysql" +#define PACKAGE_VERSION "@VERSION@" +#define VERSION "@VERSION@" +#define PROTOCOL_VERSION 10 + + +#endif diff --git a/configure.cmake b/configure.cmake new file mode 100644 index 00000000000..aff4c1403f9 --- /dev/null +++ b/configure.cmake @@ -0,0 +1,1335 @@ +# 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 +# + +INCLUDE (CheckCSourceCompiles) +INCLUDE (CheckCXXSourceCompiles) +INCLUDE (CheckStructHasMember) +INCLUDE (CheckLibraryExists) +INCLUDE (CheckFunctionExists) +INCLUDE (CheckCCompilerFlag) +INCLUDE (CheckCSourceRuns) + + +# Sometimes it is handy to know if PIC option +# is set, to avoid recompilation of the same source +# for shared libs. We also allow it as an option for +# fast compile. +IF(UNIX) + IF(APPLE) + # OSX executable are always PIC + SET(WITH_PIC ON) + ELSE() + OPTION(WITH_PIC "Generate PIC objects" OFF) + IF(WITH_PIC) + SET(CMAKE_C_FLAGS + "${CMAKE_C_FLAGS} ${CMAKE_SHARED_LIBRARY_C_FLAGS}") + SET(CMAKE_CXX_FLAGS + "${CMAKE_CXX_FLAGS} ${CMAKE_SHARED_LIBRARY_CXX_FLAGS}") + ENDIF() + ENDIF() +ENDIF() + + +# +# Tests for OS +IF (CMAKE_SYSTEM_NAME MATCHES "Linux") + SET(TARGET_OS_LINUX 1) + SET(HAVE_NPTL 1) +ELSEIF(CMAKE_SYSTEM_NAME MATCHES "SunOS") + SET(TARGET_OS_SOLARIS 1) +ENDIF() + + +# OS display name (version_compile_os etc). +# Used by the test suite to ignore bugs on some platforms, +# typically on Windows. +IF(WIN32) + IF(CMAKE_SIZEOF_VOID_P MATCHES 8) + SET(SYSTEM_TYPE "Win64") + ELSE() + SET(SYSTEM_TYPE "Win32") + ENDIF() +ELSE() + IF(PLATFORM) + SET(SYSTEM_TYPE ${PLATFORM}) + ELSE() + SET(SYSTEM_TYPE ${CMAKE_SYSTEM_NAME}) + ENDIF() +ENDIF() + + +# Intel compiler is almost Visual C++ +# (same compile flags etc). Set MSVC flag +IF(WIN32 AND CMAKE_C_COMPILER MATCHES "icl") + SET(MSVC TRUE) +ENDIF() + +IF(CMAKE_COMPILER_IS_GNUCXX) + SET(CMAKE_CXX_FLAGS + "${CMAKE_CXX_FLAGS} -fno-implicit-templates -fno-exceptions -fno-rtti") + IF(CMAKE_CXX_FLAGS) + STRING(REGEX MATCH "fno-implicit-templates" NO_IMPLICIT_TEMPLATES + ${CMAKE_CXX_FLAGS}) + IF (NO_IMPLICIT_TEMPLATES) + SET(HAVE_EXPLICIT_TEMPLATE_INSTANTIATION TRUE) + ENDIF() + ENDIF() + IF(MINGW AND CMAKE_SIZEOF_VOIDP EQUAL 4) + # mininal architecture flags, i486 enables GCC atomics + ADD_DEFINITIONS(-march=i486) + ENDIF() +ENDIF(CMAKE_COMPILER_IS_GNUCXX) + +IF(WIN32) + SET(CAN_CONVERT_STATIC_TO_SHARED_LIB 1) +ENDIF() + +# Large files +SET(_LARGEFILE_SOURCE 1) +IF(CMAKE_SYSTEM_NAME STREQUAL "HP-UX") + SET(_LARGEFILE64_SOURCE 1) + SET(_FILE_OFFSET_BITS 64) +ENDIF() +IF(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "SunOS" ) + SET(_FILE_OFFSET_BITS 64) +ENDIF() +IF(CMAKE_SYSTEM_NAME MATCHES "AIX" OR CMAKE_SYSTEM_NAME MATCHES "OS400") + SET(_LARGE_FILES 1) +ENDIF() + + + + +IF(MSVC) +# Enable debug info also in Release build, and create PDB to be able to analyze +# crashes + SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zi") + SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /Zi") + SET(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /debug") +ENDIF() + +IF(CMAKE_GENERATOR MATCHES "Visual Studio 7") + # VS2003 has a bug that prevents linking mysqld with module definition file + # (/DEF option for linker). Linker would incorrectly complain about multiply + # defined symbols. Workaround is to disable dynamic plugins, so /DEF is not + # used. + MESSAGE( + "Warning: Building MySQL with Visual Studio 2003.NET is no more supported.") + MESSAGE("Please use a newer version of Visual Studio.") + SET(WITHOUT_DYNAMIC_PLUGINS TRUE) + + # VS2003 needs the /Op compiler option to disable floating point + # optimizations + SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Op") + SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Op") + SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /Op") + SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /Op") + SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /Op") + SET(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} /Op") +ENDIF(CMAKE_GENERATOR MATCHES "Visual Studio 7") + + +IF(CMAKE_SYSTEM_NAME STREQUAL "HP-UX" ) + IF(CMAKE_SIZEOF_VOID_P EQUAL 4) + # HPUX linker crashes building plugins + SET(WITHOUT_DYNAMIC_PLUGINS TRUE) + ENDIF() + # If not PA-RISC make shared library suffix .so + # OS understands both .sl and .so. CMake would + # use .sl, however MySQL prefers .so + IF(NOT CMAKE_SYSTEM_PROCESSOR MATCHES "9000") + SET(CMAKE_SHARED_LIBRARY_SUFFIX ".so" CACHE INTERNAL "" FORCE) + SET(CMAKE_SHARED_MODULE_SUFFIX ".so" CACHE INTERNAL "" FORCE) + ENDIF() +ENDIF() + +#Some OS specific hacks +IF(CMAKE_SYSTEM_NAME MATCHES "FreeBSD") + ADD_DEFINITIONS(-DNET_RETRY_COUNT=1000000) +ELSEIF(CMAKE_SYSTEM MATCHES "HP-UX" AND CMAKE_SYSTEM MATCHES "11") + ADD_DEFINITIONS(-DHPUX11) +ENDIF() + +# Disable warnings in Visual Studio 8 and above +IF(MSVC AND NOT CMAKE_GENERATOR MATCHES "Visual Studio 7") + #TODO: update the code and remove the disabled warnings + ADD_DEFINITIONS(/wd4800 /wd4805) + ADD_DEFINITIONS(/wd4996) +ENDIF() + + +# Settings for Visual Studio 7 and above. +IF(MSVC) + # replace /MDd with /MTd + STRING(REPLACE "/MD" "/MT" CMAKE_C_FLAGS_RELEASE ${CMAKE_C_FLAGS_RELEASE}) + STRING(REPLACE "/MD" "/MT" CMAKE_C_FLAGS_RELWITHDEBINFO ${CMAKE_C_FLAGS_RELWITHDEBINFO}) + STRING(REPLACE "/MDd" "/MTd" CMAKE_C_FLAGS_DEBUG ${CMAKE_C_FLAGS_DEBUG}) + STRING(REPLACE "/MDd" "/MTd" CMAKE_C_FLAGS_DEBUG_INIT ${CMAKE_C_FLAGS_DEBUG_INIT}) + + STRING(REPLACE "/MD" "/MT" CMAKE_CXX_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE}) + STRING(REPLACE "/MD" "/MT" CMAKE_CXX_FLAGS_RELWITHDEBINFO ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}) + STRING(REPLACE "/MDd" "/MTd" CMAKE_CXX_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG}) + STRING(REPLACE "/MDd" "/MTd" CMAKE_CXX_FLAGS_DEBUG_INIT ${CMAKE_CXX_FLAGS_DEBUG_INIT}) + + # generate map files, set stack size (see bug#20815) + SET(thread_stack_size 1048576) + SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /STACK:${thread_stack_size}") + ADD_DEFINITIONS(-DPTHREAD_STACK_MIN=${thread_stack_size}) + + # remove support for Exception handling + STRING(REPLACE "/GX" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) + STRING(REPLACE "/EHsc" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) + STRING(REPLACE "/EHsc" "" CMAKE_CXX_FLAGS_INIT ${CMAKE_CXX_FLAGS_INIT}) + STRING(REPLACE "/EHsc" "" CMAKE_CXX_FLAGS_DEBUG_INIT ${CMAKE_CXX_FLAGS_DEBUG_INIT}) + + # Mark 32 bit executables large address aware so they can + # use > 2GB address space + IF(CMAKE_SIZEOF_VOID_P MATCHES 4) + SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LARGEADDRESSAWARE") + ENDIF(CMAKE_SIZEOF_VOID_P MATCHES 4) +ENDIF(MSVC) + +IF(WIN32) + ADD_DEFINITIONS("-D_WINDOWS -D__WIN__ -D_CRT_SECURE_NO_DEPRECATE") + ADD_DEFINITIONS("-D_WIN32_WINNT=0x0501") + # Speed up build process excluding unused header files + ADD_DEFINITIONS("-DWIN32_LEAN_AND_MEAN") + IF (MSVC_VERSION GREATER 1400) + # Speed up multiprocessor build + ADD_DEFINITIONS("/MP") + ENDIF() + + # default to x86 platform. We'll check for X64 in a bit + SET (PLATFORM X86) + IF(MSVC AND CMAKE_SIZEOF_VOID_P MATCHES 8) + # _WIN64 is defined by the compiler itself. + # Yet, we define it here again to work around a bug with Intellisense + # described here: http://tinyurl.com/2cb428. + # Syntax highlighting is important for proper debugger functionality. + ADD_DEFINITIONS("-D_WIN64") + SET (PLATFORM X64) + ENDIF() +ENDIF() + + + +# Figure out what engines to build and how (statically or dynamically), +# add preprocessor defines for storage engines. +IF(WITHOUT_DYNAMIC_PLUGINS) + MESSAGE("Dynamic plugins are disabled.") +ENDIF(WITHOUT_DYNAMIC_PLUGINS) + + +# Perform machine tests on posix platforms only +IF(WIN32) + SET(SYSTEM_LIBS ws2_32) + SET(CMAKE_REQUIRED_INCLUDES "winsock2.h;ws2tcpip.h") + SET(CMAKE_REQUIRED_DEFINITONS "-D_WIN32_WINNT=0x0501") + SET(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ws2_32) + LINK_LIBRARIES(ws2_32) +ENDIF() + + + +MACRO(MY_CHECK_LIB func lib found) + SET(${found} 0) + CHECK_FUNCTION_EXISTS(${func} HAVE_${func}_IN_LIBC) + CHECK_LIBRARY_EXISTS(${lib} ${func} "" HAVE_${func}_IN_${lib}) + IF (HAVE_${func}_IN_${lib}) + SET(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${lib}) + LINK_LIBRARIES(${lib}) + STRING(TOUPPER ${lib} upper_lib) + SET(HAVE_LIB${upper_lib} 1 CACHE INTERNAL "Library check") + SET(${found} 1) + ENDIF() +ENDMACRO() + +MACRO(MY_SEARCH_LIBS func lib found) + SET(${found} 0) + CHECK_FUNCTION_EXISTS(${func} HAVE_${func}_IN_LIBC) + IF(NOT HAVE_${func}_IN_LIBC) + MY_CHECK_LIB(${func} ${lib} ${found}) + ELSE() + SET(${found} 1) + ENDIF() +ENDMACRO() + +IF(UNIX) + MY_CHECK_LIB(floor m found) + IF(NOT found) + MY_CHECK_LIB( __infinity m found) + ENDIF() + MY_CHECK_LIB(gethostbyname_r nsl_r found) + IF (NOT found) + MY_CHECK_LIB(gethostbyname_r nsl found) + ENDIF() + MY_SEARCH_LIBS(bind bind found) + MY_SEARCH_LIBS(crypt crypt found) + MY_SEARCH_LIBS(setsockopt socket found) + MY_SEARCH_LIBS(aio_read rt found) + MY_SEARCH_LIBS(sched_yield posix4 found) + MY_CHECK_LIB(pthread_create pthread found) + MY_SEARCH_LIBS(dlopen dl found) + + OPTION(WITH_LIBWRAP "Compile with tcp wrappers support" OFF) + IF(WITH_LIBWRAP) + SET(SAVE_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}) + SET(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} wrap) + CHECK_C_SOURCE_COMPILES( + " + #include <tcpd.h> + int allow_severity = 0; + int deny_severity = 0; + int main() + { + hosts_access(0); + }" + HAVE_LIBWRAP) + SET(CMAKE_REQUIRED_LIBRARIES ${SAVE_CMAKE_REQUIRED_LIBRARIES}) + IF(HAVE_LIBWRAP) + SET(MYSYS_LIBWRAP_SOURCE ${CMAKE_SOURCE_DIR}/mysys/my_libwrap.c) + SET(LIBWRAP_LIBRARY "wrap") + ENDIF() + ENDIF() +ENDIF() + +IF (CMAKE_SYSTEM_NAME MATCHES "SunOS") + INCLUDE(CheckLibraryExists) + CHECK_LIBRARY_EXISTS(mtmalloc malloc "" HAVE_LIBMTMALLOC) + IF(HAVE_LIBMTMALLOC) + LINK_LIBRARIES(mtmalloc) + ENDIF() +ENDIF() + + +# Workaround for CMake bug#9051 +IF(CMAKE_OSX_SYSROOT) + SET(ENV{CMAKE_OSX_SYSROOT} ${CMAKE_OSX_SYSROOT}) +ENDIF() +IF(CMAKE_OSX_SYSROOT) + SET(ENV{MACOSX_DEPLOYMENT_TARGET} ${OSX_DEPLOYMENT_TARGET}) +ENDIF() + +# This macro is used only on Windows at the moment +# Some standard functions exist there under different +# names (e.g popen is _popen or strok_r is _strtok_s) +# If a replacement function exists, HAVE_FUNCTION is +# defined to 1. CMake variable <function_name> will also +# be defined to the replacement name. +# So for example, CHECK_FUNCTION_REPLACEMENT(popen _popen) +# will define HAVE_POPEN to 1 and set variable named popen +# to _popen. If the header template, one needs to have +# cmakedefine popen @popen@ which will expand to +# define popen _popen after CONFIGURE_FILE + +MACRO(CHECK_FUNCTION_REPLACEMENT function replacement) + STRING(TOUPPER ${function} function_upper) + CHECK_FUNCTION_EXISTS(${function} HAVE_${function_upper}) + IF(NOT HAVE_${function_upper}) + CHECK_FUNCTION_EXISTS(${replacement} HAVE_${replacement}) + IF(HAVE_${replacement}) + SET(HAVE_${function_upper} 1 ) + SET(${function} ${replacement}) + ENDIF() + ENDIF() +ENDMACRO() + +MACRO(CHECK_SYMBOL_REPLACEMENT symbol replacement header) + STRING(TOUPPER ${symbol} symbol_upper) + CHECK_SYMBOL_EXISTS(${symbol} ${header} HAVE_${symbol_upper}) + IF(NOT HAVE_${symbol_upper}) + CHECK_SYMBOL_EXISTS(${replacement} ${header} HAVE_${replacement}) + IF(HAVE_${replacement}) + SET(HAVE_${symbol_upper} 1) + SET(${symbol} ${replacement}) + ENDIF() + ENDIF() +ENDMACRO() + + +MACRO(CHECK_INCLUDE_FILES_UNIX INCLUDES VAR) +IF(UNIX) + CHECK_INCLUDE_FILES ("${INCLUDES}" ${VAR}) +ENDIF() +ENDMACRO() + +MACRO(CHECK_C_SOURCE_COMPILES_UNIX SRC VAR) +IF(UNIX) + CHECK_C_SOURCE_COMPILES("${SRC}" ${VAR}) +ENDIF() +ENDMACRO() + +MACRO(CHECK_CXX_SOURCE_COMPILES_UNIX SRC VAR) +IF(UNIX) + CHECK_CXX_SOURCE_COMPILES("${SRC}" ${VAR}) +ENDIF() +ENDMACRO() + +MACRO(CHECK_FUNCTION_EXISTS_UNIX FUNC VAR) +IF(UNIX) + CHECK_FUNCTION_EXISTS("${FUNC}" ${VAR}) +ENDIF() +ENDMACRO() + +MACRO (CHECK_SYMBOL_EXISTS_UNIX SYM HEADER VAR) +IF(UNIX) + CHECK_SYMBOL_EXISTS("${SYM}" "${HEADER}" ${VAR}) +ENDIF() +ENDMACRO() + +# +# Tests for header files +# +INCLUDE (CheckIncludeFiles) + +CHECK_INCLUDE_FILES ("stdlib.h;stdarg.h;string.h;float.h" STDC_HEADERS) +CHECK_INCLUDE_FILES (sys/types.h HAVE_SYS_TYPES_H) +CHECK_INCLUDE_FILES_UNIX (alloca.h HAVE_ALLOCA_H) +CHECK_INCLUDE_FILES_UNIX (aio.h HAVE_AIO_H) +CHECK_INCLUDE_FILES_UNIX (arpa/inet.h HAVE_ARPA_INET_H) +CHECK_INCLUDE_FILES_UNIX (crypt.h HAVE_CRYPT_H) +CHECK_INCLUDE_FILES (dirent.h HAVE_DIRENT_H) +CHECK_INCLUDE_FILES_UNIX (dlfcn.h HAVE_DLFCN_H) +CHECK_INCLUDE_FILES_UNIX (execinfo.h HAVE_EXECINFO_H) +CHECK_INCLUDE_FILES (fcntl.h HAVE_FCNTL_H) +CHECK_INCLUDE_FILES (fenv.h HAVE_FENV_H) +CHECK_INCLUDE_FILES (float.h HAVE_FLOAT_H) +CHECK_INCLUDE_FILES_UNIX (floatingpoint.h HAVE_FLOATINGPOINT_H) +CHECK_INCLUDE_FILES_UNIX (fpu_control.h HAVE_FPU_CONTROL_H) +CHECK_INCLUDE_FILES_UNIX (grp.h HAVE_GRP_H) +CHECK_INCLUDE_FILES_UNIX (ieeefp.h HAVE_IEEEFP_H) +CHECK_INCLUDE_FILES (inttypes.h HAVE_INTTYPES_H) +CHECK_INCLUDE_FILES_UNIX (langinfo.h HAVE_LANGINFO_H) +CHECK_INCLUDE_FILES (limits.h HAVE_LIMITS_H) +CHECK_INCLUDE_FILES (locale.h HAVE_LOCALE_H) +CHECK_INCLUDE_FILES (malloc.h HAVE_MALLOC_H) +CHECK_INCLUDE_FILES (memory.h HAVE_MEMORY_H) +CHECK_INCLUDE_FILES_UNIX (netinet/in.h HAVE_NETINET_IN_H) +CHECK_INCLUDE_FILES_UNIX (paths.h HAVE_PATHS_H) +CHECK_INCLUDE_FILES_UNIX (port.h HAVE_PORT_H) +CHECK_INCLUDE_FILES_UNIX (pwd.h HAVE_PWD_H) +CHECK_INCLUDE_FILES_UNIX (sched.h HAVE_SCHED_H) +CHECK_INCLUDE_FILES_UNIX (select.h HAVE_SELECT_H) +CHECK_INCLUDE_FILES_UNIX (semaphore.h HAVE_SEMAPHORE_H) +CHECK_INCLUDE_FILES_UNIX (sys/dir.h HAVE_SYS_DIR_H) +CHECK_INCLUDE_FILES_UNIX (sys/pte.h HAVE_SYS_PTE_H) +CHECK_INCLUDE_FILES_UNIX (sys/ptem.h HAVE_SYS_PTEM_H) +CHECK_INCLUDE_FILES (stddef.h HAVE_STDDEF_H) +CHECK_INCLUDE_FILES (stdint.h HAVE_STDINT_H) +CHECK_INCLUDE_FILES (stdlib.h HAVE_STDLIB_H) +CHECK_INCLUDE_FILES (strings.h HAVE_STRINGS_H) +CHECK_INCLUDE_FILES (string.h HAVE_STRING_H) +CHECK_INCLUDE_FILES_UNIX (synch.h HAVE_SYNCH_H) +CHECK_INCLUDE_FILES_UNIX (sysent.h HAVE_SYSENT_H) +CHECK_INCLUDE_FILES_UNIX (sys/cdefs.h HAVE_SYS_CDEFS_H) +CHECK_INCLUDE_FILES_UNIX (sys/file.h HAVE_SYS_FILE_H) +CHECK_INCLUDE_FILES_UNIX (sys/fpu.h HAVE_SYS_FPU_H) +CHECK_INCLUDE_FILES_UNIX (sys/ioctl.h HAVE_SYS_IOCTL_H) +CHECK_INCLUDE_FILES_UNIX (sys/ipc.h HAVE_SYS_IPC_H) +CHECK_INCLUDE_FILES_UNIX (sys/malloc.h HAVE_SYS_MALLOC_H) +CHECK_INCLUDE_FILES_UNIX (sys/mman.h HAVE_SYS_MMAN_H) +CHECK_INCLUDE_FILES_UNIX (sys/prctl.h HAVE_SYS_PRCTL_H) +CHECK_INCLUDE_FILES_UNIX (sys/resource.h HAVE_SYS_RESOURCE_H) +CHECK_INCLUDE_FILES_UNIX (sys/select.h HAVE_SYS_SELECT_H) +CHECK_INCLUDE_FILES_UNIX (sys/shm.h HAVE_SYS_SHM_H) +CHECK_INCLUDE_FILES_UNIX (sys/socket.h HAVE_SYS_SOCKET_H) +CHECK_INCLUDE_FILES (sys/stat.h HAVE_SYS_STAT_H) +CHECK_INCLUDE_FILES_UNIX (sys/stream.h HAVE_SYS_STREAM_H) +CHECK_INCLUDE_FILES_UNIX (sys/termcap.h HAVE_SYS_TERMCAP_H) +CHECK_INCLUDE_FILES ("time.h;sys/timeb.h" HAVE_SYS_TIMEB_H) +CHECK_INCLUDE_FILES_UNIX ("curses.h;term.h" HAVE_TERM_H) +CHECK_INCLUDE_FILES_UNIX (termios.h HAVE_TERMIOS_H) +CHECK_INCLUDE_FILES_UNIX (termio.h HAVE_TERMIO_H) +CHECK_INCLUDE_FILES_UNIX (termcap.h HAVE_TERMCAP_H) +CHECK_INCLUDE_FILES_UNIX (unistd.h HAVE_UNISTD_H) +CHECK_INCLUDE_FILES (utime.h HAVE_UTIME_H) +CHECK_INCLUDE_FILES (varargs.h HAVE_VARARGS_H) +CHECK_INCLUDE_FILES (sys/time.h HAVE_SYS_TIME_H) +CHECK_INCLUDE_FILES (sys/utime.h HAVE_SYS_UTIME_H) +CHECK_INCLUDE_FILES_UNIX (sys/wait.h HAVE_SYS_WAIT_H) +CHECK_INCLUDE_FILES_UNIX (sys/param.h HAVE_SYS_PARAM_H) +CHECK_INCLUDE_FILES_UNIX (sys/vadvise.h HAVE_SYS_VADVISE_H) +CHECK_INCLUDE_FILES_UNIX (fnmatch.h HAVE_FNMATCH_H) +CHECK_INCLUDE_FILES (stdarg.h HAVE_STDARG_H) + +# sys/un.h is broken on Linux and Solaris +# It cannot be included alone ( it references types +# defined in stdlib.h, i.e size_t) +CHECK_C_SOURCE_COMPILES_UNIX(" +#include <stdlib.h> +#include <sys/un.h> +int main() +{ + return 0; +} +" +HAVE_SYS_UN_H) + +# +# Figure out threading library +# +FIND_PACKAGE (Threads) + +# +# Tests for functions +# +#CHECK_FUNCTION_EXISTS (aiowait HAVE_AIOWAIT) +CHECK_FUNCTION_EXISTS_UNIX (aio_read HAVE_AIO_READ) +CHECK_FUNCTION_EXISTS_UNIX (alarm HAVE_ALARM) +SET(HAVE_ALLOCA 1) +CHECK_FUNCTION_EXISTS_UNIX (backtrace HAVE_BACKTRACE) +CHECK_FUNCTION_EXISTS_UNIX (backtrace_symbols HAVE_BACKTRACE_SYMBOLS) +CHECK_FUNCTION_EXISTS_UNIX (backtrace_symbols_fd HAVE_BACKTRACE_SYMBOLS_FD) +CHECK_FUNCTION_EXISTS_UNIX (bcmp HAVE_BCMP) +CHECK_FUNCTION_EXISTS_UNIX (bfill HAVE_BFILL) +CHECK_FUNCTION_EXISTS_UNIX (bmove HAVE_BMOVE) +CHECK_FUNCTION_EXISTS (bsearch HAVE_BSEARCH) +CHECK_FUNCTION_EXISTS (index HAVE_INDEX) +CHECK_FUNCTION_EXISTS_UNIX (bzero HAVE_BZERO) +CHECK_FUNCTION_EXISTS_UNIX (clock_gettime HAVE_CLOCK_GETTIME) +CHECK_FUNCTION_EXISTS_UNIX (cuserid HAVE_CUSERID) +CHECK_FUNCTION_EXISTS_UNIX (directio HAVE_DIRECTIO) +CHECK_FUNCTION_EXISTS_UNIX (_doprnt HAVE_DOPRNT) +CHECK_FUNCTION_EXISTS_UNIX (flockfile HAVE_FLOCKFILE) +CHECK_FUNCTION_EXISTS_UNIX (ftruncate HAVE_FTRUNCATE) +CHECK_FUNCTION_EXISTS_UNIX (getline HAVE_GETLINE) +CHECK_FUNCTION_EXISTS_UNIX (compress HAVE_COMPRESS) +CHECK_FUNCTION_EXISTS_UNIX (crypt HAVE_CRYPT) +CHECK_FUNCTION_EXISTS_UNIX (dlerror HAVE_DLERROR) +CHECK_FUNCTION_EXISTS_UNIX (dlopen HAVE_DLOPEN) +IF (CMAKE_COMPILER_IS_GNUCC) + IF (CMAKE_EXE_LINKER_FLAGS MATCHES " -static " + OR CMAKE_EXE_LINKER_FLAGS MATCHES " -static$") + SET(HAVE_DLOPEN FALSE CACHE "Disable dlopen due to -static flag" FORCE) + SET(WITHOUT_DYNAMIC_PLUGINS TRUE) + ENDIF() +ENDIF() +CHECK_FUNCTION_EXISTS_UNIX (fchmod HAVE_FCHMOD) +CHECK_FUNCTION_EXISTS_UNIX (fcntl HAVE_FCNTL) +CHECK_FUNCTION_EXISTS_UNIX (fconvert HAVE_FCONVERT) +CHECK_FUNCTION_EXISTS_UNIX (fdatasync HAVE_FDATASYNC) +CHECK_FUNCTION_EXISTS_UNIX (fesetround HAVE_FESETROUND) +CHECK_FUNCTION_EXISTS_UNIX (fpsetmask HAVE_FPSETMASK) +CHECK_FUNCTION_EXISTS_UNIX (fseeko HAVE_FSEEKO) +CHECK_FUNCTION_EXISTS_UNIX (fsync HAVE_FSYNC) +CHECK_FUNCTION_EXISTS (getcwd HAVE_GETCWD) +CHECK_FUNCTION_EXISTS_UNIX (gethostbyaddr_r HAVE_GETHOSTBYADDR_R) +CHECK_FUNCTION_EXISTS_UNIX (gethostbyname_r HAVE_GETHOSTBYNAME_R) +CHECK_FUNCTION_EXISTS_UNIX (gethrtime HAVE_GETHRTIME) +CHECK_FUNCTION_EXISTS (getnameinfo HAVE_GETNAMEINFO) +CHECK_FUNCTION_EXISTS_UNIX (getpass HAVE_GETPASS) +CHECK_FUNCTION_EXISTS_UNIX (getpassphrase HAVE_GETPASSPHRASE) +CHECK_FUNCTION_EXISTS_UNIX (getpwnam HAVE_GETPWNAM) +CHECK_FUNCTION_EXISTS_UNIX (getpwuid HAVE_GETPWUID) +CHECK_FUNCTION_EXISTS_UNIX (getrlimit HAVE_GETRLIMIT) +CHECK_FUNCTION_EXISTS_UNIX (getrusage HAVE_GETRUSAGE) +CHECK_FUNCTION_EXISTS_UNIX (getwd HAVE_GETWD) +CHECK_FUNCTION_EXISTS_UNIX (gmtime_r HAVE_GMTIME_R) +CHECK_FUNCTION_EXISTS_UNIX (initgroups HAVE_INITGROUPS) +CHECK_FUNCTION_EXISTS_UNIX (issetugid HAVE_ISSETUGID) +CHECK_FUNCTION_EXISTS (ldiv HAVE_LDIV) +CHECK_FUNCTION_EXISTS_UNIX (localtime_r HAVE_LOCALTIME_R) +CHECK_FUNCTION_EXISTS (longjmp HAVE_LONGJMP) +CHECK_FUNCTION_EXISTS (lstat HAVE_LSTAT) +CHECK_FUNCTION_EXISTS_UNIX (madvise HAVE_MADVISE) +CHECK_FUNCTION_EXISTS_UNIX (mallinfo HAVE_MALLINFO) +CHECK_FUNCTION_EXISTS (memcpy HAVE_MEMCPY) +CHECK_FUNCTION_EXISTS (memmove HAVE_MEMMOVE) +CHECK_FUNCTION_EXISTS (mkstemp HAVE_MKSTEMP) +CHECK_FUNCTION_EXISTS_UNIX (mlock HAVE_MLOCK) +CHECK_FUNCTION_EXISTS_UNIX (mlockall HAVE_MLOCKALL) +CHECK_FUNCTION_EXISTS_UNIX (mmap HAVE_MMAP) +CHECK_FUNCTION_EXISTS_UNIX (mmap64 HAVE_MMAP64) +CHECK_FUNCTION_EXISTS (perror HAVE_PERROR) +CHECK_FUNCTION_EXISTS_UNIX (poll HAVE_POLL) +CHECK_FUNCTION_EXISTS_UNIX (port_create HAVE_PORT_CREATE) +CHECK_FUNCTION_EXISTS_UNIX (posix_fallocate HAVE_POSIX_FALLOCATE) +CHECK_FUNCTION_EXISTS_UNIX (pread HAVE_PREAD) +CHECK_FUNCTION_EXISTS_UNIX (pthread_attr_create HAVE_PTHREAD_ATTR_CREATE) +CHECK_FUNCTION_EXISTS_UNIX (pthread_attr_getstacksize HAVE_PTHREAD_ATTR_GETSTACKSIZE) +CHECK_FUNCTION_EXISTS_UNIX (pthread_attr_setprio HAVE_PTHREAD_ATTR_SETPRIO) +CHECK_FUNCTION_EXISTS_UNIX (pthread_attr_setschedparam + HAVE_PTHREAD_ATTR_SETSCHEDPARAM) +CHECK_FUNCTION_EXISTS_UNIX (pthread_attr_setscope HAVE_PTHREAD_ATTR_SETSCOPE) +CHECK_FUNCTION_EXISTS_UNIX (pthread_attr_setstacksize HAVE_PTHREAD_ATTR_SETSTACKSIZE) +CHECK_FUNCTION_EXISTS_UNIX (pthread_condattr_create HAVE_PTHREAD_CONDATTR_CREATE) +CHECK_FUNCTION_EXISTS_UNIX (pthread_condattr_setclock HAVE_PTHREAD_CONDATTR_SETCLOCK) +CHECK_FUNCTION_EXISTS_UNIX (pthread_init HAVE_PTHREAD_INIT) +CHECK_FUNCTION_EXISTS_UNIX (pthread_key_delete HAVE_PTHREAD_KEY_DELETE) +CHECK_FUNCTION_EXISTS_UNIX (pthread_rwlock_rdlock HAVE_PTHREAD_RWLOCK_RDLOCK) +CHECK_FUNCTION_EXISTS_UNIX (pthread_setprio_np HAVE_PTHREAD_SETPRIO_NP) +CHECK_FUNCTION_EXISTS_UNIX (pthread_setschedparam HAVE_PTHREAD_SETSCHEDPARAM) +CHECK_FUNCTION_EXISTS_UNIX (pthread_sigmask HAVE_PTHREAD_SIGMASK) +CHECK_FUNCTION_EXISTS_UNIX (pthread_threadmask HAVE_PTHREAD_THREADMASK) +CHECK_FUNCTION_EXISTS_UNIX (pthread_yield_np HAVE_PTHREAD_YIELD_NP) +CHECK_FUNCTION_EXISTS (putenv HAVE_PUTENV) +CHECK_FUNCTION_EXISTS_UNIX (readdir_r HAVE_READDIR_R) +CHECK_FUNCTION_EXISTS_UNIX (readlink HAVE_READLINK) +CHECK_FUNCTION_EXISTS_UNIX (re_comp HAVE_RE_COMP) +CHECK_FUNCTION_EXISTS_UNIX (regcomp HAVE_REGCOMP) +CHECK_FUNCTION_EXISTS_UNIX (realpath HAVE_REALPATH) +CHECK_FUNCTION_EXISTS (rename HAVE_RENAME) +CHECK_FUNCTION_EXISTS_UNIX (rwlock_init HAVE_RWLOCK_INIT) +CHECK_FUNCTION_EXISTS_UNIX (sched_yield HAVE_SCHED_YIELD) +CHECK_FUNCTION_EXISTS_UNIX (setenv HAVE_SETENV) +CHECK_FUNCTION_EXISTS (setlocale HAVE_SETLOCALE) +CHECK_FUNCTION_EXISTS_UNIX (setfd HAVE_SETFD) +CHECK_FUNCTION_EXISTS_UNIX (sigaction HAVE_SIGACTION) +CHECK_FUNCTION_EXISTS_UNIX (sigthreadmask HAVE_SIGTHREADMASK) +CHECK_FUNCTION_EXISTS_UNIX (sigwait HAVE_SIGWAIT) +CHECK_FUNCTION_EXISTS_UNIX (sigaddset HAVE_SIGADDSET) +CHECK_FUNCTION_EXISTS_UNIX (sigemptyset HAVE_SIGEMPTYSET) +CHECK_FUNCTION_EXISTS_UNIX (sighold HAVE_SIGHOLD) +CHECK_FUNCTION_EXISTS_UNIX (sigset HAVE_SIGSET) +CHECK_FUNCTION_EXISTS_UNIX (sleep HAVE_SLEEP) +CHECK_FUNCTION_EXISTS (snprintf HAVE_SNPRINTF) +CHECK_FUNCTION_EXISTS_UNIX (stpcpy HAVE_STPCPY) +CHECK_FUNCTION_EXISTS (strcoll HAVE_STRCOLL) +CHECK_FUNCTION_EXISTS (strerror HAVE_STRERROR) +CHECK_FUNCTION_EXISTS_UNIX (strlcpy HAVE_STRLCPY) +CHECK_FUNCTION_EXISTS (strnlen HAVE_STRNLEN) +CHECK_FUNCTION_EXISTS_UNIX (strlcat HAVE_STRLCAT) +CHECK_FUNCTION_EXISTS_UNIX (strsignal HAVE_STRSIGNAL) +CHECK_FUNCTION_EXISTS_UNIX (fgetln HAVE_FGETLN) +CHECK_FUNCTION_EXISTS (strpbrk HAVE_STRPBRK) +CHECK_FUNCTION_EXISTS (strsep HAVE_STRSEP) +CHECK_FUNCTION_EXISTS (strstr HAVE_STRSTR) +CHECK_FUNCTION_EXISTS_UNIX (strtok_r HAVE_STRTOK_R) +CHECK_FUNCTION_EXISTS (strtol HAVE_STRTOL) +CHECK_FUNCTION_EXISTS (strtoll HAVE_STRTOLL) +CHECK_FUNCTION_EXISTS (strtoul HAVE_STRTOUL) +CHECK_FUNCTION_EXISTS (strtoull HAVE_STRTOULL) +CHECK_FUNCTION_EXISTS (strcasecmp HAVE_STRCASECMP) +CHECK_FUNCTION_EXISTS (strncasecmp HAVE_STRNCASECMP) +CHECK_FUNCTION_EXISTS (strdup HAVE_STRDUP) +CHECK_FUNCTION_EXISTS_UNIX (shmat HAVE_SHMAT) +CHECK_FUNCTION_EXISTS_UNIX (shmctl HAVE_SHMCTL) +CHECK_FUNCTION_EXISTS_UNIX (shmdt HAVE_SHMDT) +CHECK_FUNCTION_EXISTS_UNIX (shmget HAVE_SHMGET) +CHECK_FUNCTION_EXISTS (tell HAVE_TELL) +CHECK_FUNCTION_EXISTS (tempnam HAVE_TEMPNAM) +CHECK_FUNCTION_EXISTS_UNIX (thr_setconcurrency HAVE_THR_SETCONCURRENCY) +CHECK_FUNCTION_EXISTS_UNIX (thr_yield HAVE_THR_YIELD) +CHECK_FUNCTION_EXISTS_UNIX (vasprintf HAVE_VASPRINTF) +CHECK_FUNCTION_EXISTS (vsnprintf HAVE_VSNPRINTF) +CHECK_FUNCTION_EXISTS_UNIX (vprintf HAVE_VPRINTF) +CHECK_FUNCTION_EXISTS_UNIX (valloc HAVE_VALLOC) +CHECK_FUNCTION_EXISTS_UNIX (memalign HAVE_MEMALIGN) +CHECK_FUNCTION_EXISTS_UNIX (chown HAVE_CHOWN) +CHECK_FUNCTION_EXISTS_UNIX (nl_langinfo HAVE_NL_LANGINFO) + + +# +# Tests for symbols +# +INCLUDE (CheckSymbolExists) +CHECK_SYMBOL_EXISTS_UNIX(sys_errlist "stdio.h" HAVE_SYS_ERRLIST) +CHECK_SYMBOL_EXISTS_UNIX(madvise "sys/mman.h" HAVE_DECL_MADVISE) +CHECK_SYMBOL_EXISTS_UNIX(tzname "time.h" HAVE_TZNAME) +CHECK_SYMBOL_EXISTS(lrand48 "stdlib.h" HAVE_LRAND48) +CHECK_SYMBOL_EXISTS_UNIX(getpagesize "unistd.h" HAVE_GETPAGESIZE) +CHECK_SYMBOL_EXISTS_UNIX(TIOCGWINSZ "sys/ioctl.h" GWINSZ_IN_SYS_IOCTL) +CHECK_SYMBOL_EXISTS_UNIX(FIONREAD "sys/ioctl.h" FIONREAD_IN_SYS_IOCTL) +CHECK_SYMBOL_EXISTS_UNIX(TIOCSTAT "sys/ioctl.h" TIOCSTAT_IN_SYS_IOCTL) +CHECK_SYMBOL_EXISTS(gettimeofday "sys/time.h" HAVE_GETTIMEOFDAY) + +CHECK_SYMBOL_EXISTS(finite "math.h" HAVE_FINITE_IN_MATH_H) +IF(HAVE_FINITE_IN_MATH_H) + SET(HAVE_FINITE TRUE CACHE INTERNAL "") +ELSE() + CHECK_SYMBOL_EXISTS(finite "ieeefp.h" HAVE_FINITE) +ENDIF() +CHECK_SYMBOL_EXISTS(log2 "math.h" HAVE_LOG2) + + + +# +# Test for endianess +# +INCLUDE(TestBigEndian) +IF(APPLE) + # Care for universal binary format + SET(WORDS_BIGENDIAN __BIG_ENDIAN CACHE INTERNAL "big endian test") +ELSE() + TEST_BIG_ENDIAN(WORDS_BIGENDIAN) +ENDIF() + +# +# Tests for type sizes (and presence) +# +INCLUDE (CheckTypeSize) +set(CMAKE_REQUIRED_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} + -D_LARGEFILE_SOURCE -D_LARGE_FILES -D_FILE_OFFSET_BITS=64 + -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS) +SET(CMAKE_EXTRA_INCLUDE_FILES signal.h) +CHECK_TYPE_SIZE(sigset_t SIZEOF_SIGSET_T) +IF(SIZEOF_SIGSET_T) + SET(HAVE_SIGSET_T 1) +ENDIF() +IF(NOT SIZEOF_SIGSET_T) + SET(sigset_t int) +ENDIF() +CHECK_TYPE_SIZE(mode_t SIZEOF_MODE_T) +IF(NOT SIZEOF_MODE_T) + SET(mode_t int) +ENDIF() + + +IF(HAVE_STDINT_H) + SET(CMAKE_EXTRA_INCLUDE_FILES stdint.h) +ENDIF(HAVE_STDINT_H) +CHECK_TYPE_SIZE(char SIZEOF_CHAR) +CHECK_TYPE_SIZE("char *" SIZEOF_CHARP) +CHECK_TYPE_SIZE(short SIZEOF_SHORT) +CHECK_TYPE_SIZE(int SIZEOF_INT) +CHECK_TYPE_SIZE(long SIZEOF_LONG) +CHECK_TYPE_SIZE("long long" SIZEOF_LONG_LONG) +SET(CMAKE_EXTRA_INCLUDE_FILES stdio.h) +CHECK_TYPE_SIZE(size_t SIZEOF_SIZE_T) +SET(CMAKE_EXTRA_INCLUDE_FILES sys/types.h) +CHECK_TYPE_SIZE(off_t SIZEOF_OFF_T) +CHECK_TYPE_SIZE(uchar SIZEOF_UCHAR) +CHECK_TYPE_SIZE(uint SIZEOF_UINT) +CHECK_TYPE_SIZE(ulong SIZEOF_ULONG) +CHECK_TYPE_SIZE(int8 SIZEOF_INT8) +CHECK_TYPE_SIZE(uint8 SIZEOF_UINT8) +CHECK_TYPE_SIZE(int16 SIZEOF_INT16) +CHECK_TYPE_SIZE(uint16 SIZEOF_UINT16) +CHECK_TYPE_SIZE(int32 SIZEOF_INT32) +CHECK_TYPE_SIZE(uint32 SIZEOF_UINT32) +CHECK_TYPE_SIZE(u_int32_t SIZEOF_U_INT32_T) +CHECK_TYPE_SIZE(int64 SIZEOF_INT64) +CHECK_TYPE_SIZE(uint64 SIZEOF_UINT64) +SET (CMAKE_EXTRA_INCLUDE_FILES sys/types.h) +CHECK_TYPE_SIZE(bool SIZEOF_BOOL) +SET(CMAKE_EXTRA_INCLUDE_FILES) +IF(HAVE_SYS_SOCKET_H) + SET(CMAKE_EXTRA_INCLUDE_FILES sys/socket.h) +ENDIF(HAVE_SYS_SOCKET_H) +CHECK_TYPE_SIZE(socklen_t SIZEOF_SOCKLEN_T) +SET(CMAKE_EXTRA_INCLUDE_FILES) + +IF(HAVE_IEEEFP_H) + SET(CMAKE_EXTRA_INCLUDE_FILES ieeefp.h) + CHECK_TYPE_SIZE(fp_except SIZEOF_FP_EXCEPT) + IF(SIZEOF_FP_EXCEPT) + SET(HAVE_FP_EXCEPT TRUE) + ENDIF() +ENDIF() + + +# +# Code tests +# + +CHECK_C_SOURCE_COMPILES(" +#ifdef _WIN32 +#include <winsock2.h> +#include <ws2tcpip.h> +#else +#include <sys/types.h> +#include <sys/socket.h> +#include <netdb.h> +#endif +int main() +{ + getaddrinfo( 0, 0, 0, 0); + return 0; +}" +HAVE_GETADDRINFO) + +CHECK_C_SOURCE_COMPILES(" +#ifdef _WIN32 +#include <winsock2.h> +#include <ws2tcpip.h> +#else +#include <sys/types.h> +#include <sys/socket.h> +#include <netdb.h> +#endif +int main() +{ + select(0,0,0,0,0); + return 0; +}" +HAVE_SELECT) + +# +# Check if timespec has ts_sec and ts_nsec fields +# + +CHECK_C_SOURCE_COMPILES_UNIX(" +#include <pthread.h> + +int main(int ac, char **av) +{ + struct timespec abstime; + abstime.ts_sec = time(NULL)+1; + abstime.ts_nsec = 0; +} +" HAVE_TIMESPEC_TS_SEC) + + +# +# Check return type of qsort() +# +CHECK_C_SOURCE_COMPILES(" +#include <stdlib.h> +#ifdef __cplusplus +extern \"C\" +#endif +void qsort(void *base, size_t nel, size_t width, + int (*compar) (const void *, const void *)); +int main(int ac, char **av) {} +" QSORT_TYPE_IS_VOID) +IF(QSORT_TYPE_IS_VOID) + SET(RETQSORTTYPE "void") +ELSE(QSORT_TYPE_IS_VOID) + SET(RETQSORTTYPE "int") +ENDIF(QSORT_TYPE_IS_VOID) + +IF(WIN32) +SET(SOCKET_SIZE_TYPE int) +ELSE() +CHECK_CXX_SOURCE_COMPILES(" +#include <sys/socket.h> +int main(int argc, char **argv) +{ + getsockname(0,0,(socklen_t *) 0); + return 0; +}" +HAVE_SOCKET_SIZE_T_AS_socklen_t) + +IF(HAVE_SOCKET_SIZE_T_AS_socklen_t) + SET(SOCKET_SIZE_TYPE socklen_t) +ELSE() + CHECK_CXX_SOURCE_COMPILES(" + #include <sys/socket.h> + int main(int argc, char **argv) + { + getsockname(0,0,(int *) 0); + return 0; + }" + HAVE_SOCKET_SIZE_T_AS_int) + IF(HAVE_SOCKET_SIZE_T_AS_int) + SET(SOCKET_SIZE_TYPE int) + ELSE() + CHECK_CXX_SOURCE_COMPILES(" + #include <sys/socket.h> + int main(int argc, char **argv) + { + getsockname(0,0,(size_t *) 0); + return 0; + }" + HAVE_SOCKET_SIZE_T_AS_size_t) + IF(HAVE_SOCKET_SIZE_T_AS_size_t) + SET(SOCKET_SIZE_TYPE size_t) + ELSE() + SET(SOCKET_SIZE_TYPE int) + ENDIF() + ENDIF() +ENDIF() +ENDIF() + +CHECK_CXX_SOURCE_COMPILES_UNIX(" +#include <pthread.h> +int main() +{ + pthread_yield(); + return 0; +} +" HAVE_PTHREAD_YIELD_ZERO_ARG) + +IF(NOT STACK_DIRECTION) + IF(CMAKE_CROSSCOMPILING) + MESSAGE(FATAL_ERROR + "STACK_DIRECTION is not defined. Please specify -DSTACK_DIRECTION=1 " + "or -DSTACK_DIRECTION=-1 when calling cmake.") + ELSE() + TRY_RUN(STACKDIR_RUN_RESULT STACKDIR_COMPILE_RESULT + ${CMAKE_BINARY_DIR} + ${CMAKE_SOURCE_DIR}/cmake/stack_direction.c + ) + # Test program returns 0 (down) or 1 (up). + # Convert to -1 or 1 + IF(STACKDIR_RUN_RESULT EQUAL 0) + SET(STACK_DIRECTION -1 CACHE INTERNAL "Stack grows direction") + ELSE() + SET(STACK_DIRECTION 1 CACHE INTERNAL "Stack grows direction") + ENDIF() + MESSAGE(STATUS "Checking stack grows direction : ${STACK_DIRECTION}") + ENDIF() +ENDIF() + +# +# Check return type of signal handlers +# +CHECK_C_SOURCE_COMPILES(" +#include <signal.h> +#ifdef signal +# undef signal +#endif +#ifdef __cplusplus +extern \"C\" void (*signal (int, void (*)(int)))(int); +#else +void (*signal ()) (); +#endif +int main(int ac, char **av) {} +" SIGNAL_RETURN_TYPE_IS_VOID) +IF(SIGNAL_RETURN_TYPE_IS_VOID) + SET(RETSIGTYPE void) +ELSE(SIGNAL_RETURN_TYPE_IS_VOID) + SET(RETSIGTYPE int) +ENDIF(SIGNAL_RETURN_TYPE_IS_VOID) + +# +# isnan() is trickier than the usual function test -- it may be a macro +# +CHECK_CXX_SOURCE_COMPILES("#include <math.h> + int main(int ac, char **av) + { + isnan(0.0); + return 0; + }" + HAVE_ISNAN) + +# +# isinf() is trickier than the usual function test -- it may be a macro +# +CHECK_CXX_SOURCE_COMPILES("#include <math.h> + int main(int ac, char **av) + { + isinf(0.0); + return 0; + }" + HAVE_ISINF) +# +# rint() is trickier than the usual function test -- it may be a macro +# +CHECK_CXX_SOURCE_COMPILES("#include <math.h> + int main(int ac, char **av) + { + rint(0.0); + return 0; + }" + HAVE_RINT) + +CHECK_CXX_SOURCE_COMPILES(" + #include <time.h> + #include <sys/time.h> + int main() + { + return 0; + }" + TIME_WITH_SYS_TIME) + +IF(UNIX) +CHECK_C_SOURCE_COMPILES(" +#include <unistd.h> +#include <fcntl.h> +int main() +{ + fcntl(0, F_SETFL, O_NONBLOCK); + return 0; +} +" +HAVE_FCNTL_NONBLOCK) +ENDIF() + +IF(NOT HAVE_FCNTL_NONBLOCK) + SET(NO_FCNTL_NONBLOCK 1) +ENDIF() + +# +# Test for how the C compiler does inline, if at all +# +CHECK_C_SOURCE_COMPILES(" +static inline int foo(){return 0;} +int main(int argc, char *argv[]){return 0;}" + C_HAS_inline) +IF(NOT C_HAS_inline) + CHECK_C_SOURCE_COMPILES(" + static __inline int foo(){return 0;} + int main(int argc, char *argv[]){return 0;}" + C_HAS___inline) + SET(C_INLINE __inline) +ENDIF() + +IF(NOT CMAKE_CROSSCOMPILING AND NOT MSVC) + STRING(TOLOWER ${CMAKE_SYSTEM_PROCESSOR} processor) + IF(processor MATCHES "86" OR processor MATCHES "amd64" OR processor MATCHES "x64") + #Check for x86 PAUSE instruction + # We have to actually try running the test program, because of a bug + # in Solaris on x86_64, where it wrongly reports that PAUSE is not + # supported when trying to run an application. See + # http://bugs.opensolaris.org/bugdatabase/printableBug.do?bug_id=6478684 + CHECK_C_SOURCE_RUNS(" + int main() + { + __asm__ __volatile__ (\"pause\"); + return 0; + }" HAVE_PAUSE_INSTRUCTION) + ENDIF() + IF (NOT HAVE_PAUSE_INSTRUCTION) + CHECK_C_SOURCE_COMPILES(" + int main() + { + __asm__ __volatile__ (\"rep; nop\"); + return 0; + } + " HAVE_FAKE_PAUSE_INSTRUCTION) + ENDIF() +ENDIF() + + + + +CHECK_SYMBOL_EXISTS_UNIX(tcgetattr "termios.h" HAVE_TCGETATTR 1) +CHECK_INCLUDE_FILES_UNIX(sys/ioctl.h HAVE_SYS_IOCTL 1) + + +# +# Check type of signal routines (posix, 4.2bsd, 4.1bsd or v7) +# +CHECK_C_SOURCE_COMPILES_UNIX(" + #include <signal.h> + int main(int ac, char **av) + { + sigset_t ss; + struct sigaction sa; + sigemptyset(&ss); sigsuspend(&ss); + sigaction(SIGINT, &sa, (struct sigaction *) 0); + sigprocmask(SIG_BLOCK, &ss, (sigset_t *) 0); + }" + HAVE_POSIX_SIGNALS) + +IF(NOT HAVE_POSIX_SIGNALS) + CHECK_C_SOURCE_COMPILES_UNIX(" + #include <signal.h> + int main(int ac, char **av) + { + int mask = sigmask(SIGINT); + sigsetmask(mask); sigblock(mask); sigpause(mask); + }" + HAVE_BSD_SIGNALS) + IF (NOT HAVE_BSD_SIGNALS) + CHECK_C_SOURCE_COMPILES_UNIX(" + #include <signal.h> + void foo() { } + int main(int ac, char **av) + { + int mask = sigmask(SIGINT); + sigset(SIGINT, foo); sigrelse(SIGINT); + sighold(SIGINT); sigpause(SIGINT); + }" + HAVE_SVR3_SIGNALS) + IF (NOT HAVE_SVR3_SIGNALS) + SET(HAVE_V7_SIGNALS 1) + ENDIF(NOT HAVE_SVR3_SIGNALS) + ENDIF(NOT HAVE_BSD_SIGNALS) +ENDIF(NOT HAVE_POSIX_SIGNALS) + +# Assume regular sprintf +SET(SPRINTFS_RETURNS_INT 1) + +IF(CMAKE_COMPILER_IS_GNUXX) +CHECK_CXX_SOURCE_COMPILES(" + #include <cxxabi.h> + int main(int argc, char **argv) + { + char *foo= 0; int bar= 0; + foo= abi::__cxa_demangle(foo, foo, 0, &bar); + return 0; + }" + HAVE_ABI_CXA_DEMANGLE) +IF(HAVE_ABI_CXA_DEMANGLE) + SET(HAVE_CXXABI_H 1) +ENDIF() +ENDIF() + +CHECK_C_SOURCE_COMPILES_UNIX(" + int main(int argc, char **argv) + { + extern char *__bss_start; + return __bss_start ? 1 : 0; + }" +HAVE_BSS_START) + +CHECK_C_SOURCE_COMPILES_UNIX(" + int main() + { + extern void __attribute__((weak)) foo(void); + return 0; + }" + HAVE_WEAK_SYMBOL +) + + +CHECK_CXX_SOURCE_COMPILES(" + #include <new> + int main() + { + char *c = new char; + return 0; + }" + HAVE_CXX_NEW +) + +CHECK_CXX_SOURCE_COMPILES_UNIX(" + #undef inline + #if !defined(SCO) && !defined(__osf__) && !defined(_REENTRANT) + #define _REENTRANT + #endif + #include <pthread.h> + #include <sys/types.h> + #include <sys/socket.h> + #include <netinet/in.h> + #include <arpa/inet.h> + #include <netdb.h> + int main() + { + + struct hostent *foo = + gethostbyaddr_r((const char *) 0, + 0, 0, (struct hostent *) 0, (char *) NULL, 0, (int *)0); + return 0; + } + " + HAVE_SOLARIS_STYLE_GETHOST) + +CHECK_CXX_SOURCE_COMPILES_UNIX(" + #undef inline + #if !defined(SCO) && !defined(__osf__) && !defined(_REENTRANT) + #define _REENTRANT + #endif + #include <pthread.h> + #include <sys/types.h> + #include <sys/socket.h> + #include <netinet/in.h> + #include <arpa/inet.h> + #include <netdb.h> + int main() + { + int ret = gethostbyname_r((const char *) 0, + (struct hostent*) 0, (char*) 0, 0, (struct hostent **) 0, (int *) 0); + return 0; + }" + HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE) + +CHECK_CXX_SOURCE_COMPILES_UNIX(" + #undef inline + #if !defined(SCO) && !defined(__osf__) && !defined(_REENTRANT) + #define _REENTRANT + #endif + #include <pthread.h> + #include <sys/types.h> + #include <sys/socket.h> + #include <netinet/in.h> + #include <arpa/inet.h> + #include <netdb.h> + int main() + { + int ret = gethostbyname_r((const char *) 0, (struct hostent*) 0, (struct hostent_data*) 0); + return 0; + }" + HAVE_GETHOSTBYNAME_R_RETURN_INT) + +IF(CMAKE_SYSTEM_NAME STREQUAL "Linux") + CHECK_SYMBOL_EXISTS(SHM_HUGETLB sys/shm.h HAVE_DECL_SHM_HUGETLB) + IF(HAVE_DECL_SHM_HUGETLB) + SET(HAVE_LARGE_PAGES 1) + SET(HUGETLB_USE_PROC_MEMINFO 1) + SET(HAVE_LARGE_PAGE_OPTION 1) + ENDIF() +ENDIF() + +IF(CMAKE_SYSTEM_NAME STREQUAL "SunOS") + CHECK_SYMBOL_EXISTS(MHA_MAPSIZE_VA sys/mman.h HAVE_DECL_MHA_MAPSIZE_VA) + IF(HAVE_DECL_MHA_MAPSIZE_VA) + SET(HAVE_SOLARIS_LARGE_PAGES 1) + SET(HAVE_LARGE_PAGE_OPTION 1) + ENDIF() +ENDIF() + +IF(CMAKE_SYSTEM_NAME STREQUAL "AIX" OR CMAKE_SYSTEM_NAME STREQUAL "OS400") + # xlC oddity - it complains about same inline function defined multiple times + # in different compilation units + INCLUDE(CheckCXXCompilerFlag) + CHECK_CXX_COMPILER_FLAG("-qstaticinline" HAVE_QSTATICINLINE) + IF(HAVE_QSTATICINLINE) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -qstaticinline") + ENDIF() + + # The following is required to export all symbols (also with leading underscore + # from libraries and mysqld + STRING(REPLACE "-bexpall" "-bexpfull" CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS + ${CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS}) + STRING(REPLACE "-bexpall" "-bexpfull" CMAKE_SHARED_LIBRARY_LINK_C_FLAGS + ${CMAKE_SHARED_LIBRARY_LINK_C_FLAGS}) +ENDIF() + +IF(CMAKE_COMPILER_IS_GNUCXX) +IF(WITH_ATOMIC_OPS STREQUAL "up") + SET(MY_ATOMIC_MODE_DUMMY 1 CACHE BOOL "Assume single-CPU mode, no concurrency") +ELSEIF(WITH_ATOMIC_OPS STREQUAL "rwlocks") + SET(MY_ATOMIC_MODE_RWLOCK 1 CACHE BOOL "Use pthread rwlocks for atomic ops") +ELSEIF(WITH_ATOMIC_OPS STREQUAL "smp") +ELSEIF(NOT WITH_ATOMIC_OPS) + CHECK_CXX_SOURCE_COMPILES(" + int main() + { + int foo= -10; + int bar= 10; + if (!__sync_fetch_and_add(&foo, bar) || foo) + return -1; + bar= __sync_lock_test_and_set(&foo, bar); + if (bar || foo != 10) + return -1; + bar= __sync_val_compare_and_swap(&bar, foo, 15); + if (bar) + return -1; + return 0; + }" + HAVE_GCC_ATOMIC_BUILTINS) +ELSE() + MESSAGE(FATAL_ERROR "${WITH_ATOMIC_OPS} is not a valid value for WITH_ATOMIC_OPS!") +ENDIF() +ENDIF() + +SET(WITH_ATOMIC_LOCKS "${WITH_ATOMIC_LOCKS}" CACHE STRING +"Implement atomic operations using pthread rwlocks or atomic CPU +instructions for multi-processor or uniprocessor +configuration. By default gcc built-in sync functions are used, +if available and 'smp' configuration otherwise.") +MARK_AS_ADVANCED(WITH_ATOMIC_LOCKS MY_ATOMIC_MODE_RWLOCK MY_ATOMIC_MODE_DUMMY) + +IF(CMAKE_SYSTEM_NAME STREQUAL "SunOS") + CHECK_C_SOURCE_RUNS( + " + #include <atomic.h> + int main() + { + int foo = -10; int bar = 10; + if (atomic_add_int_nv((uint_t *)&foo, bar) || foo) + return -1; + bar = atomic_swap_uint((uint_t *)&foo, (uint_t)bar); + if (bar || foo != 10) + return -1; + bar = atomic_cas_uint((uint_t *)&bar, (uint_t)foo, 15); + if (bar) + return -1; + return 0; + } +" HAVE_SOLARIS_ATOMIC) +ENDIF() + +#-------------------------------------------------------------------- +# Check for IPv6 support +#-------------------------------------------------------------------- +CHECK_INCLUDE_FILE(netinet/in6.h HAVE_NETINET_IN6_H) + +IF(UNIX) + SET(CMAKE_EXTRA_INCLUDE_FILES sys/types.h netinet/in.h sys/socket.h) + IF(HAVE_NETINET_IN6_H) + SET(CMAKE_EXTRA_INCLUDE_FILES ${CMAKE_EXTRA_INCLUDE_FILES} netinet/in6.h) + ENDIF() +ELSEIF(WIN32) + SET(CMAKE_EXTRA_INCLUDE_FILES ${CMAKE_EXTRA_INCLUDE_FILES} winsock2.h ws2ipdef.h) +ENDIF() + +CHECK_TYPE_SIZE("struct sockaddr_in6" SIZEOF_SOCKADDR_IN6) +CHECK_TYPE_SIZE("struct in6_addr" SIZEOF_IN6_ADDR) +IF(SIZEOF_SOCKADDR_IN6) + SET(HAVE_STRUCT_SOCKADDR_IN6 1) +ENDIF() +IF(SIZEOF_IN6_ADDR) + SET(HAVE_STRUCT_IN6_ADDR 1) +ENDIF() + +IF(HAVE_STRUCT_SOCKADDR_IN6 OR HAVE_STRUCT_IN6_ADDR) + SET(HAVE_IPV6 TRUE CACHE INTERNAL "") +ENDIF() + + +# Check for sockaddr_storage.ss_family +# It is called differently under OS400 and older AIX + +CHECK_STRUCT_HAS_MEMBER("struct sockaddr_storage" + ss_family "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_SOCKADDR_STORAGE_SS_FAMILY) +IF(NOT HAVE_SOCKADDR_STORAGE_SS_FAMILY) + CHECK_STRUCT_HAS_MEMBER("struct sockaddr_storage" + __ss_family "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_SOCKADDR_STORAGE___SS_FAMILY) + IF(HAVE_SOCKADDR_STORAGE___SS_FAMILY) + SET(ss_family __ss_family) + ENDIF() +ENDIF() +SET(CMAKE_EXTRA_INCLUDE_FILES) + +CHECK_STRUCT_HAS_MEMBER("struct dirent" d_ino "dirent.h" STRUCT_DIRENT_HAS_D_INO) +CHECK_STRUCT_HAS_MEMBER("struct dirent" d_namlen "dirent.h" STRUCT_DIRENT_HAS_D_NAMLEN) +SET(SPRINTF_RETURNS_INT 1) + +IF(WIN32) + SET(SIGNAL_WITH_VIO_CLOSE 1) + 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_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_FUNCTION_REPLACEMENT(strtok_r strtok_s) + CHECK_FUNCTION_REPLACEMENT(strtoll _strtoi64) + CHECK_FUNCTION_REPLACEMENT(strtoull _strtoui64) + CHECK_TYPE_SIZE(ssize_t SIZE_OF_SSIZE_T) + IF(NOT SIZE_OF_SSIZE_T) + SET(ssize_t SSIZE_T) + ENDIF() + + + # IPv6 definition (appeared in Vista SDK first) + CHECK_C_SOURCE_COMPILES(" + #include <winsock2.h> + int main() + { + return IPPROTO_IPV6; + }" + HAVE_IPPROTO_IPV6) + + CHECK_C_SOURCE_COMPILES(" + #include <winsock2.h> + #include <ws2ipdef.h> + int main() + { + return IPV6_V6ONLY; + }" + HAVE_IPV6_V6ONLY) + + IF(NOT HAVE_IPPROTO_IPV6) + SET(HAVE_IPPROTO_IPV6 41) + ENDIF() + IF(NOT HAVE_IPV6_V6ONLY) + SET(IPV6_V6ONLY 27) + ENDIF() + +ENDIF(WIN32) + + diff --git a/configure.in b/configure.in index 9fe5c741a03..24c44358c3c 100644 --- a/configure.in +++ b/configure.in @@ -2929,7 +2929,9 @@ AC_CONFIG_FILES(Makefile extra/Makefile mysys/Makefile dnl libmysqld/Makefile libmysqld/examples/Makefile dnl mysql-test/Makefile mysql-test/lib/My/SafeProcess/Makefile dnl netware/Makefile sql-bench/Makefile dnl - include/mysql_version.h plugin/Makefile win/Makefile) + include/mysql_version.h plugin/Makefile win/Makefile + cmake/Makefile + ) AC_CONFIG_COMMANDS([default], , test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h) diff --git a/dbug/CMakeLists.txt b/dbug/CMakeLists.txt index fabb592dccc..00de8ba11ff 100755 --- a/dbug/CMakeLists.txt +++ b/dbug/CMakeLists.txt @@ -13,11 +13,11 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/dbug) - -SET(DBUG_SOURCES dbug.c factorial.c sanity.c) - -IF(NOT SOURCE_SUBLIBS) - INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include) - ADD_LIBRARY(dbug ${DBUG_SOURCES}) -ENDIF(NOT SOURCE_SUBLIBS) +INCLUDE_DIRECTORIES( + ${CMAKE_SOURCE_DIR}/dbug + ${CMAKE_SOURCE_DIR}/include +) +SET(DBUG_SOURCES dbug.c sanity.c) +USE_ABSOLUTE_FILENAMES(DBUG_SOURCES) +ADD_LIBRARY(dbug ${DBUG_SOURCES}) +TARGET_LINK_LIBRARIES(dbug mysys) diff --git a/extra/CMakeLists.txt b/extra/CMakeLists.txt index b67fdfa601f..c1487149acd 100755 --- a/extra/CMakeLists.txt +++ b/extra/CMakeLists.txt @@ -12,42 +12,78 @@ # 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("${PROJECT_SOURCE_DIR}/win/mysql_manifest.cmake") -INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include) +INCLUDE_DIRECTORIES( +${CMAKE_SOURCE_DIR}/include +${ZLIB_INCLUDE_DIR} +# Following is for perror, in case NDB is compiled in. +${CMAKE_SOURCE_DIR}/storage/ndb/include +${CMAKE_SOURCE_DIR}/storage/ndb/include/util +${CMAKE_SOURCE_DIR}/storage/ndb/include/ndbapi +${CMAKE_SOURCE_DIR}/storage/ndb/include/portlib +${CMAKE_SOURCE_DIR}/storage/ndb/include/mgmapi) -ADD_EXECUTABLE(comp_err comp_err.c) -TARGET_LINK_LIBRARIES(comp_err dbug mysys strings zlib) -GET_TARGET_PROPERTY(COMP_ERR_EXE comp_err LOCATION) +IF(NOT CMAKE_CROSSCOMPILING) + ADD_EXECUTABLE(comp_err comp_err.c) + TARGET_LINK_LIBRARIES(comp_err ${ZLIB_LIBRARY} mysys) +ENDIF() -ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_SOURCE_DIR}/include/mysqld_error.h - COMMAND ${COMP_ERR_EXE} +ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_BINARY_DIR}/include/mysqld_error.h + ${PROJECT_BINARY_DIR}/sql/share/english/errmsg.sys + COMMAND comp_err --charset=${PROJECT_SOURCE_DIR}/sql/share/charsets - --out-dir=${PROJECT_SOURCE_DIR}/sql/share/ - --header_file=${PROJECT_SOURCE_DIR}/include/mysqld_error.h - --name_file=${PROJECT_SOURCE_DIR}/include/mysqld_ername.h - --state_file=${PROJECT_SOURCE_DIR}/include/sql_state.h + --out-dir=${PROJECT_BINARY_DIR}/sql/share/ + --header_file=${PROJECT_BINARY_DIR}/include/mysqld_error.h + --name_file=${PROJECT_BINARY_DIR}/include/mysqld_ername.h + --state_file=${PROJECT_BINARY_DIR}/include/sql_state.h --in_file=${PROJECT_SOURCE_DIR}/sql/share/errmsg-utf8.txt - DEPENDS comp_err ${PROJECT_SOURCE_DIR}/sql/share/errmsg-utf8.txt) + DEPENDS ${PROJECT_SOURCE_DIR}/sql/share/errmsg-utf8.txt + ${CMAKE_CURRENT_SOURCE_DIR}/comp_err.c) ADD_CUSTOM_TARGET(GenError ALL - DEPENDS ${PROJECT_SOURCE_DIR}/include/mysqld_error.h) + DEPENDS + ${PROJECT_BINARY_DIR}/include/mysqld_error.h + ${PROJECT_BINARY_DIR}/sql/share/english/errmsg.sys + ${PROJECT_SOURCE_DIR}/sql/share/errmsg-utf8.txt) ADD_EXECUTABLE(my_print_defaults my_print_defaults.c) -TARGET_LINK_LIBRARIES(my_print_defaults strings mysys dbug taocrypt) +TARGET_LINK_LIBRARIES(my_print_defaults mysys) ADD_EXECUTABLE(perror perror.c) -TARGET_LINK_LIBRARIES(perror strings mysys dbug) +ADD_DEPENDENCIES(perror GenError) +TARGET_LINK_LIBRARIES(perror mysys) ADD_EXECUTABLE(resolveip resolveip.c) -TARGET_LINK_LIBRARIES(resolveip strings mysys dbug) +TARGET_LINK_LIBRARIES(resolveip mysys) +# On Solaris, inet_aton() function used by resolveip could be in resolv library +IF(CMAKE_SYSTEM_NAME STREQUAL "SunOS") + INCLUDE(CheckFunctionExists) + INCLUDE(CheckLibraryExists) + CHECK_FUNCTION_EXISTS(inet_aton HAVE_INET_ATON) + IF(NOT HAVE_INET_ATON) + CHECK_LIBRARY_EXISTS(resolv inet_aton "" HAVE_INET_ATON_IN_RESOLV) + IF(HAVE_INET_ATON_IN_RESOLV) + TARGET_LINK_LIBRARIES(resolveip resolv) + ENDIF() + ENDIF() +ENDIF() + ADD_EXECUTABLE(replace replace.c) -TARGET_LINK_LIBRARIES(replace strings mysys dbug) +TARGET_LINK_LIBRARIES(replace mysys) +IF(UNIX) + ADD_EXECUTABLE(innochecksum innochecksum.c) + + ADD_EXECUTABLE(resolve_stack_dump resolve_stack_dump.c) + TARGET_LINK_LIBRARIES(resolve_stack_dump mysys) + + ADD_EXECUTABLE(mysql_waitpid mysql_waitpid.c) + TARGET_LINK_LIBRARIES(mysql_waitpid mysys) + + INSTALL(TARGETS innochecksum mysql_waitpid resolve_stack_dump DESTINATION bin) +ENDIF() -IF(EMBED_MANIFESTS) - MYSQL_EMBED_MANIFEST("myTest" "asInvoker") -ENDIF(EMBED_MANIFESTS) +INSTALL(TARGETS perror resolveip my_print_defaults replace DESTINATION bin) diff --git a/extra/yassl/CMakeLists.txt b/extra/yassl/CMakeLists.txt index ffb72b831af..a815a46a323 100755 --- a/extra/yassl/CMakeLists.txt +++ b/extra/yassl/CMakeLists.txt @@ -13,16 +13,22 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/extra/yassl/include - ${CMAKE_SOURCE_DIR}/extra/yassl/taocrypt/include - ${CMAKE_SOURCE_DIR}/extra/yassl/taocrypt/mySTL) - -ADD_DEFINITIONS("-D_LIB -DYASSL_PREFIX") +INCLUDE_DIRECTORIES( + ${CMAKE_SOURCE_DIR}/include + ${CMAKE_SOURCE_DIR}/extra/yassl/include + ${CMAKE_SOURCE_DIR}/extra/yassl/taocrypt/include + ${CMAKE_SOURCE_DIR}/extra/yassl/taocrypt/mySTL) +ADD_DEFINITIONS(${SSL_DEFINES}) +IF(CMAKE_COMPILER_IS_GNUXX) + #Remove -fno-implicit-templates + #(yassl sources cannot be compiled with it) + STRING(REPLACE "-fno-implicit-templates" "" CMAKE_CXX_FLAGS +${CMAKE_CXX_FLAGS}) +ENDIF() SET(YASSL_SOURCES src/buffer.cpp src/cert_wrapper.cpp src/crypto_wrapper.cpp src/handshake.cpp src/lock.cpp src/log.cpp src/socket_wrapper.cpp src/ssl.cpp src/timer.cpp src/yassl_error.cpp src/yassl_imp.cpp src/yassl_int.cpp) -IF(NOT SOURCE_SUBLIBS) - ADD_LIBRARY(yassl ${YASSL_SOURCES}) - ADD_DEPENDENCIES(yassl GenError) -ENDIF(NOT SOURCE_SUBLIBS) +USE_ABSOLUTE_FILENAMES(YASSL_SOURCES) +ADD_LIBRARY(yassl ${YASSL_SOURCES}) + diff --git a/extra/yassl/taocrypt/CMakeLists.txt b/extra/yassl/taocrypt/CMakeLists.txt index e91fa021de5..58de3989b73 100755 --- a/extra/yassl/taocrypt/CMakeLists.txt +++ b/extra/yassl/taocrypt/CMakeLists.txt @@ -16,6 +16,11 @@ INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/extra/yassl/taocrypt/mySTL ${CMAKE_SOURCE_DIR}/extra/yassl/taocrypt/include) +INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include) +ADD_DEFINITIONS(${SSL_DEFINES}) +IF(PREVENT_CPP_RUNTIME) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${PREVENT_CPP_RUNTIME}") +ENDIF() SET(TAOCRYPT_SOURCES src/aes.cpp src/aestables.cpp src/algebra.cpp src/arc4.cpp src/asn.cpp src/coding.cpp src/des.cpp src/dh.cpp src/dsa.cpp src/file.cpp src/hash.cpp src/integer.cpp src/md2.cpp src/md4.cpp src/md5.cpp src/misc.cpp src/random.cpp src/ripemd.cpp src/rsa.cpp src/sha.cpp @@ -24,6 +29,6 @@ SET(TAOCRYPT_SOURCES src/aes.cpp src/aestables.cpp src/algebra.cpp src/arc4.cpp include/error.hpp include/file.hpp include/hash.hpp include/hmac.hpp include/integer.hpp include/md2.hpp include/md5.hpp include/misc.hpp include/modarith.hpp include/modes.hpp include/random.hpp include/ripemd.hpp include/rsa.hpp include/sha.hpp) -IF(NOT SOURCE_SUBLIBS) - ADD_LIBRARY(taocrypt ${TAOCRYPT_SOURCES}) -ENDIF(NOT SOURCE_SUBLIBS) +USE_ABSOLUTE_FILENAMES(TAOCRYPT_SOURCES) +ADD_LIBRARY(taocrypt ${TAOCRYPT_SOURCES}) + diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt new file mode 100644 index 00000000000..c16f8ea1ff8 --- /dev/null +++ b/include/CMakeLists.txt @@ -0,0 +1,61 @@ +# 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 + +SET(HEADERS_GEN_CONFIGURE +${CMAKE_CURRENT_BINARY_DIR}/mysql_version.h +${CMAKE_CURRENT_BINARY_DIR}/my_config.h +${CMAKE_CURRENT_BINARY_DIR}/mysqld_ername.h +${CMAKE_CURRENT_BINARY_DIR}/mysqld_error.h +${CMAKE_CURRENT_BINARY_DIR}/sql_state.h +) +SET(HEADERS_ABI + mysql.h + mysql_com.h + mysql_time.h + my_list.h + my_alloc.h + typelib.h +) + +SET(HEADERS + ${HEADERS_ABI} + my_dbug.h + m_string.h + my_sys.h + my_xml.h + mysql_embed.h + my_pthread.h + my_no_pthread.h + decimal.h + errmsg.h + my_global.h + my_net.h + my_getopt.h + sslopt-longopts.h + my_dir.h + sslopt-vars.h + sslopt-case.h + sql_common.h + keycache.h + m_ctype.h + my_attribute.h + ${HEADERS_GEN_CONFIGURE} +) + +INSTALL(FILES ${HEADERS} DESTINATION include) +INSTALL(DIRECTORY mysql/ DESTINATION include + FILES_MATCHING PATTERN "*.h") + + diff --git a/include/Makefile.am b/include/Makefile.am index 0a7a35bd6fa..f9a069bc4b5 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -43,7 +43,8 @@ noinst_HEADERS = config-win.h config-netware.h my_bit.h \ atomic/solaris.h \ atomic/gcc_builtins.h my_libwrap.h my_stacktrace.h -EXTRA_DIST = mysql.h.pp mysql/plugin.h.pp probes_mysql.d.base +EXTRA_DIST = mysql.h.pp mysql/plugin.h.pp probes_mysql.d.base \ + CMakeLists.txt # Remove built files and the symlinked directories CLEANFILES = $(BUILT_SOURCES) readline openssl probes_mysql.d probes_mysql_nodtrace.h diff --git a/include/keycache.h b/include/keycache.h index a6005bae878..1ffb1dbb71f 100644 --- a/include/keycache.h +++ b/include/keycache.h @@ -67,7 +67,7 @@ typedef struct st_key_cache HASH_LINK *free_hash_list; /* list of free hash links */ BLOCK_LINK *free_block_list; /* list of free blocks */ BLOCK_LINK *block_root; /* memory for block links */ - uchar HUGE_PTR *block_mem; /* memory for block buffers */ + uchar *block_mem; /* memory for block buffers */ BLOCK_LINK *used_last; /* ptr to the last block of the LRU chain */ BLOCK_LINK *used_ins; /* ptr to the insertion block in LRU chain */ pthread_mutex_t cache_lock; /* to lock access to the cache structure */ diff --git a/include/my_global.h b/include/my_global.h index f6d1592fc6f..c95861204d7 100644 --- a/include/my_global.h +++ b/include/my_global.h @@ -68,8 +68,8 @@ #define C_MODE_END #endif -#if defined(_WIN32) || defined(_WIN64) || defined(__WIN32__) || defined(WIN32) -#include <config-win.h> +#if defined(_WIN32) +#include <my_config.h> #elif defined(__NETWARE__) #include <my_config.h> #include <config-netware.h> @@ -107,6 +107,49 @@ #define NETWARE_SET_SCREEN_MODE(A) #endif +#if defined (_WIN32) +/* + off_t is 32 bit long. We do not use C runtime functions + with off_t but native Win32 file IO APIs, that work with + 64 bit offsets. +*/ +#undef SIZEOF_OFF_T +#define SIZEOF_OFF_T 8 + +/* + Prevent inclusion of Windows GDI headers - they define symbol + ERROR that conflicts with mysql headers. +*/ +#ifndef NOGDI +#define NOGDI +#endif + +/* Include common headers.*/ +#include <winsock2.h> +#include <ws2tcpip.h> /* SOCKET */ +#include <io.h> /* access(), chmod() */ +#include <process.h> /* getpid() */ + +#define sleep(a) Sleep((a)*1000) + +/* Define missing access() modes. */ +#define F_OK 0 +#define W_OK 2 + +/* Define missing file locking constants. */ +#define F_RDLCK 1 +#define F_WRLCK 2 +#define F_UNLCK 3 +#define F_TO_EOF 0x3FFFFFFF + +/* Shared memory and named pipe connections are supported. */ +#define HAVE_SMEM 1 +#define HAVE_NAMED_PIPE 1 +#define shared_memory_buffer_length 16000 +#define default_shared_memory_base_name "MYSQL" +#endif /* _WIN32*/ + + /* Workaround for _LARGE_FILES and _LARGE_FILE_API incompatibility on AIX */ #if defined(_AIX) && defined(_LARGE_FILE_API) #undef _LARGE_FILE_API @@ -486,8 +529,11 @@ C_MODE_END /* Go around some bugs in different OS and compilers */ #if defined (HPUX11) && defined(_LARGEFILE_SOURCE) +#ifndef _LARGEFILE64_SOURCE #define _LARGEFILE64_SOURCE #endif +#endif + #if defined(_HPUX_SOURCE) && defined(HAVE_SYS_STREAM_H) #include <sys/stream.h> /* HPUX 10.20 defines ulong here. UGLY !!! */ #define HAVE_ULONG @@ -656,7 +702,9 @@ C_MODE_END /* Some types that is different between systems */ typedef int File; /* File descriptor */ -#ifndef Socket_defined +#ifdef _WIN32 +typedef SOCKET my_socket; +#else typedef int my_socket; /* File descriptor for sockets */ #define INVALID_SOCKET -1 #endif @@ -744,7 +792,13 @@ typedef SOCKET_SIZE_TYPE size_socket; #define FN_CURLIB '.' /* ./ is used as abbrev for current dir */ #define FN_PARENTDIR ".." /* Parent directory; Must be a string */ -#ifndef FN_LIBCHAR +#ifdef _WIN32 +#define FN_LIBCHAR '\\' +#define FN_ROOTDIR "\\" +#define FN_DEVCHAR ':' +#define FN_NETWORK_DRIVES /* Uses \\ to indicate network drives */ +#define FN_NO_CASE_SENCE /* Files are not case-sensitive */ +#else #define FN_LIBCHAR '/' #define FN_ROOTDIR "/" #endif @@ -828,6 +882,31 @@ typedef SOCKET_SIZE_TYPE size_socket; #undef remove /* Crashes MySQL on SCO 5.0.0 */ #ifndef __WIN__ #define closesocket(A) close(A) +#endif + +#if (_MSC_VER) +#if !defined(_WIN64) +inline double my_ulonglong2double(unsigned long long value) +{ + long long nr=(long long) value; + if (nr >= 0) + return (double) nr; + return (18446744073709551616.0 + (double) nr); +} +#define ulonglong2double my_ulonglong2double +#define my_off_t2double my_ulonglong2double +#endif /* _WIN64 */ +inline unsigned long long my_double2ulonglong(double d) +{ + double t= d - (double) 0x8000000000000000ULL; + + if (t >= 0) + return ((unsigned long long) t) + 0x8000000000000000ULL; + return (unsigned long long) d; +} +#define double2ulonglong my_double2ulonglong +#endif + #ifndef ulonglong2double #define ulonglong2double(A) ((double) (ulonglong) (A)) #define my_off_t2double(A) ((double) (my_off_t) (A)) @@ -835,7 +914,6 @@ typedef SOCKET_SIZE_TYPE size_socket; #ifndef double2ulonglong #define double2ulonglong(A) ((ulonglong) (double) (A)) #endif -#endif #ifndef offsetof #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) @@ -1092,15 +1170,18 @@ typedef long long intptr; #define SYSTEM_SIZEOF_OFF_T SIZEOF_OFF_T #endif /* USE_RAID */ +#if defined(_WIN32) +typedef unsigned long long my_off_t; +typedef unsigned long long os_off_t; +#else +typedef off_t os_off_t; #if SIZEOF_OFF_T > 4 typedef ulonglong my_off_t; #else typedef unsigned long my_off_t; #endif +#endif /*_WIN32*/ #define MY_FILEPOS_ERROR (~(my_off_t) 0) -#if !defined(__WIN__) -typedef off_t os_off_t; -#endif #if defined(__WIN__) #define socket_errno WSAGetLastError() @@ -1127,9 +1208,6 @@ typedef uint8 int7; /* Most effective integer 0 <= x <= 127 */ typedef short int15; /* Most effective integer 0 <= x <= 32767 */ typedef int myf; /* Type of MyFlags in my_funcs */ typedef char my_bool; /* Small bool */ -#if !defined(bool) && (!defined(HAVE_BOOL) || !defined(__cplusplus)) -typedef char bool; /* Ordinary boolean values 0 1 */ -#endif /* Macros for converting *constants* to the right type */ #define INT8(v) (int8) (v) #define INT16(v) (int16) (v) @@ -1522,12 +1600,15 @@ do { doubleget_union _tmp; \ #define NO_EMBEDDED_ACCESS_CHECKS #endif -#ifdef HAVE_DLOPEN -#if defined(__WIN__) -#define dlsym(lib, name) GetProcAddress((HMODULE)lib, name) +#if defined(_WIN32) +#define dlsym(lib, name) (void*)GetProcAddress((HMODULE)lib, name) #define dlopen(libname, unused) LoadLibraryEx(libname, NULL, 0) #define dlclose(lib) FreeLibrary((HMODULE)lib) -#elif defined(HAVE_DLFCN_H) +#define HAVE_DLOPEN +#endif + +#ifdef HAVE_DLOPEN +#if defined(HAVE_DLFCN_H) #include <dlfcn.h> #endif #endif diff --git a/include/my_pthread.h b/include/my_pthread.h index b6d9feae067..9f46d1f76c1 100644 --- a/include/my_pthread.h +++ b/include/my_pthread.h @@ -117,9 +117,11 @@ struct tm *gmtime_r(const time_t *timep,struct tm *tmp); void pthread_exit(void *a); int pthread_join(pthread_t thread, void **value_ptr); +int pthread_cancel(pthread_t thread); - +#ifndef ETIMEDOUT #define ETIMEDOUT 145 /* Win32 doesn't have this */ +#endif #define HAVE_LOCALTIME_R 1 #define _REENTRANT 1 #define HAVE_PTHREAD_ATTR_SETSTACKSIZE 1 @@ -154,6 +156,7 @@ int pthread_join(pthread_t thread, void **value_ptr); #define pthread_condattr_destroy(A) #define my_pthread_getprio(thread_id) pthread_dummy(0) +#define my_sigset(A,B) signal(A,B) #else /* Normal threads */ @@ -699,25 +702,32 @@ extern uint thd_lib_detected; Warning: When compiling without threads, this file is not included. See the *other* declarations of thread_safe_xxx in include/my_global.h - - Second warning: - See include/config-win.h, for yet another implementation. */ #ifdef THREAD #ifndef thread_safe_increment +#ifdef _WIN32 +#define thread_safe_increment(V,L) InterlockedIncrement((long*) &(V)) +#define thread_safe_decrement(V,L) InterlockedDecrement((long*) &(V)) +#else #define thread_safe_increment(V,L) \ (pthread_mutex_lock((L)), (V)++, pthread_mutex_unlock((L))) #define thread_safe_decrement(V,L) \ (pthread_mutex_lock((L)), (V)--, pthread_mutex_unlock((L))) #endif +#endif #ifndef thread_safe_add +#ifdef _WIN32 +#define thread_safe_add(V,C,L) InterlockedExchangeAdd((long*) &(V),(C)) +#define thread_safe_sub(V,C,L) InterlockedExchangeAdd((long*) &(V),-(long) (C)) +#else #define thread_safe_add(V,C,L) \ (pthread_mutex_lock((L)), (V)+=(C), pthread_mutex_unlock((L))) #define thread_safe_sub(V,C,L) \ (pthread_mutex_lock((L)), (V)-=(C), pthread_mutex_unlock((L))) #endif #endif +#endif /* statistics_xxx functions are for non critical statistic, diff --git a/include/my_sys.h b/include/my_sys.h index 9121f0f249e..ea466653372 100644 --- a/include/my_sys.h +++ b/include/my_sys.h @@ -34,6 +34,9 @@ extern int NEAR my_errno; /* Last error in mysys */ #include <m_ctype.h> /* for CHARSET_INFO */ #include <stdarg.h> #include <typelib.h> +#ifdef _WIN32 +#include <malloc.h> /*for alloca*/ +#endif #define MYSYS_PROGRAM_USES_CURSES() { error_handler_hook = my_message_curses; mysys_uses_curses=1; } #define MYSYS_PROGRAM_DONT_USE_CURSES() { error_handler_hook = my_message_no_curses; mysys_uses_curses=0;} diff --git a/include/mysql/plugin.h b/include/mysql/plugin.h index f158dc20999..289d1f06fbc 100644 --- a/include/mysql/plugin.h +++ b/include/mysql/plugin.h @@ -18,10 +18,25 @@ /* On Windows, exports from DLL need to be declared -*/ -#if (defined(_WIN32) && defined(MYSQL_DYNAMIC_PLUGIN)) -#define MYSQL_PLUGIN_EXPORT extern "C" __declspec(dllexport) -#else + Also, plugin needs to be declared as extern "C" because MSVC + unlike other compilers, uses C++ mangling for variables not only + for functions. +*/ +#if defined(_MSC_VER) +#if defined(MYSQL_DYNAMIC_PLUGIN) + #ifdef __cplusplus + #define MYSQL_PLUGIN_EXPORT extern "C" __declspec(dllexport) + #else + #define MYSQL_PLUGIN_EXPORT __declspec(dllexport) + #endif +#else /* MYSQL_DYNAMIC_PLUGIN */ + #ifdef __cplusplus + #define MYSQL_PLUGIN_EXPORT extern "C" + #else + #define MYSQL_PLUGIN_EXPORT + #endif +#endif /*MYSQL_DYNAMIC_PLUGIN */ +#else /*_MSC_VER */ #define MYSQL_PLUGIN_EXPORT #endif @@ -87,9 +102,9 @@ typedef struct st_mysql_xid MYSQL_XID; #ifndef MYSQL_DYNAMIC_PLUGIN #define __MYSQL_DECLARE_PLUGIN(NAME, VERSION, PSIZE, DECLS) \ -int VERSION= MYSQL_PLUGIN_INTERFACE_VERSION; \ -int PSIZE= sizeof(struct st_mysql_plugin); \ -struct st_mysql_plugin DECLS[]= { +MYSQL_PLUGIN_EXPORT int VERSION= MYSQL_PLUGIN_INTERFACE_VERSION; \ +MYSQL_PLUGIN_EXPORT int PSIZE= sizeof(struct st_mysql_plugin); \ +MYSQL_PLUGIN_EXPORT struct st_mysql_plugin DECLS[]= { #else #define __MYSQL_DECLARE_PLUGIN(NAME, VERSION, PSIZE, DECLS) \ MYSQL_PLUGIN_EXPORT int _mysql_plugin_interface_version_= MYSQL_PLUGIN_INTERFACE_VERSION; \ diff --git a/include/thr_alarm.h b/include/thr_alarm.h index fb906039269..8d7f5bcdee0 100644 --- a/include/thr_alarm.h +++ b/include/thr_alarm.h @@ -64,7 +64,7 @@ typedef my_bool ALARM; #if defined(__WIN__) typedef struct st_thr_alarm_entry { - rf_SetTimer crono; + UINT_PTR crono; } thr_alarm_entry; #else /* System with posix threads */ diff --git a/libmysql/CMakeLists.txt b/libmysql/CMakeLists.txt index 84ad50e03e3..916aeae491a 100755 --- a/libmysql/CMakeLists.txt +++ b/libmysql/CMakeLists.txt @@ -12,102 +12,106 @@ # 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("${PROJECT_SOURCE_DIR}/win/mysql_manifest.cmake") - - -# Note that we don't link with the libraries "strings" or "mysys" -# here, instead we recompile the files needed and include them -# directly. This means we don't have to worry here about if these -# libraries are compiled defining USE_TLS or not. Not that it *should* -# have been a problem anyway, they don't use thread local storage. - -INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include - ${CMAKE_SOURCE_DIR}/libmysql - ${CMAKE_SOURCE_DIR}/regex - ${CMAKE_SOURCE_DIR}/sql - ${CMAKE_SOURCE_DIR}/strings) - -# We include the source file listing instead of referencing the -# libraries. At least with CMake 2.4 and Visual Studio 2005 a static -# library created from other static libraries would not be complete, -# i.e. the libraries listed in TARGET_LINK_LIBRARIES() were just -# ignored. - - -# Include and add the directory path -SET(SOURCE_SUBLIBS TRUE) -SET(LIB_SOURCES "") - -INCLUDE(${CMAKE_SOURCE_DIR}/zlib/CMakeLists.txt) -FOREACH(rpath ${ZLIB_SOURCES}) - SET(LIB_SOURCES ${LIB_SOURCES} ../zlib/${rpath}) -ENDFOREACH(rpath) - -# FIXME only needed if build type is "Debug", but CMAKE_BUILD_TYPE is -# not set during configure time. -INCLUDE(${CMAKE_SOURCE_DIR}/dbug/CMakeLists.txt) -FOREACH(rpath ${DBUG_SOURCES}) - SET(LIB_SOURCES ${LIB_SOURCES} ../dbug/${rpath}) -ENDFOREACH(rpath) - -INCLUDE(${CMAKE_SOURCE_DIR}/extra/yassl/taocrypt/CMakeLists.txt) -FOREACH(rpath ${TAOCRYPT_SOURCES}) - SET(LIB_SOURCES ${LIB_SOURCES} ../extra/yassl/taocrypt/${rpath}) -ENDFOREACH(rpath) - -INCLUDE(${CMAKE_SOURCE_DIR}/extra/yassl/CMakeLists.txt) -FOREACH(rpath ${YASSL_SOURCES}) - SET(LIB_SOURCES ${LIB_SOURCES} ../extra/yassl/${rpath}) -ENDFOREACH(rpath) - -SET(CLIENT_SOURCES ../mysys/array.c ../strings/bchange.c ../strings/bmove.c - ../strings/bmove_upp.c ../mysys/charset-def.c ../mysys/charset.c - ../sql-common/client.c ../strings/ctype-big5.c ../strings/ctype-bin.c - ../strings/ctype-cp932.c ../strings/ctype-czech.c ../strings/ctype-euc_kr.c - ../strings/ctype-eucjpms.c ../strings/ctype-extra.c ../strings/ctype-gb2312.c - ../strings/ctype-gbk.c ../strings/ctype-latin1.c ../strings/ctype-mb.c - ../strings/ctype-simple.c ../strings/ctype-sjis.c ../strings/ctype-tis620.c - ../strings/ctype-uca.c ../strings/ctype-ucs2.c ../strings/ctype-ujis.c - ../strings/ctype-utf8.c ../strings/ctype-win1250ch.c ../strings/ctype.c - ../mysys/default.c errmsg.c ../mysys/errors.c - ../mysys/hash.c ../mysys/my_sleep.c ../mysys/default_modify.c - get_password.c ../strings/int2str.c ../strings/is_prefix.c - libmysql.c ../mysys/list.c ../strings/llstr.c - ../strings/longlong2str.c ../mysys/mf_arr_appstr.c ../mysys/mf_cache.c - ../mysys/mf_dirname.c ../mysys/mf_fn_ext.c ../mysys/mf_format.c - ../mysys/mf_iocache.c ../mysys/mf_iocache2.c ../mysys/mf_loadpath.c - ../mysys/mf_pack.c ../mysys/mf_path.c ../mysys/mf_tempfile.c ../mysys/mf_unixpath.c - ../mysys/mf_wcomp.c ../mysys/mulalloc.c ../mysys/my_access.c ../mysys/my_alloc.c - ../mysys/my_chsize.c ../mysys/my_compress.c ../mysys/my_create.c - ../mysys/my_delete.c ../mysys/my_div.c ../mysys/my_error.c ../mysys/my_file.c - ../mysys/my_fopen.c ../mysys/my_fstream.c ../mysys/my_gethostbyname.c - ../mysys/my_getopt.c ../mysys/my_getwd.c ../mysys/my_init.c ../mysys/my_lib.c - ../mysys/my_malloc.c ../mysys/my_messnc.c ../mysys/my_net.c ../mysys/my_once.c - ../mysys/my_open.c ../mysys/my_pread.c ../mysys/my_pthread.c ../mysys/my_read.c - ../mysys/my_realloc.c ../mysys/my_rename.c ../mysys/my_seek.c - ../mysys/my_static.c ../strings/my_strtoll10.c ../mysys/my_symlink.c - ../mysys/my_symlink2.c ../mysys/my_thr_init.c ../sql-common/my_time.c - ../strings/my_vsnprintf.c ../mysys/my_wincond.c ../mysys/my_winthread.c - ../mysys/my_write.c ../sql/net_serv.cc ../sql-common/pack.c ../sql/password.c - ../mysys/safemalloc.c ../mysys/sha1.c ../strings/str2int.c - ../strings/str_alloc.c ../strings/strcend.c ../strings/strcont.c ../strings/strend.c - ../strings/strfill.c ../mysys/string.c ../strings/strinstr.c ../strings/strmake.c - ../strings/strmov.c ../strings/strnlen.c ../strings/strnmov.c ../strings/strtod.c - ../strings/strtoll.c ../strings/strtoull.c ../strings/strxmov.c ../strings/strxnmov.c - ../mysys/thr_mutex.c ../mysys/typelib.c ../vio/vio.c ../vio/viosocket.c - ../vio/viossl.c ../vio/viosslfactories.c ../strings/xml.c ../mysys/mf_qsort.c - ../mysys/my_getsystime.c ../mysys/my_sync.c ../mysys/my_winerr.c ../mysys/my_winfile.c ${LIB_SOURCES}) - - - -ADD_LIBRARY(mysqlclient STATIC ${CLIENT_SOURCES}) -ADD_DEPENDENCIES(mysqlclient GenError) -TARGET_LINK_LIBRARIES(mysqlclient) -ADD_LIBRARY(libmysql SHARED ${CLIENT_SOURCES} dll.c libmysql.def) -ADD_DEPENDENCIES(libmysql GenError) -TARGET_LINK_LIBRARIES(libmysql) +INCLUDE_DIRECTORIES( + ${CMAKE_SOURCE_DIR}/include + ${CMAKE_SOURCE_DIR}/libmysql + ${CMAKE_SOURCE_DIR}/regex + ${CMAKE_SOURCE_DIR}/sql + ${CMAKE_SOURCE_DIR}/strings + ${SSL_INCLUDE_DIRS} + ${SSL_INTERNAL_INCLUDE_DIRS} + ${ZLIB_INCLUDE_DIR}) +ADD_DEFINITIONS(${SSL_DEFINES}) + + +#Remove -fno-implicit-templates +#(yassl sources cannot be compiled with it) +STRING(REPLACE "-fno-implicit-templates" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") +ADD_DEFINITIONS(-DDISABLE_DTRACE) + + -IF(EMBED_MANIFESTS) - MYSQL_EMBED_MANIFEST("myTest" "asInvoker") -ENDIF(EMBED_MANIFESTS) +SET(CLIENT_SOURCES + get_password.c + libmysql.c + errmsg.c + ../sql-common/client.c + ../sql-common/my_time.c + ../sql/net_serv.cc + ../sql-common/pack.c + ../sql/password.c +) + +ADD_LIBRARY(clientlib STATIC ${CLIENT_SOURCES}) +ADD_DEPENDENCIES(clientlib GenError) + +# Merge several static libraries into one big mysqlclient. +SET(LIBS dbug strings vio mysys ${ZLIB_LIBRARY} ${SSL_LIBRARIES}) +MERGE_STATIC_LIBS(mysqlclient mysqlclient "${LIBS};clientlib") + +ADD_DEPENDENCIES(mysqlclient GenError) +SET_TARGET_PROPERTIES(mysqlclient PROPERTIES CLEAN_DIRECT_OUTPUT 1) + + +# Make shared client library +IF(WIN32) + SET(SHARED_OUTPUT_NAME libmysql) +ELSE() + SET(SHARED_OUTPUT_NAME mysqlclient) +ENDIF() + +# On Windows, we can make a shared library out of static. +# On Unix, we need to recompile all sources, unless we compiled with -fPIC, in +# which case we can link static libraries to shared. +IF(MSVC) + STATIC_TO_SHARED(mysqlclient libmysql libmysql.def) +ELSE() + SET(LIBMYSQL_SOURCES ${CLIENT_SOURCES}) + + IF(NOT WITH_PIC) + # Add all sources that come into common static libs. + FOREACH(LIB ${LIBS}) + GET_TARGET_PROPERTY(SRC ${LIB} SOURCES) + IF (NOT SRC) + # This must be system shared lib (zlib or openssl) + # Users of libmysql must link with it too. + LIST(APPEND OS_LIBS ${LIB}) + ELSE() + LIST(APPEND LIBMYSQL_SOURCES ${SRC}) + ENDIF() + ENDFOREACH() + + # Some extra flags as in mysys + IF(CMAKE_COMPILER_IS_GNUCC AND NOT HAVE_CXX_NEW) + SET_SOURCE_FILES_PROPERTIES(${CMAKE_SOURCE_DIR}/mysys/my_new.cc + PROPERTIES COMPILE_FLAGS "-DUSE_MYSYS_NEW") + ENDIF() + ENDIF() + + + ADD_LIBRARY(libmysql SHARED ${LIBMYSQL_SOURCES}) + ADD_DEPENDENCIES(libmysql GenError) + SET_TARGET_PROPERTIES(libmysql PROPERTIES OUTPUT_NAME ${SHARED_OUTPUT_NAME} + SOVERSION "${SHARED_LIB_MAJOR_VERSION}.0") + SET_TARGET_PROPERTIES(libmysql PROPERTIES CLEAN_DIRECT_OUTPUT 1) + + IF(WITH_PIC) + TARGET_LINK_LIBRARIES(libmysql ${LIBS}) + ENDIF() + + IF(OS_LIBS) + TARGET_LINK_LIBRARIES(libmysql ${OS_LIBS}) + ENDIF() +ENDIF() + + +IF(UNIX) + # Install links to shared and static libraries + # (append _r to base name) + INSTALL_SYMLINK(${CMAKE_SHARED_LIBRARY_PREFIX}mysqlclient_r libmysql lib) + INSTALL_SYMLINK(${CMAKE_STATIC_LIBRARY_PREFIX}mysqlclient_r mysqlclient lib) +ENDIF() + +INSTALL(TARGETS mysqlclient libmysql DESTINATION lib) +INSTALL_DEBUG_SYMBOLS( "mysqlclient;libmysql") diff --git a/libmysqld/CMakeLists.txt b/libmysqld/CMakeLists.txt index 65b8e12bc26..80f45a4491d 100644 --- a/libmysqld/CMakeLists.txt +++ b/libmysqld/CMakeLists.txt @@ -13,84 +13,45 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -ADD_DEFINITIONS(-DMYSQL_SERVER -DEMBEDDED_LIBRARY -DHAVE_DLOPEN) +ADD_DEFINITIONS(-DMYSQL_SERVER -DEMBEDDED_LIBRARY -DDISABLE_DTRACE + ${SSL_DEFINES}) + +INCLUDE_DIRECTORIES( +${CMAKE_SOURCE_DIR}/include +${CMAKE_SOURCE_DIR}/libmysql +${CMAKE_SOURCE_DIR}/libmysqld +${CMAKE_SOURCE_DIR}/sql +${CMAKE_BINARY_DIR}/sql +${CMAKE_SOURCE_DIR}/regex +${ZLIB_INCLUDE_DIR} +${SSL_INCLUDE_DIRS} +${SSL_INTERNAL_INCLUDE_DIRS} +${NDB_CLUSTER_INCLUDES} +${CMAKE_SOURCE_DIR}/sql/backup +) + +SET(GEN_SOURCES +${CMAKE_BINARY_DIR}/sql/sql_yacc.h +${CMAKE_BINARY_DIR}/sql/sql_yacc.cc +${CMAKE_BINARY_DIR}/sql/lex_hash.h +) + +SET_SOURCE_FILES_PROPERTIES(${GEN_SOURCES} PROPERTIES GENERATED TRUE) +SET(LIBS dbug strings regex mysys vio ${ZLIB_LIBRARY} ${SSL_LIBRARIES} +${MYSQLD_STATIC_PLUGIN_LIBS} ${NDB_CLIENT_LIBS}) + +# Quirk: recompile selected storage engines with -DEMBEDDED_LIBRARY +# They depend on internal structures like THD that is different in embedded. +SET(RECOMPILE_ENGINES myisam myisammrg heap ndbcluster) +FOREACH(ENGINE ${RECOMPILE_ENGINES}) + LIST(REMOVE_ITEM LIBS ${ENGINE}) + GET_TARGET_PROPERTY(SRC ${ENGINE} SOURCES) + IF(SRC) + LIST(APPEND ENGINE_SOURCES ${SRC}) + ENDIF() +ENDFOREACH() -INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include - ${CMAKE_SOURCE_DIR}/libmysqld - ${CMAKE_SOURCE_DIR}/libmysql - ${CMAKE_SOURCE_DIR}/sql - ${CMAKE_SOURCE_DIR}/regex - ${CMAKE_SOURCE_DIR}/extra/yassl/include - ${CMAKE_SOURCE_DIR}/zlib) -SET(GEN_SOURCES ${CMAKE_SOURCE_DIR}/sql/sql_yacc.cc - ${CMAKE_SOURCE_DIR}/sql/sql_yacc.h - ${CMAKE_SOURCE_DIR}/sql/message.h - ${CMAKE_SOURCE_DIR}/sql/message.rc - ${CMAKE_SOURCE_DIR}/sql/sql_builtin.cc - ${CMAKE_SOURCE_DIR}/sql/lex_hash.h) - -SET_SOURCE_FILES_PROPERTIES(${GEN_SOURCES} PROPERTIES GENERATED 1) - -# Include and add the directory path -SET(SOURCE_SUBLIBS TRUE) -SET(LIB_SOURCES "") - -INCLUDE(${CMAKE_SOURCE_DIR}/zlib/CMakeLists.txt) -FOREACH(rpath ${ZLIB_SOURCES}) - SET(LIB_SOURCES ${LIB_SOURCES} ../zlib/${rpath}) -ENDFOREACH(rpath) - -# FIXME only needed if build type is "Debug", but CMAKE_BUILD_TYPE is -# not set during configure time. -INCLUDE(${CMAKE_SOURCE_DIR}/dbug/CMakeLists.txt) -FOREACH(rpath ${DBUG_SOURCES}) - SET(LIB_SOURCES ${LIB_SOURCES} ../dbug/${rpath}) -ENDFOREACH(rpath) - -INCLUDE(${CMAKE_SOURCE_DIR}/extra/yassl/taocrypt/CMakeLists.txt) -FOREACH(rpath ${TAOCRYPT_SOURCES}) - SET(LIB_SOURCES ${LIB_SOURCES} ../extra/yassl/taocrypt/${rpath}) -ENDFOREACH(rpath) - -INCLUDE(${CMAKE_SOURCE_DIR}/extra/yassl/CMakeLists.txt) -FOREACH(rpath ${YASSL_SOURCES}) - SET(LIB_SOURCES ${LIB_SOURCES} ../extra/yassl/${rpath}) -ENDFOREACH(rpath) - -INCLUDE(${CMAKE_SOURCE_DIR}/strings/CMakeLists.txt) -FOREACH(rpath ${STRINGS_SOURCES}) - SET(LIB_SOURCES ${LIB_SOURCES} ../strings/${rpath}) -ENDFOREACH(rpath) - -INCLUDE(${CMAKE_SOURCE_DIR}/regex/CMakeLists.txt) -FOREACH(rpath ${REGEX_SOURCES}) - SET(LIB_SOURCES ${LIB_SOURCES} ../regex/${rpath}) -ENDFOREACH(rpath) - -INCLUDE(${CMAKE_SOURCE_DIR}/mysys/CMakeLists.txt) -FOREACH(rpath ${MYSYS_SOURCES}) - SET(LIB_SOURCES ${LIB_SOURCES} ../mysys/${rpath}) -ENDFOREACH(rpath) - -INCLUDE(${CMAKE_SOURCE_DIR}/vio/CMakeLists.txt) -FOREACH(rpath ${VIO_SOURCES}) - SET(LIB_SOURCES ${LIB_SOURCES} ../vio/${rpath}) -ENDFOREACH(rpath) - - - -FOREACH (ENGINE_LIB ${MYSQLD_STATIC_ENGINE_LIBS}) - STRING(TOUPPER ${ENGINE_LIB} ENGINE_LIB_UPPER) - SET(ENGINE_DIR ${${ENGINE_LIB_UPPER}_DIR}) - INCLUDE(${CMAKE_SOURCE_DIR}/storage/${ENGINE_DIR}/CMakeLists.txt) - FOREACH(rpath ${${ENGINE_LIB_UPPER}_SOURCES}) - SET(LIB_SOURCES ${LIB_SOURCES} ${CMAKE_SOURCE_DIR}/storage/${ENGINE_DIR}/${rpath}) - ENDFOREACH(rpath) -ENDFOREACH(ENGINE_LIB) - - -SET(SOURCE_SUBLIBS FALSE) SET(LIBMYSQLD_SOURCES emb_qcache.cc libmysqld.c lib_sql.cc ../libmysql/libmysql.c ../libmysql/errmsg.c ../client/get_password.c @@ -133,29 +94,35 @@ SET(LIBMYSQLD_SOURCES emb_qcache.cc libmysqld.c lib_sql.cc ../sql/partition_info.cc ../sql/sql_connect.cc ../sql/scheduler.cc ../sql/event_parse_data.cc ../sql/sql_signal.cc ../sql/rpl_handler.cc + ${CMAKE_BINARY_DIR}/sql/sql_builtin.cc ${GEN_SOURCES} - ${LIB_SOURCES}) - -# Seems we cannot make a library without at least one source file. So use a -# dummy empty file -FILE(WRITE cmake_dummy.c " ") - -# Tried use the correct ${GEN_SOURCES} as dependency, worked on Unix -# but not on Windows and Visual Studio generators. Likely because they -# are no real targets from the Visual Studio project files view. Added -# custom targets to "sql/CMakeLists.txt" and reference them here. -ADD_LIBRARY(mysqlserver STATIC ${LIBMYSQLD_SOURCES}) -ADD_DEPENDENCIES(mysqlserver GenServerSource GenError) -TARGET_LINK_LIBRARIES(mysqlserver) - -# Add any additional libraries requested by engine(s) -FOREACH (ENGINE_LIB ${MYSQLD_STATIC_ENGINE_LIBS}) - STRING(TOUPPER ${ENGINE_LIB} ENGINE_LIB_UPPER) - IF(${ENGINE_LIB_UPPER}_LIBS) - TARGET_LINK_LIBRARIES(mysqlserver ${${ENGINE_LIB_UPPER}_LIBS}) - ENDIF(${ENGINE_LIB_UPPER}_LIBS) -ENDFOREACH(ENGINE_LIB) - -ADD_LIBRARY(libmysqld SHARED cmake_dummy.c libmysqld.def) -ADD_DEPENDENCIES(libmysqld mysqlserver) -TARGET_LINK_LIBRARIES(libmysqld mysqlserver wsock32) + ${ENGINE_SOURCES} + ${MYSYS_LIBWRAP_SOURCE} +) + + +ADD_LIBRARY(mysqlserver_int STATIC ${LIBMYSQLD_SOURCES}) +ADD_DEPENDENCIES(mysqlserver_int GenError GenServerSource) + +# On Windows, static embedded server library is called mysqlserver.lib +# On Unix, it is libmysqld.a +IF(WIN32) + SET(MYSQLSERVER_OUTPUT_NAME mysqlserver) +ELSE() + SET(MYSQLSERVER_OUTPUT_NAME mysqld) +ENDIF() + +# Merge slim mysqlserver_int with other libraries like mysys to create a big +# static library that contains everything. +MERGE_STATIC_LIBS(mysqlserver ${MYSQLSERVER_OUTPUT_NAME} + "mysqlserver_int;${LIBS}") + +IF(LIBWRAP_LIBRARY) + TARGET_LINK_LIBRARIES(mysqlserver ${LIBWRAP_LIBRARY}) +ENDIF() +INSTALL(TARGETS mysqlserver DESTINATION lib) + +IF(MSVC) + STATIC_TO_SHARED(mysqlserver libmysqld libmysqld.def) + INSTALL(TARGETS libmysqld DESTINATION lib) +ENDIF() diff --git a/libmysqld/examples/CMakeLists.txt b/libmysqld/examples/CMakeLists.txt index e4b6533f8a2..400ddd8b729 100644 --- a/libmysqld/examples/CMakeLists.txt +++ b/libmysqld/examples/CMakeLists.txt @@ -15,24 +15,44 @@ INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/libmysqld/include - ${CMAKE_SOURCE_DIR}/regex - ${CMAKE_SOURCE_DIR}/zlib - ${CMAKE_SOURCE_DIR}/extra/yassl/include) + ${CMAKE_SOURCE_DIR}/regex + ${READLINE_INCLUDE_DIR} + ) -# Currently does not work with DBUG, there are missing symbols reported. -ADD_DEFINITIONS(-DEMBEDDED_LIBRARY) +ADD_DEFINITIONS(-DEMBEDDED_LIBRARY -UMYSQL_CLIENT) + ADD_EXECUTABLE(mysql_embedded ../../client/completion_hash.cc - ../../client/mysql.cc ../../client/readline.cc - ../../client/sql_string.cc) -TARGET_LINK_LIBRARIES(mysql_embedded debug dbug strings mysys vio yassl taocrypt regex ws2_32) -TARGET_LINK_LIBRARIES(mysql_embedded libmysqld) + ../../client/mysql.cc ../../client/readline.cc) +TARGET_LINK_LIBRARIES(mysql_embedded mysqlserver) +IF(UNIX) + ADD_DEFINITIONS(${READLINE_DEFINES}) + TARGET_LINK_LIBRARIES(mysql_embedded ${READLINE_LIBRARY}) +ENDIF(UNIX) ADD_EXECUTABLE(mysqltest_embedded ../../client/mysqltest.cc) -TARGET_LINK_LIBRARIES(mysqltest_embedded debug dbug strings mysys vio yassl taocrypt regex ws2_32) -TARGET_LINK_LIBRARIES(mysqltest_embedded libmysqld) +TARGET_LINK_LIBRARIES(mysqltest_embedded mysqlserver) + + +IF(CMAKE_GENERATOR MATCHES "Xcode") +# It does not seem possible to tell Xcode the resulting target might need +# to be linked with C++ runtime. The project needs to have at least one C++ +# file. Add a dummy one. + MYSQL_CREATE_EMPTY_FILE(mysql_client_test_embedded_dummy.cc) + ADD_EXECUTABLE(mysql_client_test_embedded + mysql_client_test_embedded_dummy.cc + ../../tests/mysql_client_test.c) +ELSE() + ADD_EXECUTABLE(mysql_client_test_embedded ../../tests/mysql_client_test.c) + SET_TARGET_PROPERTIES(mysql_client_test_embedded PROPERTIES HAS_CXX TRUE) +ENDIF() +TARGET_LINK_LIBRARIES(mysql_client_test_embedded mysqlserver) + +IF(UNIX) +SET_TARGET_PROPERTIES(mysql_embedded PROPERTIES ENABLE_EXPORTS TRUE) +SET_TARGET_PROPERTIES(mysqltest_embedded PROPERTIES ENABLE_EXPORTS TRUE) +SET_TARGET_PROPERTIES(mysql_client_test_embedded PROPERTIES ENABLE_EXPORTS TRUE) +ENDIF() -ADD_EXECUTABLE(mysql_client_test_embedded ../../tests/mysql_client_test.c) -TARGET_LINK_LIBRARIES(mysql_client_test_embedded debug dbug strings mysys vio yassl taocrypt regex ws2_32) -TARGET_LINK_LIBRARIES(mysql_client_test_embedded libmysqld) +INSTALL(TARGETS mysql_embedded mysqltest_embedded mysql_client_test_embedded DESTINATION bin) diff --git a/libmysqld/lib_sql.cc b/libmysqld/lib_sql.cc index 1a078d0d0c6..92b64d98fa0 100644 --- a/libmysqld/lib_sql.cc +++ b/libmysqld/lib_sql.cc @@ -731,11 +731,6 @@ void THD::clear_data_list() cur_data= 0; } -void THD::clear_error() -{ - if (stmt_da->is_error()) - stmt_da->reset_diagnostics_area(); -} static char *dup_str_aux(MEM_ROOT *root, const char *from, uint length, CHARSET_INFO *fromcs, CHARSET_INFO *tocs) diff --git a/man/CMakeLists.txt b/man/CMakeLists.txt new file mode 100644 index 00000000000..35da3411805 --- /dev/null +++ b/man/CMakeLists.txt @@ -0,0 +1,24 @@ +# 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 + +# Copy man pages +FILE(GLOB MAN1_FILES *.1) +FILE(GLOB MAN8_FILES *.8) +IF(MAN1_FILES) + INSTALL(FILES ${MAN1_FILES} DESTINATION man/man1) +ENDIF() +IF(MAN8_FILES) + INSTALL(FILES ${MAN8_FILES} DESTINATION man/man8) +ENDIF() diff --git a/man/Makefile.am b/man/Makefile.am index 72e67f7445f..8ccada67828 100644 --- a/man/Makefile.am +++ b/man/Makefile.am @@ -19,7 +19,7 @@ man1_MANS = @man1_files@ man8_MANS = @man8_files@ -EXTRA_DIST = $(man1_MANS) $(man8_MANS) +EXTRA_DIST = $(man1_MANS) $(man8_MANS) CMakeLists.txt # "make_win_*" are not needed in Unix binary packages, install-data-hook: diff --git a/mysql-test/CMakeLists.txt b/mysql-test/CMakeLists.txt new file mode 100644 index 00000000000..b3afa4f8f98 --- /dev/null +++ b/mysql-test/CMakeLists.txt @@ -0,0 +1,110 @@ +# 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 + +INSTALL( + DIRECTORY . + DESTINATION mysql-test + PATTERN "var/" EXCLUDE + PATTERN "lib/My/SafeProcess" EXCLUDE + PATTERN "CPack" EXCLUDE + PATTERN "CMake" EXCLUDE + PATTERN "mtr.out" EXCLUDE + PATTERN ".cvsignore" EXCLUDE +) + + + +IF(NOT ${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR}) + # Enable running mtr from build directory + CONFIGURE_FILE( + ${CMAKE_CURRENT_SOURCE_DIR}/mtr.out-of-source + ${CMAKE_CURRENT_BINARY_DIR}/mysql-test-run.pl + @ONLY + ) +ENDIF() +IF(UNIX) + EXECUTE_PROCESS( + COMMAND chmod +x mysql-test-run.pl + COMMAND ${CMAKE_COMMAND} -E create_symlink + ./mysql-test-run.pl mtr + COMMAND ${CMAKE_COMMAND} -E create_symlink + ./mysql-test-run.pl mysql-test-run + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + ) + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/mtr + ${CMAKE_CURRENT_BINARY_DIR}/mysql-test-run DESTINATION mysql-test) +ENDIF() + +IF(CMAKE_GENERATOR MATCHES "Visual Studio") + SET(SETCONFIG_COMMAND set MTR_VS_CONFIG=$(OutDir)) +ELSEIF(CMAKE_GENERATOR MATCHES "Xcode") + SET(SETCONFIG_COMMAND export MTR_VS_CONFIG=$(CONFIGURATION)) +ELSE() + SET(SETCONFIG_COMMAND echo Running tests) +ENDIF() +IF(CYGWIN) + # On cygwin, pretend to be "Unix" system + SET(SETOS_COMMAND export MTR_CYGWIN_IS_UNIX=1) +ELSE() + SET(SETOS_COMMAND echo OS=${CMAKE_SYSTEM_NAME}) +ENDIF() + + +ADD_CUSTOM_TARGET(test-force + COMMAND ${SETCONFIG_COMMAND} + COMMAND ${SETOS_COMMAND} + COMMAND perl mysql-test-run.pl --force + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} +) + +SET(EXP --experimental=collections/default.experimental) +IF(WIN32) + SET(SET_ENV set) +ELSE() + SET(SET_ENV export) +ENDIF() + + +SET(MTR_FORCE perl ./mysql-test-run.pl --force) +IF(EXISTS ${CMAKE_SOURCE_DIR}/mysql-test/suite/nist) + SET(TEST_NIST ${MTR_FORCE} --comment=nist suite=nist ${EXP} && + ${MTR_FORCE} --comment=nist --force --suite=nist+ps ${EXP}) +ELSE() + SET(TEST_NIST echo "NIST tests not found") +ENDIF() + +IF(WITH_EMBEDDED_SERVER) + SET(TEST_EMBEDDED ${MTR_FORCE} --comment=embedded --timer --embedded-server + --skip-rpl --skip-ndbcluster $(EXP)) +ELSE() + SET(TEST_EMBEDDED echo "Can not test embedded, not compiled in") +ENDIF() + +ADD_CUSTOM_TARGET(test-bt + COMMAND ${SETCONFIG_COMMAND} + COMMAND ${SETOS_COMMAND} + COMMAND ${SET_ENV} MTR_BUILD_THREAD=auto + COMMAND ${MTR_FORCE} --comment=normal --timer --skip-ndbcluster --report-features ${EXP} + COMMAND ${MTR_FORCE} --comment=ps --timer --skip-ndbcluster --ps-protocol ${EXP} + COMMAND ${MTR_FORCE} --comment=funcs1+ps --ps-protocol --reorder --suite=funcs_1 ${EXP} + COMMAND ${MTR_FORCE} --comment=funcs2 --suite=funcs_2 ${EXP} + COMMAND ${MTR_FORCE} --comment=partitions --suite=parts ${EXP} + COMMAND ${MTR_FORCE} --comment=stress --suite=stress ${EXP} + COMMAND ${MTR_FORCE} --force --comment=jp --suite=jp ${EXP} + COMMAND ${TEST_NIST} + COMMAND ${TEST_EMBEDDED} +) + + diff --git a/mysql-test/Makefile.am b/mysql-test/Makefile.am index b1d0e85c70e..a040688596f 100644 --- a/mysql-test/Makefile.am +++ b/mysql-test/Makefile.am @@ -71,7 +71,10 @@ SUBDIRS = lib/My/SafeProcess EXTRA_DIST = README \ $(test_SCRIPTS) \ - $(nobase_test_DATA) + $(nobase_test_DATA) \ + CMakeLists.txt \ + mtr.out-of-source + # List of directories containing test + result files and the # related test data files that should be copied diff --git a/mysql-test/lib/My/ConfigFactory.pm b/mysql-test/lib/My/ConfigFactory.pm index 505f93f1fec..1d2c606a6f7 100644 --- a/mysql-test/lib/My/ConfigFactory.pm +++ b/mysql-test/lib/My/ConfigFactory.pm @@ -29,6 +29,15 @@ sub get_basedir { return $basedir; } +# Retrive build directory (which is different from basedir in out-of-source build) +sub get_bindir { + if (defined $ENV{MTR_BINDIR}) + { + return $ENV{MTR_BINDIR}; + } + my ($self, $group)= @_; + return $self->get_basedir($group); +} sub fix_charset_dir { my ($self, $config, $group_name, $group)= @_; @@ -38,7 +47,7 @@ sub fix_charset_dir { sub fix_language { my ($self, $config, $group_name, $group)= @_; - return my_find_dir($self->get_basedir($group), + return my_find_dir($self->get_bindir($group), \@share_locations); } diff --git a/mysql-test/lib/My/Find.pm b/mysql-test/lib/My/Find.pm index 8557584bbc8..b2fec0d77b8 100644 --- a/mysql-test/lib/My/Find.pm +++ b/mysql-test/lib/My/Find.pm @@ -167,16 +167,16 @@ sub my_find_paths { } # ------------------------------------------------------- - # Windows specific - # ------------------------------------------------------- - if (IS_WINDOWS) { - # Add the default extra build dirs unless a specific one has - # already been selected - push(@extra_dirs, - ("release", - "relwithdebinfo", - "debug")) if @extra_dirs == 0; - } + # CMake generator specific (Visual Studio and Xcode have multimode builds) + # ------------------------------------------------------- + + # Add the default extra build dirs unless a specific one has + # already been selected + push(@extra_dirs, + ("Release", + "Relwithdebinfo", + "Debug")) if @extra_dirs == 0; + #print "extra_build_dir: @extra_dirs\n"; diff --git a/mysql-test/lib/My/SafeProcess.pm b/mysql-test/lib/My/SafeProcess.pm index 7e102b628ca..0fac25b814b 100644 --- a/mysql-test/lib/My/SafeProcess.pm +++ b/mysql-test/lib/My/SafeProcess.pm @@ -84,19 +84,31 @@ sub is_child { # Find the safe process binary or script my @safe_process_cmd; my $safe_kill; +my $bindir; +if(defined $ENV{MTR_BINDIR}) +{ + # This is an out-of-source build. Build directory + # is given in MTR_BINDIR env.variable + $bindir = $ENV{MTR_BINDIR}."/mysql-test"; +} +else +{ + $bindir = "."; +} + if (IS_WIN32PERL or IS_CYGWIN){ # Use my_safe_process.exe - my $exe= my_find_bin(".", ["lib/My/SafeProcess", "My/SafeProcess"], + my $exe= my_find_bin($bindir, ["lib/My/SafeProcess", "My/SafeProcess"], "my_safe_process"); push(@safe_process_cmd, $exe); # Use my_safe_kill.exe - $safe_kill= my_find_bin(".", "lib/My/SafeProcess", "my_safe_kill"); + $safe_kill= my_find_bin($bindir, "lib/My/SafeProcess", "my_safe_kill"); } else { # Use my_safe_process - my $exe= my_find_bin(".", ["lib/My/SafeProcess", "My/SafeProcess"], + my $exe= my_find_bin($bindir, ["lib/My/SafeProcess", "My/SafeProcess"], "my_safe_process"); push(@safe_process_cmd, $exe); } diff --git a/mysql-test/lib/My/SafeProcess/CMakeLists.txt b/mysql-test/lib/My/SafeProcess/CMakeLists.txt index 97fab820f95..d22d4fddddf 100644 --- a/mysql-test/lib/My/SafeProcess/CMakeLists.txt +++ b/mysql-test/lib/My/SafeProcess/CMakeLists.txt @@ -13,5 +13,15 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -ADD_EXECUTABLE(my_safe_process safe_process_win.cc) -ADD_EXECUTABLE(my_safe_kill safe_kill_win.cc) +IF (WIN32) + ADD_EXECUTABLE(my_safe_process safe_process_win.cc) + ADD_EXECUTABLE(my_safe_kill safe_kill_win.cc) +ELSE() + ADD_EXECUTABLE(my_safe_process safe_process.cc) +ENDIF() + +INSTALL(TARGETS my_safe_process DESTINATION "mysql-test/lib/My/SafeProcess") +IF(WIN32) + INSTALL(TARGETS my_safe_kill DESTINATION "mysql-test/lib/My/SafeProcess") +ENDIF() +INSTALL(FILES safe_process.pl Base.pm DESTINATION "mysql-test/lib/My/SafeProcess") diff --git a/mysql-test/lib/My/SafeProcess/safe_kill_win.cc b/mysql-test/lib/My/SafeProcess/safe_kill_win.cc index 963a02c8099..f72b851d0b6 100755 --- a/mysql-test/lib/My/SafeProcess/safe_kill_win.cc +++ b/mysql-test/lib/My/SafeProcess/safe_kill_win.cc @@ -24,6 +24,7 @@ #include <windows.h> #include <stdio.h> #include <signal.h> +#include <stdlib.h> int main(int argc, const char** argv ) { diff --git a/mysql-test/lib/My/SafeProcess/safe_process_win.cc b/mysql-test/lib/My/SafeProcess/safe_process_win.cc index 455262b29f5..ce5deb4d82a 100755 --- a/mysql-test/lib/My/SafeProcess/safe_process_win.cc +++ b/mysql-test/lib/My/SafeProcess/safe_process_win.cc @@ -57,6 +57,7 @@ #include <stdio.h> #include <tlhelp32.h> #include <signal.h> +#include <stdlib.h> static int verbose= 0; static char safe_process_name[32]= {0}; @@ -248,6 +249,10 @@ int main(int argc, const char** argv ) Make all processes associated with the job terminate when the last handle to the job is closed. */ +#ifndef JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE +#define JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE 0x00002000 +#endif + jeli.BasicLimitInformation.LimitFlags = JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE; if (SetInformationJobObject(job_handle, JobObjectExtendedLimitInformation, &jeli, sizeof(jeli)) == 0) diff --git a/mysql-test/mtr.out-of-source b/mysql-test/mtr.out-of-source new file mode 100644 index 00000000000..c2809ede136 --- /dev/null +++ b/mysql-test/mtr.out-of-source @@ -0,0 +1,5 @@ +#!/usr/bin/perl +# Call mtr in out-of-source build +$ENV{MTR_BINDIR} = "@CMAKE_BINARY_DIR@"; +chdir("@CMAKE_SOURCE_DIR@/mysql-test"); +exit(system($^X, "@CMAKE_SOURCE_DIR@/mysql-test/mysql-test-run.pl", @ARGV) >> 8);
\ No newline at end of file diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index f76cb008c3c..9a9fa85aa79 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -94,6 +94,7 @@ $SIG{INT}= sub { mtr_error("Got ^C signal"); }; our $mysql_version_id; our $glob_mysql_test_dir; our $basedir; +our $bindir; our $path_charsetsdir; our $path_client_bindir; @@ -943,7 +944,11 @@ sub command_line_setup { { $basedir= dirname($basedir); } - + + # Respect MTR_BINDIR variable, which is typically set in to the + # build directory in out-of-source builds. + $bindir=$ENV{MTR_BINDIR}||$basedir; + # Look for the client binaries directory if ($path_client_bindir) { @@ -952,21 +957,21 @@ sub command_line_setup { } else { - $path_client_bindir= mtr_path_exists("$basedir/client_release", - "$basedir/client_debug", + $path_client_bindir= mtr_path_exists("$bindir/client_release", + "$bindir/client_debug", vs_config_dirs('client', ''), - "$basedir/client", - "$basedir/bin"); + "$bindir/client", + "$bindir/bin"); } # Look for language files and charsetsdir, use same share - $path_language= mtr_path_exists("$basedir/share/mysql", - "$basedir/sql/share", - "$basedir/share"); - - + $path_language= mtr_path_exists("$bindir/share/mysql", + "$bindir/sql/share", + "$bindir/share"); my $path_share= $path_language; - $path_charsetsdir= mtr_path_exists("$path_share/charsets"); + $path_charsetsdir = mtr_path_exists("$basedir/share/mysql/charsets", + "$basedir/sql/share/charsets", + "$basedir/share/charsets"); if (using_extern()) { @@ -1104,7 +1109,14 @@ sub command_line_setup { # -------------------------------------------------------------------------- # Set the "var/" directory, the base for everything else # -------------------------------------------------------------------------- - $default_vardir= "$glob_mysql_test_dir/var"; + if(defined $ENV{MTR_BINDIR}) + { + $default_vardir= "$ENV{MTR_BINDIR}/mysql-test/var"; + } + else + { + $default_vardir= "$glob_mysql_test_dir/var"; + } if ( ! $opt_vardir ) { $opt_vardir= $default_vardir; @@ -1558,7 +1570,8 @@ sub collect_mysqld_features_from_running_server () } sub find_mysqld { - my ($mysqld_basedir)= @_; + + my ($mysqld_basedir)= $ENV{MTR_BINDIR}|| @_; my @mysqld_names= ("mysqld", "mysqld-max-nt", "mysqld-max", "mysqld-nt"); @@ -1644,7 +1657,7 @@ sub client_debug_arg($$) { sub mysql_fix_arguments () { - return "" if ( IS_WINDOWS ); + return "" ; my $exe= mtr_script_exists("$basedir/scripts/mysql_fix_privilege_tables", @@ -1744,6 +1757,30 @@ sub mysql_client_test_arguments(){ # Set environment to be used by childs of this process for # things that are constant during the whole lifetime of mysql-test-run # + +sub find_plugin($$) +{ + my ($plugin, $location) = @_; + my $plugin_filename; + + if (IS_WINDOWS) + { + $plugin_filename = $plugin.".dll"; + } + else + { + $plugin_filename = $plugin.".so"; + } + + my $lib_example_plugin= + mtr_file_exists(vs_config_dirs($location,$plugin_filename), + "$basedir/lib/plugin/".$plugin_filename, + "$basedir/$location/.libs/".$plugin_filename, + "$basedir/lib/mysql/plugin/".$plugin_filename, + ); + return $lib_example_plugin; +} + sub environment_setup { umask(022); @@ -1782,9 +1819,18 @@ sub environment_setup { # -------------------------------------------------------------------------- # Add the path where mysqld will find udf_example.so # -------------------------------------------------------------------------- + my $udf_example_filename; + if (IS_WINDOWS) + { + $udf_example_filename = "udf_example.dll"; + } + else + { + $udf_example_filename = "udf_example.so"; + } my $lib_udf_example= - mtr_file_exists(vs_config_dirs('sql', 'udf_example.dll'), - "$basedir/sql/.libs/udf_example.so",); + mtr_file_exists(vs_config_dirs('sql', $udf_example_filename), + "$basedir/sql/.libs/$udf_example_filename",); if ( $lib_udf_example ) { @@ -1800,60 +1846,46 @@ sub environment_setup { # Add the path where mysqld will find ha_example.so # -------------------------------------------------------------------------- if ($mysql_version_id >= 50100) { - my $plugin_filename; - if (IS_WINDOWS) - { - $plugin_filename = "ha_example.dll"; + my ($lib_example_plugin) = find_plugin("ha_example", "storage/example"); + + if($lib_example_plugin) + { + $ENV{'EXAMPLE_PLUGIN'}= + ($lib_example_plugin ? basename($lib_example_plugin) : ""); + $ENV{'EXAMPLE_PLUGIN_OPT'}= "--plugin-dir=". + ($lib_example_plugin ? dirname($lib_example_plugin) : ""); + + $ENV{'HA_EXAMPLE_SO'}="'".basename($lib_example_plugin)."'"; + $ENV{'EXAMPLE_PLUGIN_LOAD'}="--plugin_load=EXAMPLE=".basename($lib_example_plugin); } - else + else { - $plugin_filename = "ha_example.so"; + # Some ".opt" files use some of these variables, so they must be defined + $ENV{'EXAMPLE_PLUGIN'}= ""; + $ENV{'EXAMPLE_PLUGIN_OPT'}= ""; + $ENV{'HA_EXAMPLE_SO'}= ""; + $ENV{'EXAMPLE_PLUGIN_LOAD'}= ""; } - my $lib_example_plugin= - mtr_file_exists(vs_config_dirs('storage/example',$plugin_filename), - "$basedir/storage/example/.libs/".$plugin_filename, - "$basedir/lib/mysql/plugin/".$plugin_filename); - $ENV{'EXAMPLE_PLUGIN'}= - ($lib_example_plugin ? basename($lib_example_plugin) : ""); - $ENV{'EXAMPLE_PLUGIN_OPT'}= "--plugin-dir=". - ($lib_example_plugin ? dirname($lib_example_plugin) : ""); - - $ENV{'HA_EXAMPLE_SO'}="'".$plugin_filename."'"; - $ENV{'EXAMPLE_PLUGIN_LOAD'}="--plugin_load=EXAMPLE=".$plugin_filename; - } - else - { - # Some ".opt" files use some of these variables, so they must be defined - $ENV{'EXAMPLE_PLUGIN'}= ""; - $ENV{'EXAMPLE_PLUGIN_OPT'}= ""; - $ENV{'HA_EXAMPLE_SO'}= ""; - $ENV{'EXAMPLE_PLUGIN_LOAD'}= ""; } + # -------------------------------------------------------------------------- # Add the path where mysqld will find semisync plugins # -------------------------------------------------------------------------- if (!$opt_embedded_server) { - my $semisync_master_filename; - my $semisync_slave_filename; + my $semisync_lib_prefix; if (IS_WINDOWS) { - $semisync_master_filename = "semisync_master.dll"; - $semisync_slave_filename = "semisync_slave.dll"; + $semisync_lib_prefix = ""; } else { - $semisync_master_filename = "libsemisync_master.so"; - $semisync_slave_filename = "libsemisync_slave.so"; + $semisync_lib_prefix= "lib"; } - my $lib_semisync_master_plugin= - mtr_file_exists(vs_config_dirs('plugin/semisync',$semisync_master_filename), - "$basedir/plugin/semisync/.libs/" . $semisync_master_filename, - "$basedir/lib/mysql/plugin/" . $semisync_master_filename); - my $lib_semisync_slave_plugin= - mtr_file_exists(vs_config_dirs('plugin/semisync',$semisync_slave_filename), - "$basedir/plugin/semisync/.libs/" . $semisync_slave_filename, - "$basedir/lib/mysql/plugin/" . $semisync_slave_filename); + + my ($lib_semisync_master_plugin) = find_plugin($semisync_lib_prefix."semisync_master", "plugin/semisync"); + my ($lib_semisync_slave_plugin) = find_plugin($semisync_lib_prefix."semisync_slave", "plugin/semisync"); + if ($lib_semisync_master_plugin && $lib_semisync_slave_plugin) { $ENV{'SEMISYNC_MASTER_PLUGIN'}= basename($lib_semisync_master_plugin); @@ -1871,10 +1903,10 @@ sub environment_setup { # ---------------------------------------------------- # Add the path where mysqld will find mypluglib.so # ---------------------------------------------------- - my $lib_simple_parser= - mtr_file_exists(vs_config_dirs('plugin/fulltext', 'mypluglib.dll'), - "$basedir/plugin/fulltext/.libs/mypluglib.so",); + my ($lib_simple_parser) = find_plugin("mypluglib", "plugin/fulltext"); + + $ENV{'MYPLUGLIB_SO'}="'".basename($lib_simple_parser)."'"; $ENV{'SIMPLE_PARSER'}= ($lib_simple_parser ? basename($lib_simple_parser) : ""); $ENV{'SIMPLE_PARSER_OPT'}= "--plugin-dir=". @@ -2303,18 +2335,15 @@ sub vs_config_dirs ($$) { my ($path_part, $exe) = @_; $exe = "" if not defined $exe; - - # Don't look in these dirs when not on windows - return () unless IS_WINDOWS; - if ($opt_vs_config) { - return ("$basedir/$path_part/$opt_vs_config/$exe"); + return ("$bindir/$path_part/$opt_vs_config/$exe"); } - return ("$basedir/$path_part/release/$exe", - "$basedir/$path_part/relwithdebinfo/$exe", - "$basedir/$path_part/debug/$exe"); + return ("$bindir/$path_part/Release/$exe", + "$bindir/$path_part/RelWithDebinfo/$exe", + "$bindir/$path_part/Debug/$exe", + "$bindir/$path_part/$exe"); } diff --git a/mysql-test/t/fulltext_plugin.test b/mysql-test/t/fulltext_plugin.test index 31978dadc51..25e4302ef0d 100644 --- a/mysql-test/t/fulltext_plugin.test +++ b/mysql-test/t/fulltext_plugin.test @@ -3,7 +3,8 @@ # # BUG#39746 - Debug flag breaks struct definition (server crash) # -INSTALL PLUGIN simple_parser SONAME 'mypluglib.so'; +--replace_regex /\.dll/.so/ +eval INSTALL PLUGIN simple_parser SONAME $MYPLUGLIB_SO; CREATE TABLE t1(a TEXT, b TEXT, FULLTEXT(a) WITH PARSER simple_parser); ALTER TABLE t1 ADD FULLTEXT(b) WITH PARSER simple_parser; DROP TABLE t1; diff --git a/mysys/CMakeLists.txt b/mysys/CMakeLists.txt index 21b04e7c968..5c0cebf5938 100755 --- a/mysys/CMakeLists.txt +++ b/mysys/CMakeLists.txt @@ -13,15 +13,9 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# Only the server link with this library, the client libraries and the client -# executables all link with recompiles of source found in the "mysys" directory. -# So we only need to create one version of this library, with the "static" -# Thread Local Storage model. -# -# Exception is the embedded server that needs this library compiled with -# dynamic TLS, i.e. define USE_TLS -INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/zlib ${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/mysys) + +INCLUDE_DIRECTORIES(${ZLIB_INCLUDE_DIR} ${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/mysys) SET(MYSYS_SOURCES array.c charset-def.c charset.c checksum.c default.c default_modify.c errors.c hash.c list.c md5.c mf_brkhant.c mf_cache.c mf_dirname.c mf_fn_ext.c @@ -30,17 +24,39 @@ SET(MYSYS_SOURCES array.c charset-def.c charset.c checksum.c default.c default_ mf_radix.c mf_same.c mf_sort.c mf_soundex.c mf_arr_appstr.c mf_tempdir.c mf_tempfile.c mf_unixpath.c mf_wcomp.c mf_wfile.c mulalloc.c my_access.c my_aes.c my_alarm.c my_alloc.c my_append.c my_bit.c my_bitmap.c my_chsize.c - my_clock.c my_compress.c my_conio.c my_copy.c my_crc32.c my_create.c my_delete.c + my_clock.c my_compress.c my_copy.c my_crc32.c my_create.c my_delete.c my_div.c my_error.c my_file.c my_fopen.c my_fstream.c my_gethostbyname.c my_gethwaddr.c my_getopt.c my_getsystime.c my_getwd.c my_handler.c my_init.c my_lib.c my_lock.c my_lockmem.c my_malloc.c my_messnc.c my_mkdir.c my_mmap.c my_net.c my_once.c my_open.c my_pread.c my_pthread.c my_quick.c my_read.c my_realloc.c my_redel.c my_rename.c my_seek.c my_sleep.c - my_static.c my_symlink.c my_symlink2.c my_sync.c my_thr_init.c my_wincond.c - my_winerr.c my_winfile.c my_windac.c my_winthread.c my_write.c ptr_cmp.c queues.c stacktrace.c + my_static.c my_symlink.c my_symlink2.c my_sync.c my_thr_init.c + my_write.c ptr_cmp.c queues.c stacktrace.c rijndael.c safemalloc.c sha1.c string.c thr_alarm.c thr_lock.c thr_mutex.c thr_rwlock.c tree.c typelib.c my_vle.c base64.c my_memmem.c my_getpagesize.c) -IF(NOT SOURCE_SUBLIBS) - ADD_LIBRARY(mysys ${MYSYS_SOURCES}) -ENDIF(NOT SOURCE_SUBLIBS) +IF (WIN32) + SET (MYSYS_SOURCES ${MYSYS_SOURCES} my_winthread.c my_wincond.c my_winerr.c my_winfile.c my_windac.c my_conio.c) +ENDIF() + +IF(CMAKE_COMPILER_IS_GNUCC AND NOT HAVE_CXX_NEW) + # gcc as C++ compiler does not have new/delete + SET(MYSYS_SOURCES ${MYSYS_SOURCES} my_new.cc) + ADD_DEFINITIONS( -DUSE_MYSYS_NEW) +ENDIF() + +IF(HAVE_LARGE_PAGES) + SET(MYSYS_SOURCES ${MYSYS_SOURCES} my_largepage.c) +ENDIF() + +IF(UNIX) + # some workarounds + SET(MYSYS_SOURCES ${MYSYS_SOURCES} my_port.c) + # Some stuff not ported to windows + SET(MYSYS_SOURCES ${MYSYS_SOURCES} my_atomic.c) + SET(MYSYS_SOURCES ${MYSYS_SOURCES} my_getncpus.c) +ENDIF() +USE_ABSOLUTE_FILENAMES(MYSYS_SOURCES) +ADD_LIBRARY(mysys ${MYSYS_SOURCES}) +TARGET_LINK_LIBRARIES(mysys dbug strings ${ZLIB_LIBRARY}) +DTRACE_INSTRUMENT(mysys) diff --git a/mysys/my_create.c b/mysys/my_create.c index d0436276d03..49529f9b7b5 100644 --- a/mysys/my_create.c +++ b/mysys/my_create.c @@ -39,14 +39,11 @@ File my_create(const char *FileName, int CreateFlags, int access_flags, DBUG_ENTER("my_create"); DBUG_PRINT("my",("Name: '%s' CreateFlags: %d AccessFlags: %d MyFlags: %d", FileName, CreateFlags, access_flags, MyFlags)); - -#if !defined(NO_OPEN_3) - fd= open((char *) FileName, access_flags | O_CREAT, - CreateFlags ? CreateFlags : my_umask); -#elif defined(_WIN32) +#if defined(_WIN32) fd= my_win_open(FileName, access_flags | O_CREAT); #else - fd= open(FileName, access_flags); + fd= open((char *) FileName, access_flags | O_CREAT, + CreateFlags ? CreateFlags : my_umask); #endif if ((MyFlags & MY_SYNC_DIR) && (fd >=0) && diff --git a/mysys/my_getsystime.c b/mysys/my_getsystime.c index b692b18bfc7..b9f385d83a9 100644 --- a/mysys/my_getsystime.c +++ b/mysys/my_getsystime.c @@ -150,7 +150,10 @@ ulonglong my_micro_time() Value in microseconds from some undefined point in time */ -#define DELTA_FOR_SECONDS LL(500000000) /* Half a second */ +#define DELTA_FOR_SECONDS 500000000LL /* Half a second */ + +/* Difference between GetSystemTimeAsFileTime() and now() */ +#define OFFSET_TO_EPOCH 116444736000000000ULL ulonglong my_micro_time_and_time(time_t *time_arg) { diff --git a/mysys/my_winthread.c b/mysys/my_winthread.c index 9e8458b0799..35715832fc6 100644 --- a/mysys/my_winthread.c +++ b/mysys/my_winthread.c @@ -129,4 +129,22 @@ error_return: return -1; } +int pthread_cancel(pthread_t thread) +{ + + HANDLE handle= 0; + BOOL ok= FALSE; + + handle= OpenThread(THREAD_TERMINATE, FALSE, thread); + if (handle) + { + ok= TerminateThread(handle,0); + CloseHandle(handle); + } + if (ok) + return 0; + + errno= EINVAL; + return -1; +} #endif diff --git a/mysys/mysys_priv.h b/mysys/mysys_priv.h index 4c4d6ea3598..8f125a2320e 100644 --- a/mysys/mysys_priv.h +++ b/mysys/mysys_priv.h @@ -44,6 +44,7 @@ extern pthread_mutex_t THR_LOCK_charset, THR_LOCK_time; void my_error_unregister_all(void); #ifdef _WIN32 +#include <sys/stat.h> /* my_winfile.c exports, should not be used outside mysys */ extern File my_win_open(const char *path, int oflag); extern int my_win_close(File fd); @@ -59,8 +60,8 @@ extern FILE* my_win_fopen(const char *filename, const char *type); extern File my_win_fclose(FILE *file); extern File my_win_fileno(FILE *file); extern FILE* my_win_fdopen(File Filedes, const char *type); -extern int my_win_stat(const char *path, struct _stat64 *buf); -extern int my_win_fstat(File fd, struct _stat64 *buf); +extern int my_win_stat(const char *path, struct _stati64 *buf); +extern int my_win_fstat(File fd, struct _stati64 *buf); extern int my_win_fsync(File fd); extern File my_win_dup(File fd); extern File my_win_sopen(const char *path, int oflag, int shflag, int perm); diff --git a/plugin/daemon_example/CMakeLists.txt b/plugin/daemon_example/CMakeLists.txt new file mode 100644 index 00000000000..97ada05f935 --- /dev/null +++ b/plugin/daemon_example/CMakeLists.txt @@ -0,0 +1,18 @@ +# 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 + +SET(DAEMON_EXAMPLE_PLUGIN_DYNAMIC daemon_example) +SET(DAEMON_EXAMPLE_SOURCES daemon_example.cc) +MYSQL_PLUGIN(DAEMON_EXAMPLE) diff --git a/plugin/daemon_example/Makefile.am b/plugin/daemon_example/Makefile.am index fce67285a5f..d1f2555594c 100644 --- a/plugin/daemon_example/Makefile.am +++ b/plugin/daemon_example/Makefile.am @@ -38,6 +38,7 @@ noinst_LIBRARIES = @plugin_daemon_example_static_target@ libdaemon_example_a_CXXFLAGS = $(AM_CFLAGS) libdaemon_example_a_CFLAGS = $(AM_CFLAGS) libdaemon_example_a_SOURCES= daemon_example.cc +EXTRA_DIST = CMakeLists.txt # Don't update the files from bitkeeper %::SCCS/s.% diff --git a/plugin/fulltext/CMakeLists.txt b/plugin/fulltext/CMakeLists.txt new file mode 100644 index 00000000000..e0dd2ac510c --- /dev/null +++ b/plugin/fulltext/CMakeLists.txt @@ -0,0 +1,18 @@ +# 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 + +SET(FTEXAMPLE_PLUGIN_DYNAMIC mypluglib) +SET(FTEXAMPLE_SOURCES plugin_example.c) +MYSQL_PLUGIN(FTEXAMPLE) diff --git a/plugin/fulltext/Makefile.am b/plugin/fulltext/Makefile.am index 343416072dd..0747e6d0193 100644 --- a/plugin/fulltext/Makefile.am +++ b/plugin/fulltext/Makefile.am @@ -22,6 +22,7 @@ pkgplugin_LTLIBRARIES= mypluglib.la mypluglib_la_SOURCES= plugin_example.c mypluglib_la_LDFLAGS= -module -rpath $(pkgplugindir) mypluglib_la_CFLAGS= -DMYSQL_DYNAMIC_PLUGIN +EXTRA_DIST= CMakeLists.txt # Don't update the files from bitkeeper %::SCCS/s.% diff --git a/plugin/semisync/CMakeLists.txt b/plugin/semisync/CMakeLists.txt index d42510fab18..7681894207d 100644 --- a/plugin/semisync/CMakeLists.txt +++ b/plugin/semisync/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2006 MySQL AB +# 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 @@ -11,25 +11,22 @@ # # 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 +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02 -# This is CMakeLists.txt for semi-sync replication plugins +IF(WIN32) + SET(LIBPREFIX "") +ELSE() + SET(LIBPREFIX "lib") +ENDIF() -SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX") -SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX") +SET(SEMISYNC_MASTER_SOURCES semisync.cc semisync_master.cc semisync_master_plugin.cc + semisync.h semisync_master.h) -# Add common include directories -INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/zlib - ${CMAKE_SOURCE_DIR}/sql - ${CMAKE_SOURCE_DIR}/regex - ${CMAKE_SOURCE_DIR}/extra/yassl/include) +SET(SEMISYNC_MASTER_PLUGIN_DYNAMIC ${LIBPREFIX}semisync_master) +MYSQL_PLUGIN(SEMISYNC_MASTER) -SET(SEMISYNC_MASTER_SOURCES semisync.cc semisync_master.cc semisync_master_plugin.cc) -SET(SEMISYNC_SLAVE_SOURCES semisync.cc semisync_slave.cc semisync_slave_plugin.cc) +SET(SEMISYNC_SLAVE_SOURCES semisync.cc semisync_slave.cc semisync_slave_plugin.cc +semisync.h semisync_slave.h ) +SET(SEMISYNC_SLAVE_PLUGIN_DYNAMIC ${LIBPREFIX}semisync_slave) +MYSQL_PLUGIN(SEMISYNC_SLAVE) -ADD_DEFINITIONS(-DMYSQL_DYNAMIC_PLUGIN) -ADD_LIBRARY(semisync_master SHARED ${SEMISYNC_MASTER_SOURCES}) -TARGET_LINK_LIBRARIES(semisync_master mysqld) -ADD_LIBRARY(semisync_slave SHARED ${SEMISYNC_SLAVE_SOURCES}) -TARGET_LINK_LIBRARIES(semisync_slave mysqld) -MESSAGE("build SEMISYNC as DLL") diff --git a/regex/CMakeLists.txt b/regex/CMakeLists.txt index 440be4d2f12..f02c5745ef3 100755 --- a/regex/CMakeLists.txt +++ b/regex/CMakeLists.txt @@ -17,7 +17,6 @@ INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include) SET(REGEX_SOURCES regcomp.c regerror.c regexec.c regfree.c reginit.c) +USE_ABSOLUTE_FILENAMES(REGEX_SOURCES) +ADD_LIBRARY(regex ${REGEX_SOURCES}) -IF(NOT SOURCE_SUBLIBS) - ADD_LIBRARY(regex ${REGEX_SOURCES}) -ENDIF(NOT SOURCE_SUBLIBS) diff --git a/regex/regex2.h b/regex/regex2.h index bba54ea2054..2ab32c62da8 100644 --- a/regex/regex2.h +++ b/regex/regex2.h @@ -83,9 +83,7 @@ typedef long sopno; * a string of multi-character elements, and decide the size of the * vectors at run time. */ -#ifdef __WIN__ -typedef unsigned char uch ; -#endif + typedef struct { uch *ptr; /* -> uch [csetsize] */ diff --git a/scripts/CMakeLists.txt b/scripts/CMakeLists.txt index 25cdae2b522..de3e4c661f6 100755 --- a/scripts/CMakeLists.txt +++ b/scripts/CMakeLists.txt @@ -13,65 +13,257 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# Build mysql_fix_privilege_tables.sql -ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_SOURCE_DIR}/scripts/mysql_fix_privilege_tables.sql - COMMAND copy /b - mysql_system_tables.sql + mysql_system_tables_fix.sql - mysql_fix_privilege_tables.sql - DEPENDS - ${PROJECT_SOURCE_DIR}/scripts/mysql_system_tables.sql - ${PROJECT_SOURCE_DIR}/scripts/mysql_system_tables_fix.sql) +IF(UNIX) + # FIND_PROC and CHECK_PID are used by mysqld_safe +IF(CMAKE_SYSTEM_NAME MATCHES "Linux") + SET (FIND_PROC + "ps wwwp $PID | grep -v \" grep\" | grep -v mysqld_safe | grep -- \"$MYSQLD\" > /dev/null") +ENDIF() +IF(NOT FIND_PROC AND CMAKE_SYSTEM_NAME MATCHES "SunOS") + SET (FIND_PROC + "ps -p $PID | grep -v \" grep\" | grep -v mysqld_safe | grep -- \"$MYSQLD\" > /dev/null") +ENDIF() + +IF(NOT FIND_PROC) + # BSD style + EXECUTE_PROCESS(COMMAND ps -uaxww OUTPUT_QUIET ERROR_QUIET RESULT_VARIABLE result) + IF(result MATCHES 0) + SET( FIND_PROC + "ps -uaxww | grep -v \" grep\" | grep -v mysqld_safe | grep -- "\$MYSQLD\" | grep \" $PID \" > /dev/null") + ENDIF() +ENDIF() + +IF(NOT FIND_PROC) + # SysV style + EXECUTE_PROCESS(COMMAND ps -ef OUTPUT_QUIET ERROR_QUIET RESULT_VARIABLE result) + IF(result MATCHES 0) + SET( FIND_PROC "ps -ef | grep -v \" grep\" | grep -v mysqld_safe | grep -- "\$MYSQLD\" | grep \" $PID \" > /dev/null") + ENDIF() +ENDIF() + +EXECUTE_PROCESS(COMMAND sh -c "kill -0 $$" OUTPUT_QUIET ERROR_QUIET RESULT_VARIABLE result2) +IF(result3 MATCHES 0) + SET(CHECK_PID "kill -0 $PID > /dev/null 2> /dev/null") +ELSE() + EXECUTE_PROCESS(COMMAND sh -c "kill -s 0 $$" OUTPUT_QUIET ERROR_QUIET RESULT_VARIABLE result3) + IF(result4 MATCHES 0) + SET(CHECK_PID "kill -s 0 $PID > /dev/null 2> /dev/null") + ELSE() + SET(CHECK_PID "kill -s SIGCONT $PID > /dev/null 2> /dev/null") + ENDIF() +ENDIF() + +ENDIF(UNIX) + # Build comp_sql - used for embedding SQL in C or C++ programs -ADD_EXECUTABLE(comp_sql comp_sql.c) -TARGET_LINK_LIBRARIES(comp_sql dbug mysys strings) +IF(NOT CMAKE_CROSSCOMPILING) + ADD_EXECUTABLE(comp_sql comp_sql.c) + TARGET_LINK_LIBRARIES(comp_sql) +ENDIF() + +SET(FIX_PRIVS_IN + ${CMAKE_CURRENT_SOURCE_DIR}/mysql_system_tables.sql + ${CMAKE_CURRENT_SOURCE_DIR}/mysql_system_tables_fix.sql +) +SET(FIX_PRIVILEGES_SQL + ${CMAKE_CURRENT_BINARY_DIR}/mysql_fix_privilege_tables.sql +) -# Use comp_sql to build mysql_fix_privilege_tables_sql.c -GET_TARGET_PROPERTY(COMP_SQL_EXE comp_sql LOCATION) +# Build mysql_fix_privilege_tables.sql (concatenate 2 sql scripts) +ADD_CUSTOM_COMMAND( + OUTPUT ${FIX_PRIVILEGES_SQL} + COMMAND ${CMAKE_COMMAND} "-DIN=${FIX_PRIVS_IN}" "-DOUT=${FIX_PRIVILEGES_SQL}" + -P "${CMAKE_SOURCE_DIR}/cmake/cat.cmake" + VERBATIM + DEPENDS ${FIX_PRIVS_IN} +) -ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_SOURCE_DIR}/scripts/mysql_fix_privilege_tables_sql.c - COMMAND ${COMP_SQL_EXE} - mysql_fix_privilege_tables - mysql_fix_privilege_tables.sql - mysql_fix_privilege_tables_sql.c - DEPENDS comp_sql ${PROJECT_SOURCE_DIR}/scripts/mysql_fix_privilege_tables.sql) +# Build mysql_fix_privilege_tables.c +ADD_CUSTOM_COMMAND( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/mysql_fix_privilege_tables_sql.c + COMMAND comp_sql + mysql_fix_privilege_tables + mysql_fix_privilege_tables.sql + mysql_fix_privilege_tables_sql.c + DEPENDS comp_sql ${CMAKE_CURRENT_BINARY_DIR}/mysql_fix_privilege_tables.sql + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} +) -# Add dummy target for the above to be built +# Add target for the above to be built ADD_CUSTOM_TARGET(GenFixPrivs - ALL - DEPENDS ${PROJECT_SOURCE_DIR}/scripts/mysql_fix_privilege_tables_sql.c) + ALL + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/mysql_fix_privilege_tables_sql.c +) # ---------------------------------------------------------------------- # Replace some variables @foo@ in the .in/.sh file, and write the new script # ---------------------------------------------------------------------- -SET(CFLAGS "-D_WINDOWS ${CMAKE_C_FLAGS_RELWITHDEBINFO}") -SET(prefix "${CMAKE_INSTALL_PREFIX}/MySQL Server ${MYSQL_BASE_VERSION}") -SET(sysconfdir ${prefix}) -SET(bindir ${prefix}/bin) -SET(libexecdir ${prefix}/bin) -SET(scriptdir ${prefix}/bin) -SET(datadir ${prefix}/share) -SET(pkgdatadir ${prefix}/share) -SET(localstatedir ${prefix}/data) +SET(CFLAGS "${CMAKE_C_FLAGS_RELWITHDEBINFO}") +SET(CXXFLAGS "${CMAKE_C_FLAGS_RELWITHDEBINFO}") +SET(LDFLAGS "${CMAKE_SHARED_LIBRARY_LINK_FLAGS}") + +IF(WIN32) + SET(prefix "${CMAKE_INSTALL_PREFIX}/MySQL Server ${MYSQL_BASE_VERSION}") +ELSE() + set(prefix "${CMAKE_INSTALL_PREFIX}/mysql") +ENDIF() + +SET(sysconfdir ${prefix}) +SET(bindir ${prefix}/bin) +SET(libexecdir ${prefix}/bin) +SET(scriptdir ${prefix}/bin) +SET(datadir ${prefix}/share) +SET(pkgdatadir ${prefix}/share) +SET(pkgincludedir ${prefix}/include) +SET(pkglibdir ${prefix}/lib) +SET(pkgplugindir ${prefix}/lib/plugin) +SET(localstatedir ${prefix}/data) + +# Use cmake variables to inspect dependencies for +# mysqlclient library +SET(CLIENT_LIBS "") +SET(LIBS "") +FOREACH(lib ${mysqlclient_LIB_DEPENDS}) + # Filter out general, it is CMake hint + # not real + IF(NOT lib STREQUAL "general" AND NOT CLIENT_LIBS MATCHES "-l${lib} ") + SET(CLIENT_LIBS "${CLIENT_LIBS}-l${lib} " ) + ENDIF() +ENDFOREACH() +FOREACH(lib ${mysqlserver_LIB_DEPENDS}) + IF(NOT lib STREQUAL "general" AND NOT LIBS MATCHES "-l${lib} ") + SET(LIBS "${LIBS}-l${lib} " ) + ENDIF() +ENDFOREACH() +IF(MSVC) + STRING(REPLACE "-l" "" CLIENT_LIBS "${CLIENT_LIBS}") + STRING(REPLACE "-l" "" LIBS "${LIBS}" ) +ENDIF() + +SET(NON_THREADED_LIBS ${CLIENT_LIBS}) + +IF(WIN32) + # On Windows, some .sh and some .pl.in files are configured + # The resulting files will have .pl extension (those are perl scripts) + + # Input files with pl.in extension + SET(PLIN_FILES mysql_config mysql_secure_installation) + # Input files with .sh extension + SET(SH_FILES mysql_convert_table_format mysqld_multi) + + FOREACH(file ${PLIN_FILES}) + CONFIGURE_FILE(${file}.pl.in + ${CMAKE_CURRENT_BINARY_DIR}/${file}.pl ESCAPE_QUOTES @ONLY) + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${file}.pl DESTINATION scripts) + ENDFOREACH() + + FOREACH(file ${SH_FILES}) + CONFIGURE_FILE(${file}.sh + ${CMAKE_CURRENT_BINARY_DIR}/${file}.pl ESCAPE_QUOTES @ONLY) + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${file}.pl DESTINATION scripts) + ENDFOREACH() +ELSE() + # On Unix, most of the files end up in the bin directory + SET(BIN_SCRIPTS + msql2mysql + mysql_config + mysql_fix_extensions + mysql_setpermission + mysql_secure_installation + mysql_zap + mysqlaccess + mysqlbug + mysql_convert_table_format + mysql_find_rows + mysqlhotcopy + mysqldumpslow + mysqld_multi + mysqlaccess + mysqlaccess.conf + mysql_install_db + ) + FOREACH(file ${BIN_SCRIPTS}) + IF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${file}.sh) + CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/${file}.sh + ${CMAKE_CURRENT_BINARY_DIR}/${file} ESCAPE_QUOTES @ONLY) + ELSEIF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${file}) + CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/${file} + ${CMAKE_CURRENT_BINARY_DIR}/${file} COPYONLY) + ELSE() + MESSAGE(FATAL_ERROR "Can not find ${file}.sh or ${file} in " + "${CMAKE_CURRENT_SOURCE_DIR}" ) + ENDIF() + + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${file} DESTINATION bin + PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ + GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) + ENDFOREACH() + + CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/mysqld_safe.sh + ${CMAKE_CURRENT_BINARY_DIR}/mysqld_safe @ONLY) + + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/mysqld_safe DESTINATION bin + PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ + GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) + + # For some reason, mysqld_safe needs to be also in scripts directory + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/mysql_install_db + DESTINATION scripts + PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ + GROUP_EXECUTE WORLD_READ WORLD_EXECUTE + ) +ENDIF() -CONFIGURE_FILE(mysql_config.pl.in - scripts/mysql_config.pl ESCAPE_QUOTES @ONLY) +INSTALL(FILES mysql_test_data_timezone.sql DESTINATION share) -CONFIGURE_FILE(mysql_convert_table_format.sh - scripts/mysql_convert_table_format.pl ESCAPE_QUOTES @ONLY) +IF(UNIX) + FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/make_binary_distribution + "cd ${CMAKE_BINARY_DIR} && ${CMAKE_CPACK_COMMAND} -G TGZ --config CPackConfig.cmake" ) + EXECUTE_PROCESS( + COMMAND chmod +x ${CMAKE_CURRENT_BINARY_DIR}/make_binary_distribution +) +ENDIF() -CONFIGURE_FILE(mysql_install_db.pl.in - scripts/mysql_install_db.pl ESCAPE_QUOTES @ONLY) +# Install libgcc as mylibgcc.a +IF(CMAKE_COMPILER_IS_GNUCXX) + IF(NOT LIBGCC_LOCATION) + EXECUTE_PROCESS ( + COMMAND ${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} + ${CMAKE_CXX_FLAGS} --print-libgcc + OUTPUT_VARIABLE LIBGCC_LOCATION + RESULT_VARIABLE RESULT + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET + ) + IF(${RESULT} EQUAL 0 AND EXISTS ${LIBGCC_LOCATION}) + SET(LIBGCC_LOCATION "${LIBGCC_LOCATION}" CACHE INTERNAL + "location of libgcc" ) + ENDIF() + ENDIF() + + IF(LIBGCC_LOCATION) + INSTALL (CODE "CONFIGURE_FILE (${LIBGCC_LOCATION} + ${CMAKE_CURRENT_BINARY_DIR}/libmygcc.a COPYONLY)") + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/libmygcc.a DESTINATION lib + OPTIONAL) + ENDIF() +ENDIF() -CONFIGURE_FILE(mysql_secure_installation.pl.in - scripts/mysql_secure_installation.pl ESCAPE_QUOTES @ONLY) -CONFIGURE_FILE(mysqld_multi.sh - scripts/mysqld_multi.pl ESCAPE_QUOTES @ONLY) +INSTALL (FILES + ${CMAKE_CURRENT_SOURCE_DIR}/mysql_system_tables.sql + ${CMAKE_CURRENT_SOURCE_DIR}/mysql_system_tables_data.sql + ${CMAKE_CURRENT_SOURCE_DIR}/fill_help_tables.sql + DESTINATION share +) -CONFIGURE_FILE(mysqldumpslow.sh - scripts/mysqldumpslow.pl ESCAPE_QUOTES @ONLY) +# TCMalloc hacks +IF($ENV{MALLOC_LIB}) + SET(MALLOC_LIB $ENV{MALLOC_LIB} CACHE STRING "malloc library") +ENDIF() -CONFIGURE_FILE(mysqlhotcopy.sh - scripts/mysqlhotcopy.pl ESCAPE_QUOTES @ONLY) +IF(MALLOC_LIB) + INSTALL(FILES ${MALLOC_LIB} DESTINATION lib OPTIONAL) +ENDIF() diff --git a/sql-bench/CMakeLists.txt b/sql-bench/CMakeLists.txt new file mode 100644 index 00000000000..e69fa9fa18f --- /dev/null +++ b/sql-bench/CMakeLists.txt @@ -0,0 +1,51 @@ +# 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 + +# Install sql-bench files +FILE(GLOB all_files +${CMAKE_SOURCE_DIR}/sql-bench/* +${CMAKE_SOURCE_DIR}/sql-bench/Data/ATIS/* +${CMAKE_SOURCE_DIR}/sql-bench/Data/Wisconsin/* +${CMAKE_SOURCE_DIR}/sql-bench/Comments/* +${CMAKE_SOURCE_DIR}/sql-bench/limits/* +) + +GET_FILENAME_COMPONENT(basedir ${CMAKE_SOURCE_DIR} ABSOLUTE) +FOREACH(file ${all_files}) + IF(NOT IS_DIRECTORY ${file} AND NOT ${file} MATCHES "Make" ) + FILE(RELATIVE_PATH relpath ${basedir} ${file}) + SET(target_relpath ${relpath}) + GET_FILENAME_COMPONENT(ext ${file} EXT) + GET_FILENAME_COMPONENT(dir ${relpath} PATH) + IF(ext MATCHES ".sh$") + # Those are perl files actually + STRING(REPLACE ".sh" "" target_relpath ${target_relpath} ) + IF(WIN32) + IF(NOT ext MATCHES ".pl") + SET(target_relpath "${target_relpath}.pl") + ENDIF() + ENDIF() + ENDIF() + SET(target "${CMAKE_BINARY_DIR}/${target_relpath}") + CONFIGURE_FILE(${file} ${target} COPYONLY) + IF (ext MATCHES ".bat") + IF(WIN32) + INSTALL(FILES ${target} DESTINATION ${dir}) + ENDIF() + ELSE() + INSTALL(FILES ${target} DESTINATION ${dir}) + ENDIF() + ENDIF() +ENDFOREACH() diff --git a/sql-bench/Makefile.am b/sql-bench/Makefile.am index a7aff83e7aa..ff726ff561e 100644 --- a/sql-bench/Makefile.am +++ b/sql-bench/Makefile.am @@ -37,7 +37,7 @@ EXTRA_SCRIPTS = test-ATIS.sh test-connect.sh test-create.sh \ graph-compare-results.sh innotest1.sh innotest1a.sh \ innotest1b.sh innotest2.sh innotest2a.sh innotest2b.sh \ bench-count-distinct.sh -EXTRA_DIST = $(EXTRA_SCRIPTS) +EXTRA_DIST = $(EXTRA_SCRIPTS) CMakeLists.txt dist-hook: mkdir -p $(distdir)/Data/ATIS $(distdir)/Data/Wisconsin \ diff --git a/sql/CMakeLists.txt b/sql/CMakeLists.txt index 15c2d950ff9..881772bfc5a 100755 --- a/sql/CMakeLists.txt +++ b/sql/CMakeLists.txt @@ -12,32 +12,36 @@ # 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("${PROJECT_SOURCE_DIR}/win/mysql_manifest.cmake") - -SET(CMAKE_CXX_FLAGS_DEBUG - "${CMAKE_CXX_FLAGS_DEBUG} -DUSE_SYMDIR /Zi") -SET(CMAKE_C_FLAGS_DEBUG - "${CMAKE_C_FLAGS_DEBUG} -DUSE_SYMDIR /Zi") -SET(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /MAP /MAPINFO:EXPORTS") - -INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include - ${CMAKE_SOURCE_DIR}/extra/yassl/include - ${CMAKE_SOURCE_DIR}/sql - ${CMAKE_SOURCE_DIR}/regex - ${CMAKE_SOURCE_DIR}/zlib + +IF(MSVC) + #Innodb plugin needs linker-generated map file to locate server exports + #see bug#42001 + SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /MAP /MAPINFO:EXPORTS") +ENDIF(MSVC) + +INCLUDE_DIRECTORIES( +${CMAKE_SOURCE_DIR}/include +${CMAKE_SOURCE_DIR}/sql +${CMAKE_SOURCE_DIR}/regex +${ZLIB_INCLUDE_DIR} +${SSL_INCLUDE_DIRS} +${CMAKE_BINARY_DIR}/sql +) + +SET(GEN_SOURCES +${CMAKE_BINARY_DIR}/sql/sql_yacc.h +${CMAKE_BINARY_DIR}/sql/sql_yacc.cc +${CMAKE_BINARY_DIR}/sql/sql_builtin.cc +${CMAKE_BINARY_DIR}/sql/lex_hash.h ) -SET_SOURCE_FILES_PROPERTIES(${CMAKE_SOURCE_DIR}/sql/sql_yacc.h - ${CMAKE_SOURCE_DIR}/sql/sql_yacc.cc - ${CMAKE_SOURCE_DIR}/include/mysql_version.h - ${CMAKE_SOURCE_DIR}/sql/sql_builtin.cc - ${CMAKE_SOURCE_DIR}/sql/lex_hash.h - ${PROJECT_SOURCE_DIR}/include/mysqld_error.h - ${PROJECT_SOURCE_DIR}/include/mysqld_ername.h - ${PROJECT_SOURCE_DIR}/include/sql_state.h - PROPERTIES GENERATED 1) +SET_SOURCE_FILES_PROPERTIES(${GEN_SOURCES} PROPERTIES GENERATED 1) + +ADD_DEFINITIONS(-DMYSQL_SERVER -DHAVE_EVENT_SCHEDULER) +IF(SSL_DEFINES) + ADD_DEFINITIONS(${SSL_DEFINES}) +ENDIF() -ADD_DEFINITIONS(-DMYSQL_SERVER -D_CONSOLE -DHAVE_DLOPEN -DHAVE_EVENT_SCHEDULER) SET (SQL_SOURCE @@ -54,7 +58,7 @@ SET (SQL_SOURCE log_event_old.cc rpl_record_old.cc message.h mf_iocache.cc my_decimal.cc ../sql-common/my_time.c mysqld.cc net_serv.cc - nt_servc.cc nt_servc.h opt_range.cc opt_range.h opt_sum.cc + opt_range.cc opt_range.h opt_sum.cc ../sql-common/pack.c parse_file.cc password.c procedure.cc protocol.cc records.cc repl_failsafe.cc rpl_filter.cc set_var.cc slave.cc sp.cc sp_cache.cc sp_head.cc sp_pcontext.cc @@ -77,79 +81,169 @@ SET (SQL_SOURCE sql_connect.cc scheduler.cc sql_profile.cc event_parse_data.cc sql_signal.cc rpl_handler.cc - ${PROJECT_SOURCE_DIR}/sql/sql_yacc.cc - ${PROJECT_SOURCE_DIR}/sql/sql_yacc.h - ${PROJECT_SOURCE_DIR}/include/mysqld_error.h - ${PROJECT_SOURCE_DIR}/include/mysqld_ername.h - ${PROJECT_SOURCE_DIR}/include/sql_state.h - ${PROJECT_SOURCE_DIR}/include/mysql_version.h - ${PROJECT_SOURCE_DIR}/sql/sql_builtin.cc - ${PROJECT_SOURCE_DIR}/sql/lex_hash.h) -ADD_LIBRARY(sql ${SQL_SOURCE}) - -IF (NOT EXISTS cmake_dummy.cc) - FILE (WRITE cmake_dummy.cc "") -ENDIF (NOT EXISTS cmake_dummy.cc) -ADD_EXECUTABLE(mysqld cmake_dummy.cc) - -SET_TARGET_PROPERTIES(mysqld PROPERTIES OUTPUT_NAME mysqld${MYSQLD_EXE_SUFFIX}) -SET_TARGET_PROPERTIES(mysqld PROPERTIES ENABLE_EXPORTS TRUE) - -SET (MYSQLD_CORE_LIBS mysys zlib dbug strings yassl taocrypt vio regex sql) -TARGET_LINK_LIBRARIES(mysqld ${MYSQLD_CORE_LIBS} ${MYSQLD_STATIC_ENGINE_LIBS}) - - -IF(MSVC AND NOT WITHOUT_DYNAMIC_PLUGINS) - # Set module definition file. Also use non-incremental linker, - # incremental appears to crash from time to time,if used with /DEF option - SET_TARGET_PROPERTIES(mysqld PROPERTIES LINK_FLAGS "/DEF:mysqld.def /INCREMENTAL:NO") - - FOREACH (CORELIB ${MYSQLD_CORE_LIBS}) - GET_TARGET_PROPERTY(LOC ${CORELIB} LOCATION) - FILE(TO_NATIVE_PATH ${LOC} LOC) - SET (LIB_LOCATIONS ${LIB_LOCATIONS} ${LOC}) - ENDFOREACH (CORELIB ${MYSQLD_CORE_LIBS}) + ${GEN_SOURCES} + ${MYSYS_LIBWRAP_SOURCE}) + + +SET (MYSQLD_CORE_LIBS mysys ${ZLIB_LIBRARY} ${SSL_LIBRARIES} vio regex ) +IF(WIN32) + SET(SQL_SOURCE ${SQL_SOURCE} nt_servc.cc nt_servc.h) +ENDIF() +IF(MSVC) + ADD_LIBRARY(sql ${SQL_SOURCE}) + ADD_EXECUTABLE(mysqld mysqld_dummy.cc) + ADD_CUSTOM_COMMAND( + OUTPUT mysqld_dummy.cc + COMMAND cmake ARGS -E touch mysqld_dummy.cc + VERBATIM) + SET(MYSQLD_CORE_LIBS ${MYSQLD_CORE_LIBS} sql) + +ELSE() + ADD_EXECUTABLE(mysqld ${SQL_SOURCE}) + DTRACE_INSTRUMENT(mysqld) +ENDIF() + +IF(NOT WITHOUT_DYNAMIC_PLUGINS) + SET_TARGET_PROPERTIES(mysqld PROPERTIES ENABLE_EXPORTS TRUE) + IF (MINGW OR CYGWIN) + SET_TARGET_PROPERTIES(mysqld PROPERTIES LINK_FLAGS "-Wl,--export-all-symbols") + ENDIF() + IF(MSVC) + # Set module definition file. Also use non-incremental linker, + # incremental appears to crash from time to time,if used with /DEF option + SET_TARGET_PROPERTIES(mysqld PROPERTIES LINK_FLAGS "/DEF:mysqld.def /INCREMENTAL:NO") + + FOREACH (CORELIB ${MYSQLD_CORE_LIBS} dbug strings) + GET_TARGET_PROPERTY(LOC ${CORELIB} LOCATION) + FILE(TO_NATIVE_PATH ${LOC} LOC) + SET (LIB_LOCATIONS ${LIB_LOCATIONS} ${LOC}) + ENDFOREACH (CORELIB ${MYSQLD_CORE_LIBS}) - ADD_CUSTOM_COMMAND(TARGET mysqld PRE_LINK - COMMAND cscript ARGS //nologo ${PROJECT_SOURCE_DIR}/win/create_def_file.js + ADD_CUSTOM_COMMAND(TARGET mysqld PRE_LINK + COMMAND echo ${PLATFORM} && cscript ARGS //nologo ${PROJECT_SOURCE_DIR}/win/create_def_file.js ${PLATFORM} ${LIB_LOCATIONS} > mysqld.def - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/sql) -ENDIF(MSVC AND NOT WITHOUT_DYNAMIC_PLUGINS) + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + ADD_DEPENDENCIES(sql GenError) + ENDIF() +ENDIF() + +SET_TARGET_PROPERTIES(mysqld PROPERTIES ENABLE_EXPORTS TRUE) +SET_TARGET_PROPERTIES(mysqld PROPERTIES OUTPUT_NAME mysqld${MYSQLD_EXE_SUFFIX}) +TARGET_LINK_LIBRARIES(mysqld ${MYSQLD_STATIC_PLUGIN_LIBS} ${MYSQLD_CORE_LIBS} ${LIBWRAP_LIBRARY}) +INSTALL(TARGETS mysqld DESTINATION bin) +INSTALL_DEBUG_SYMBOLS(mysqld) + + +FIND_PROGRAM(BISON_EXECUTABLE bison DOC "path to the bison executable") +MARK_AS_ADVANCED(BISON_EXECUTABLE "") + + +# Handle out-of-source build from source package with possibly broken +# bison. Copy bison output to from source to build directory, if not already +# there +IF (NOT ${CMAKE_CURRENT_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_BINARY_DIR}) + IF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/sql_yacc.cc) + IF(NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/sql_yacc.cc) + CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/sql_yacc.cc + ${CMAKE_CURRENT_BINARY_DIR}/sql_yacc.cc COPYONLY) + CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/sql_yacc.h + ${CMAKE_CURRENT_BINARY_DIR}/sql_yacc.h COPYONLY) + ENDIF() + ENDIF() +ENDIF() + + +INCLUDE(${CMAKE_SOURCE_DIR}/cmake/bison.cmake) +RUN_BISON( + ${CMAKE_CURRENT_SOURCE_DIR}/sql_yacc.yy + ${CMAKE_CURRENT_BINARY_DIR}/sql_yacc.cc + ${CMAKE_CURRENT_BINARY_DIR}/sql_yacc.h +) -ADD_DEPENDENCIES(sql GenError) +# Gen_lex_hash +ADD_EXECUTABLE(gen_lex_hash gen_lex_hash.cc) +TARGET_LINK_LIBRARIES(gen_lex_hash mysys) -# Sql Parser custom command ADD_CUSTOM_COMMAND( - OUTPUT ${PROJECT_SOURCE_DIR}/sql/sql_yacc.h - ${PROJECT_SOURCE_DIR}/sql/sql_yacc.cc - COMMAND bison ARGS -y -p MYSQL --defines=sql_yacc.h - --output=sql_yacc.cc sql_yacc.yy - DEPENDS ${PROJECT_SOURCE_DIR}/sql/sql_yacc.yy) + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/lex_hash.h + COMMAND gen_lex_hash ARGS > lex_hash.h + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/gen_lex_hash.cc) + +ADD_CUSTOM_TARGET( + GenServerSource + DEPENDS ${GEN_SOURCES} +) +#Need this only for embedded +SET_TARGET_PROPERTIES(GenServerSource PROPERTIES EXCLUDE_FROM_ALL TRUE) + +IF(WIN32 OR HAVE_DLOPEN) + ADD_LIBRARY(udf_example MODULE udf_example.c) + SET_TARGET_PROPERTIES(udf_example PROPERTIES PREFIX "") + # udf_example depends on strings + IF(WIN32) + IF(MSVC) + SET_TARGET_PROPERTIES(udf_example PROPERTIES LINK_FLAGS "/DEF:${CMAKE_CURRENT_SOURCE_DIR}/udf_example.def") + ENDIF() + TARGET_LINK_LIBRARIES(udf_example strings) + ENDIF() +ENDIF() + +FOREACH(tool glibtoolize libtoolize aclocal autoconf autoheader automake gtar + tar bzr) + STRING(TOUPPER ${tool} TOOL) + FIND_PROGRAM(${TOOL}_EXECUTABLE ${tool} DOC "path to the executable") + MARK_AS_ADVANCED(${TOOL}_EXECUTABLE) +ENDFOREACH() + +CONFIGURE_FILE( + ${CMAKE_SOURCE_DIR}/cmake/make_dist.cmake.in ${CMAKE_BINARY_DIR}/make_dist.cmake @ONLY) + +ADD_CUSTOM_TARGET(dist + COMMAND ${CMAKE_COMMAND} -P ${CMAKE_BINARY_DIR}/make_dist.cmake + DEPENDS ${CMAKE_BINARY_DIR}/sql/sql_yacc.cc ${CMAKE_BINARY_DIR}/sql/sql_yacc.h + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} +) -# Gen_lex_hash -ADD_EXECUTABLE(gen_lex_hash gen_lex_hash.cc) -TARGET_LINK_LIBRARIES(gen_lex_hash dbug mysqlclient) -GET_TARGET_PROPERTY(GEN_LEX_HASH_EXE gen_lex_hash LOCATION) -ADD_CUSTOM_COMMAND( - OUTPUT ${PROJECT_SOURCE_DIR}/sql/lex_hash.h - COMMAND ${GEN_LEX_HASH_EXE} ARGS > lex_hash.h - DEPENDS ${GEN_LEX_HASH_EXE}) - -ADD_CUSTOM_TARGET( - GenServerSource ALL - DEPENDS ${PROJECT_SOURCE_DIR}/sql/sql_yacc.h - ${PROJECT_SOURCE_DIR}/sql/sql_yacc.cc - ${PROJECT_SOURCE_DIR}/sql/message.h - ${PROJECT_SOURCE_DIR}/sql/message.rc - ${PROJECT_SOURCE_DIR}/sql/lex_hash.h) - -ADD_DEPENDENCIES(mysqld GenServerSource) - -# Remove the auto-generated files as part of 'Clean Solution' -SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES - "lex_hash.h;sql_yacc.h;sql_yacc.cc;mysqld.def") - -ADD_LIBRARY(udf_example MODULE udf_example.c udf_example.def) -ADD_DEPENDENCIES(udf_example strings GenError) -TARGET_LINK_LIBRARIES(udf_example strings) + + + + +# We need to create empty directories (data/test) the installation. +# This does not work with current CPack due to http://www.cmake.org/Bug/view.php?id=8767 +# Avoid completely empty directories and install dummy file instead. + +SET(DUMMY_FILE ${CMAKE_CURRENT_BINARY_DIR}/.empty ) +FILE(WRITE ${DUMMY_FILE} "") +INSTALL(FILES ${DUMMY_FILE} DESTINATION data/test) + +# Install initial database on windows +IF(NOT CMAKE_CROSSCOMPILING) + GET_TARGET_PROPERTY(MYSQLD_EXECUTABLE mysqld LOCATION) +ENDIF() +IF(WIN32 AND MYSQLD_EXECUTABLE) + CONFIGURE_FILE( + ${CMAKE_SOURCE_DIR}/cmake/create_initial_db.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/create_initial_db.cmake + @ONLY + ) + + MAKE_DIRECTORY(${CMAKE_CURRENT_BINARY_DIR}/data) + ADD_CUSTOM_COMMAND( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/data/mysql/user.frm + COMMAND ${CMAKE_COMMAND} + -DCONFIG=${CMAKE_CFG_INTDIR} + -P ${CMAKE_CURRENT_BINARY_DIR}/create_initial_db.cmake + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/data + DEPENDS mysqld + ) + ADD_CUSTOM_TARGET(initial_database + ALL + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/data/mysql/user.frm + ) + INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/data/mysql DESTINATION data) +ELSE() + # Not windows or cross compiling, just install an empty directory + INSTALL(FILES ${DUMMY_FILE} DESTINATION data/mysql) +ENDIF()
\ No newline at end of file diff --git a/sql/nt_servc.cc b/sql/nt_servc.cc index f41fa08f828..76dc2846ed0 100644 --- a/sql/nt_servc.cc +++ b/sql/nt_servc.cc @@ -10,6 +10,7 @@ #include <windows.h> #include <process.h> #include <stdio.h> +#include <stdlib.h> #include "nt_servc.h" diff --git a/sql/share/CMakeLists.txt b/sql/share/CMakeLists.txt new file mode 100644 index 00000000000..7a67833f9e3 --- /dev/null +++ b/sql/share/CMakeLists.txt @@ -0,0 +1,52 @@ +# 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 + +SET (dirs +danish +german +slovak +dutch +greek +norwegian +spanish +english +hungarian +norwegian-ny +swedish +italian +polish +ukrainian +japanese +portuguese +romanian +estonian +korean +russian +czech +french +serbian +) + +SET(files + errmsg-utf8.txt +) + +FOREACH (dir ${dirs}) + INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${dir} + DESTINATION share) +ENDFOREACH() +INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/charsets DESTINATION share) + +INSTALL(FILES ${files} DESTINATION share) diff --git a/sql/share/Makefile.am b/sql/share/Makefile.am index 06b349d5de2..c4078440abf 100644 --- a/sql/share/Makefile.am +++ b/sql/share/Makefile.am @@ -15,8 +15,9 @@ ## Process this file with automake to create Makefile.in -EXTRA_DIST= errmsg-utf8.txt - +EXTRA_DIST= errmsg-utf8.txt \ + CMakeLists.txt + dist-hook: for dir in charsets @AVAILABLE_LANGUAGES@; do \ test -d $(distdir)/$$dir || mkdir $(distdir)/$$dir; \ diff --git a/sql/sql_builtin.cc.in b/sql/sql_builtin.cc.in index 3becdbaccfe..1b9b152247f 100644 --- a/sql/sql_builtin.cc.in +++ b/sql/sql_builtin.cc.in @@ -17,7 +17,12 @@ typedef struct st_mysql_plugin builtin_plugin[]; -extern builtin_plugin +#if defined(_MSC_VER) +extern "C" +#else +extern +#endif +builtin_plugin builtin_binlog_plugin@mysql_plugin_defs@; struct st_mysql_plugin *mysqld_builtins[]= diff --git a/sql/sql_class.h b/sql/sql_class.h index 1a5cceaca90..e876b2a6787 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -1960,7 +1960,7 @@ public: void add_changed_table(const char *key, long key_length); CHANGED_TABLE_LIST * changed_table_dup(const char *key, long key_length); int send_explain_fields(select_result *result); -#ifndef EMBEDDED_LIBRARY + /** Clear the current error, if any. We do not clear is_fatal_error or is_fatal_sub_stmt_error since we @@ -1976,9 +1976,9 @@ public: is_slave_error= 0; DBUG_VOID_RETURN; } +#ifndef EMBEDDED_LIBRARY inline bool vio_ok() const { return net.vio != 0; } #else - void clear_error(); inline bool vio_ok() const { return true; } #endif /** diff --git a/storage/Makefile.am b/storage/Makefile.am index 8aa1e4f7dc6..5b4e32374ae 100644 --- a/storage/Makefile.am +++ b/storage/Makefile.am @@ -18,7 +18,6 @@ AUTOMAKE_OPTIONS = foreign # These are built from source in the Docs directory -EXTRA_DIST = mysql_storage_engine.cmake SUBDIRS = @mysql_se_dirs@ DIST_SUBDIRS = @mysql_se_distdirs@ diff --git a/storage/archive/CMakeLists.txt b/storage/archive/CMakeLists.txt index ce4d92d3f99..458f21bfb6c 100644 --- a/storage/archive/CMakeLists.txt +++ b/storage/archive/CMakeLists.txt @@ -13,6 +13,14 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -INCLUDE("${PROJECT_SOURCE_DIR}/storage/mysql_storage_engine.cmake") +SET(ARCHIVE_PLUGIN_STATIC "archive") +SET(ARCHIVE_PLUGIN_DYNAMIC "ha_archive") + SET(ARCHIVE_SOURCES azio.c ha_archive.cc ha_archive.h) MYSQL_STORAGE_ENGINE(ARCHIVE) +IF(NOT WITH_ARCHIVE_STORAGE_ENGINE AND NOT WITHOUT_ARCHIVE_STORAGE_ENGINE + AND NOT WITH_ZLIB STREQUAL "bundled") + TARGET_LINK_LIBRARIES(archive ${ZLIB_LIBRARY}) +ENDIF() + + diff --git a/storage/blackhole/CMakeLists.txt b/storage/blackhole/CMakeLists.txt index bed282ef21d..ec28208c311 100644 --- a/storage/blackhole/CMakeLists.txt +++ b/storage/blackhole/CMakeLists.txt @@ -13,7 +13,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("${PROJECT_SOURCE_DIR}/storage/mysql_storage_engine.cmake") -SET(BLACKHOLE_SOURCES ha_blackhole.cc ha_blackhole.h) +SET(BLACKHOLE_PLUGIN_STATIC "blackhole") +SET(BLACKHOLE_PLUGIN_DYNAMIC "ha_blackhole") +SET(BLACKHOLE_SOURCES ha_blackhole.cc ha_blackhole.h) MYSQL_STORAGE_ENGINE(BLACKHOLE) diff --git a/storage/csv/CMakeLists.txt b/storage/csv/CMakeLists.txt index 37760588897..b9d31fc372f 100644 --- a/storage/csv/CMakeLists.txt +++ b/storage/csv/CMakeLists.txt @@ -13,7 +13,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(CSV_PLUGIN_STATIC "csv") +SET(CSV_PLUGIN_MANDATORY TRUE) -INCLUDE("${PROJECT_SOURCE_DIR}/storage/mysql_storage_engine.cmake") SET(CSV_SOURCES ha_tina.cc ha_tina.h transparent_file.cc transparent_file.h) MYSQL_STORAGE_ENGINE(CSV)
\ No newline at end of file diff --git a/storage/example/CMakeLists.txt b/storage/example/CMakeLists.txt index f0b1343ab9c..47722dfd53b 100644 --- a/storage/example/CMakeLists.txt +++ b/storage/example/CMakeLists.txt @@ -13,6 +13,6 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -INCLUDE("${PROJECT_SOURCE_DIR}/storage/mysql_storage_engine.cmake") +SET(EXAMPLE_PLUGIN_DYNAMIC "ha_example") SET(EXAMPLE_SOURCES ha_example.cc) MYSQL_STORAGE_ENGINE(EXAMPLE) diff --git a/storage/federated/CMakeLists.txt b/storage/federated/CMakeLists.txt index fa54d36481a..f47c7240682 100644 --- a/storage/federated/CMakeLists.txt +++ b/storage/federated/CMakeLists.txt @@ -13,6 +13,12 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -INCLUDE("${PROJECT_SOURCE_DIR}/storage/mysql_storage_engine.cmake") +SET(FEDERATED_PLUGIN_STATIC "federated") +SET(FEDERATED_PLUGIN_DYNAMIC "ha_federated") SET(FEDERATED_SOURCES ha_federated.cc) +IF(NOT WITH_FEDERATED AND NOT WITH_FEDERATED_STORAGE_ENGINE) + # Bug#45488- federated uses symbols that are not used anywhere in + # mysqld and are optimized away by the linker. + SET(FEDERATED_SOURCES ${FEDERATED_SOURCES} ${CMAKE_SOURCE_DIR}/mysys/string.c) +ENDIF() MYSQL_STORAGE_ENGINE(FEDERATED) diff --git a/storage/heap/CMakeLists.txt b/storage/heap/CMakeLists.txt index 4a0fa22c8f1..1e88ecd503f 100755 --- a/storage/heap/CMakeLists.txt +++ b/storage/heap/CMakeLists.txt @@ -13,8 +13,9 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +SET(HEAP_PLUGIN_STATIC "heap") +SET(HEAP_PLUGIN_MANDATORY TRUE) -INCLUDE("${PROJECT_SOURCE_DIR}/storage/mysql_storage_engine.cmake") SET(HEAP_SOURCES _check.c _rectest.c hp_block.c hp_clear.c hp_close.c hp_create.c ha_heap.cc hp_delete.c hp_extra.c hp_hash.c hp_info.c hp_open.c hp_panic.c diff --git a/storage/ibmdb2i/CMakeLists.txt b/storage/ibmdb2i/CMakeLists.txt index 11cc4300569..76ef3b2662d 100644 --- a/storage/ibmdb2i/CMakeLists.txt +++ b/storage/ibmdb2i/CMakeLists.txt @@ -13,13 +13,28 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX") -SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX") +SET(IBMDB2I_PLUGIN_DYNAMIC "ha_ibmdb2i") +CHECK_INCLUDE_FILES(qlgusr.h HAVE_PASE_ENVIRONMENT) +IF(HAVE_PASE_ENVIRONMENT) -INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/sql - ${CMAKE_SOURCE_DIR}/regex - ${CMAKE_SOURCE_DIR}/extra/yassl/include) -ADD_LIBRARY(ibmdb2i ha_ibmdb2i.cc db2i_ileBridge.cc db2i_conversion.cc +INCLUDE_DIRECTORIES( + ${CMAKE_SOURCE_DIR}/include + ${CMAKE_BINARY_DIR}/include + ${CMAKE_SOURCE_DIR}/regex + ${CMAKE_SOURCE_DIR}/sql + ${CMAKE_CURRENT_SOURCE_DIR} + /afs/rchland.ibm.com/lande/shadow/dev2000/osxpf/v5r4m0f.xpf/cur/cmvc/base.pgm/my.xpf/apis + /afs/rchland.ibm.com/lande/shadow/dev2000/osxpf/v5r4m0.xpf/bld/cmvc/base.pgm/lg.xpf + /afs/rchland.ibm.com/lande/shadow/dev2000/osxpf/v5r4m0.xpf/bld/cmvc/base.pgm/tq.xpf +) + + +SET (IBMDB2I_SOURCES ha_ibmdb2i.cc db2i_ileBridge.cc db2i_conversion.cc db2i_blobCollection.cc db2i_file.cc db2i_charsetSupport.cc db2i_collationSupport.cc db2i_errors.cc db2i_constraints.cc db2i_rir.cc db2i_sqlStatementStream.cc db2i_ioBuffers.cc db2i_myconv.cc) + +SET(IBMDB2I_LIBS iconv) +MYSQL_STORAGE_ENGINE(IBMDB2I) + +ENDIF(HAVE_PASE_ENVIRONMENT) diff --git a/storage/innobase/CMakeLists.txt b/storage/innobase/CMakeLists.txt index d67b518642c..c8ec56ee5c9 100644 --- a/storage/innobase/CMakeLists.txt +++ b/storage/innobase/CMakeLists.txt @@ -15,40 +15,127 @@ # This is the CMakeLists for InnoDB Plugin +INCLUDE(CheckFunctionExists) +INCLUDE(CheckCSourceCompiles) +INCLUDE(CheckCSourceRuns) -# TODO: remove the two FLAGS_DEBUG settings when merging into -# 6.0-based trees, like is already the case for other engines in -# those trees. -SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX") -SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX") +# OS tests +IF(UNIX) + IF(CMAKE_SYSTEM_NAME STREQUAL "Linux") + ADD_DEFINITIONS("-DUNIV_LINUX") + ELSEIF(CMAKE_SYSTEM_NAME MATCHES "HP*") + ADD_DEFINITIONS("-DUNIV_HPUX -DUNIV_MUST_NOT_INLINE") + ELSEIF(CMAKE_SYSTEM_NAME STREQUAL "AIX") + ADD_DEFINITIONS("-DUNIV_AIX -DUNIX_MUST_NOT_INLINE") + ELSEIF(CMAKE_SYSTEM_NAME STREQUAL "SunOS") + ADD_DEFINITIONS("-DUNIV_SOLARIS") + ELSE() + ADD_DEFINITIONS("-DUNIV_MUST_NOT_INLINE") + ENDIF() +ENDIF() -# Starting at 5.1.38, MySQL CMake files are simplified. But the plugin -# CMakeLists.txt still needs to work with previous versions of MySQL. -IF (MYSQL_VERSION_ID GREATER "50137") - INCLUDE("${PROJECT_SOURCE_DIR}/storage/mysql_storage_engine.cmake") -ENDIF (MYSQL_VERSION_ID GREATER "50137") +# Solaris atomics +IF(CMAKE_SYSTEM_NAME STREQUAL "SunOS") + CHECK_FUNCTION_EXISTS(atomic_cas_ulong HAVE_ATOMIC_CAS_ULONG) + CHECK_FUNCTION_EXISTS(atomic_cas_32 HAVE_ATOMIC_CAS_32) + CHECK_FUNCTION_EXISTS(atomic_cas_64 HAVE_ATOMIC_CAS_64) + CHECK_FUNCTION_EXISTS(atomic_add_long HAVE_ATOMIC_ADD_LONG) + IF(HAVE_ATOMIC_CAS_ULONG AND HAVE_ATOMIC_CAS_32 AND + HAVE_ATOMIC_CAS_64 AND HAVE_ATOMIC_ADD_LONG) + SET(HAVE_SOLARIS_ATOMICS 1) + ENDIF() +ENDIF() + +IF(HAVE_GCC_ATOMIC_BUILTINS) + CHECK_C_SOURCE_COMPILES(" + #include <pthread.h> + #include <string.h> + int main() + { + pthread_t x1; + pthread_t x2; + pthread_t x3; + __sync_bool_compare_and_swap(&x1, x2, x3); + return 0; + }" HAVE_ATOMIC_PTHREAD_T_GCC + ) +ENDIF() + +IF(NOT HAVE_ATOMIC_PTHREAD_T_GCC AND HAVE_SOLARIS_ATOMICS) + CHECK_C_SOURCE_COMPILES(" + #include <pthread.h> + int main() + { + pthread_t x = 0; + return(0); + }" HAVE_ATOMIC_PTHREAD_T_SOLARIS + ) + IF(HAVE_ATOMIC_PTHREAD_T_SOLARIS) + SET(CMAKE_EXTRA_INCLUDE_FILES pthread.h) + CHECK_TYPE_SIZE(pthread_t SIZEOF_PTHREAD_T) + SET(CMAKE_EXTRA_INCLUDE_FILES) + ENDIF() +ENDIF() + +IF(NOT CMAKE_CROSSCOMPILING) + STRING(TOLOWER ${CMAKE_SYSTEM_PROCESSOR} processor) + IF(NOT WIN32 AND processor MATCHES "86" OR processor MATCHES "amd64" + OR processor MATCHES "x64") + # Check for x86 PAUSE instruction + # We have to actually try running the test program, because of a bug + # in Solaris on x86_64, where it wrongly reports that PAUSE is not + # supported when trying to run an application. See + # http://bugs.opensolaris.org/bugdatabase/printableBug.do?bug_id=6478684 + CHECK_C_SOURCE_RUNS(" + int main() + { + __asm__ __volatile__ (\"pause\"); + return 0; + }" IB_HAVE_PAUSE_INSTRUCTION) + ENDIF() +ENDIF() + +IF(HAVE_ATOMIC_PTHREAD_T_SOLARIS OR HAVE_ATOMIC_PTHREAD_T_GCC) + ADD_DEFINITIONS(-DHAVE_ATOMIC_PTHREAD_T=1) +ENDIF() + +IF(HAVE_SOLARIS_ATOMICS) + ADD_DEFINITIONS(-DHAVE_SOLARIS_ATOMICS=1) +ENDIF() + +IF(IB_HAVE_PAUSE_INSTRUCTIONS) + ADD_DEFINITIONS(-DIB_HAVE_PAUSE_INSTRUCTIONS=1) +ENDIF() + +IF(SIZEOF_PTHREAD_T) + ADD_DEFINITIONS(-DSIZEOF_PTHREAD_T=${SIZEOF_PTHREAD_T}) +ENDIF() + +IF(MSVC) + ADD_DEFINITIONS(-DHAVE_WINDOWS_ATOMICS -DIB_HAVE_PAUSE_INSTRUCTION) +ENDIF() -IF (CMAKE_SIZEOF_VOID_P MATCHES 8) - SET(WIN64 TRUE) -ENDIF (CMAKE_SIZEOF_VOID_P MATCHES 8) # Include directories under innobase INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/storage/innobase/include ${CMAKE_SOURCE_DIR}/storage/innobase/handler) -# Include directories under mysql -INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include - ${CMAKE_SOURCE_DIR}/sql - ${CMAKE_SOURCE_DIR}/regex - ${CMAKE_SOURCE_DIR}/zlib - ${CMAKE_SOURCE_DIR}/extra/yassl/include) +# Sun Studio bug with -xO2 +IF(CMAKE_C_COMPILER_ID MATCHES "SunPro" + AND CMAKE_C_FLAGS_RELEASE MATCHES "O2" + AND NOT CMAKE_BUILD_TYPE STREQUAL "Debug") + # Sun Studio 12 crashes with -xO2 flag, but not with higher optimization + # -xO3 + SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/rem/rem0rec.c + PROPERTIES COMPILE_FLAGS -xO3) +ENDIF() # Removing compiler optimizations for innodb/mem/* files on 64-bit Windows # due to 64-bit compiler error, See MySQL Bug #19424, #36366, #34297 -IF (MSVC AND $(WIN64)) +IF (MSVC AND CMAKE_SIZEOF_VOIDP EQUAL 8) SET_SOURCE_FILES_PROPERTIES(mem/mem0mem.c mem/mem0pool.c PROPERTIES COMPILE_FLAGS -Od) -ENDIF (MSVC AND $(WIN64)) +ENDIF() SET(INNOBASE_SOURCES btr/btr0btr.c btr/btr0cur.c btr/btr0pcur.c btr/btr0sea.c buf/buf0buddy.c buf/buf0buf.c buf/buf0flu.c buf/buf0lru.c buf/buf0rea.c @@ -83,20 +170,42 @@ SET(INNOBASE_SOURCES btr/btr0btr.c btr/btr0cur.c btr/btr0pcur.c btr/btr0sea.c usr/usr0sess.c ut/ut0byte.c ut/ut0dbg.c ut/ut0mem.c ut/ut0rnd.c ut/ut0ut.c ut/ut0vec.c ut/ut0list.c ut/ut0wqueue.c) -ADD_DEFINITIONS(-DHAVE_WINDOWS_ATOMICS -DIB_HAVE_PAUSE_INSTRUCTION) -IF (MYSQL_VERSION_ID GREATER "50137") +IF(WITH_INNODB) + # Legacy option + SET(WITH_INNOBASE_STORAGE_ENGINE TRUE) +ENDIF() + +SET(INNOBASE_PLUGIN_STATIC "innobase") +SET(INNOBASE_PLUGIN_DYNAMIC "ha_innodb") + +# Innobase depends on zlib. If server links with system +# zlib shared library, and innobase builds as shared library, +# innobase need to link with it too, to avoid unresolved symbols. +IF(ZLIB_FOUND AND NOT WITH_ZLIB STREQUAL "bundled") + SET(INNOBASE_LIBS ${ZLIB_LIBRARY}) +ENDIF() + +#The plugin's CMakeLists.txt still needs to work with previous versions of MySQL. +IF(EXISTS ${SOURCE_DIR}/storage/mysql_storage_engine.cmake) + # Old plugin support on Windows only, + # use tricks to force ha_innodb.dll name for DLL + INCLUDE(${SOURCE_DIR}/storage/mysql_storage_engine.cmake) MYSQL_STORAGE_ENGINE(INNOBASE) - # Use ha_innodb for plugin name, if plugin is built GET_TARGET_PROPERTY(LIB_LOCATION ha_innobase LOCATION) IF(LIB_LOCATION) SET_TARGET_PROPERTIES(ha_innobase PROPERTIES OUTPUT_NAME ha_innodb) - ENDIF(LIB_LOCATION) -ELSE (MYSQL_VERSION_ID GREATER "50137") + ENDIF() +ELSEIF (MYSQL_VERSION_ID LESS "50137") + # Windows only, no plugin support IF (NOT SOURCE_SUBLIBS) - ADD_DEFINITIONS(-D_WIN32 -DMYSQL_SERVER) + ADD_DEFINITIONS(-DMYSQL_SERVER) ADD_LIBRARY(innobase STATIC ${INNOBASE_SOURCES}) # Require mysqld_error.h, which is built as part of the GenError ADD_DEPENDENCIES(innobase GenError) - ENDIF (NOT SOURCE_SUBLIBS) -ENDIF (MYSQL_VERSION_ID GREATER "50137") + ENDIF() +ELSE() + # New plugin support, cross-platform , name for shared library + # is given in INNOBASE_PLUGIN_STATIC and INNOBASE_PLUGIN_DYNAMIC + MYSQL_STORAGE_ENGINE(INNOBASE) +ENDIF() diff --git a/storage/innobase/include/page0page.ic b/storage/innobase/include/page0page.ic index 318ec1cc1f2..8f794410f20 100644 --- a/storage/innobase/include/page0page.ic +++ b/storage/innobase/include/page0page.ic @@ -907,7 +907,7 @@ page_get_data_size( /************************************************************//** Allocates a block of memory from the free list of an index page. */ -UNIV_INTERN +UNIV_INLINE void page_mem_alloc_free( /*================*/ diff --git a/storage/myisam/CMakeLists.txt b/storage/myisam/CMakeLists.txt index 829d89a798a..080448eb3f6 100755 --- a/storage/myisam/CMakeLists.txt +++ b/storage/myisam/CMakeLists.txt @@ -12,9 +12,9 @@ # 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("${PROJECT_SOURCE_DIR}/storage/mysql_storage_engine.cmake") -INCLUDE("${PROJECT_SOURCE_DIR}/win/mysql_manifest.cmake") +SET(MYISAM_PLUGIN_STATIC "myisam") +SET(MYISAM_PLUGIN_MANDATORY TRUE) SET(MYISAM_SOURCES ft_boolean_search.c ft_nlq_search.c ft_parser.c ft_static.c ft_stem.c ha_myisam.cc @@ -30,26 +30,38 @@ SET(MYISAM_SOURCES ft_boolean_search.c ft_nlq_search.c ft_parser.c ft_static.c MYSQL_STORAGE_ENGINE(MYISAM) -IF(NOT SOURCE_SUBLIBS) - ADD_EXECUTABLE(myisam_ftdump myisam_ftdump.c) - TARGET_LINK_LIBRARIES(myisam_ftdump myisam mysys dbug strings zlib) +ADD_EXECUTABLE(myisam_ftdump myisam_ftdump.c) +TARGET_LINK_LIBRARIES(myisam_ftdump myisam mysys) - ADD_EXECUTABLE(myisamchk myisamchk.c) - TARGET_LINK_LIBRARIES(myisamchk myisam mysys dbug strings zlib) +ADD_EXECUTABLE(myisamchk myisamchk.c) +TARGET_LINK_LIBRARIES(myisamchk myisam mysys) - ADD_EXECUTABLE(myisamlog myisamlog.c) - TARGET_LINK_LIBRARIES(myisamlog myisam mysys dbug strings zlib) +ADD_EXECUTABLE(myisamlog myisamlog.c) +TARGET_LINK_LIBRARIES(myisamlog myisam mysys) - ADD_EXECUTABLE(myisampack myisampack.c) - TARGET_LINK_LIBRARIES(myisampack myisam mysys dbug strings zlib) +ADD_EXECUTABLE(myisampack myisampack.c) - SET_TARGET_PROPERTIES(myisamchk myisampack PROPERTIES LINK_FLAGS "setargv.obj") +TARGET_LINK_LIBRARIES(myisampack myisam mysys) + +IF(WITH_UNIT_TESTS AND FALSE) + ADD_EXECUTABLE(mi_test1 mi_test1.c) + TARGET_LINK_LIBRARIES(mi_test1 myisam mysys) + + ADD_EXECUTABLE(mi_test2 mi_test2.c) + TARGET_LINK_LIBRARIES(mi_test2 myisam mysys) - IF(EMBED_MANIFESTS) - MYSQL_EMBED_MANIFEST("myisam_ftdump" "asInvoker") - MYSQL_EMBED_MANIFEST("myisamchk" "asInvoker") - MYSQL_EMBED_MANIFEST("myisamlog" "asInvoker") - MYSQL_EMBED_MANIFEST("myisampack" "asInvoker") - ENDIF(EMBED_MANIFESTS) + ADD_EXECUTABLE(mi_test3 mi_test3.c) + TARGET_LINK_LIBRARIES(mi_test3 myisam mysys) + + ADD_EXECUTABLE(sp_test sp_test.c) + TARGET_LINK_LIBRARIES(sp_test myisam mysys) + + ADD_EXECUTABLE(rt_test rt_test.c) + TARGET_LINK_LIBRARIES(rt_test myisam mysys) +ENDIF() + +IF (MSVC) + SET_TARGET_PROPERTIES(myisamchk myisampack PROPERTIES LINK_FLAGS "setargv.obj") +ENDIF() -ENDIF(NOT SOURCE_SUBLIBS) +INSTALL(TARGETS myisamchk myisamlog myisampack myisam_ftdump DESTINATION bin) diff --git a/storage/myisammrg/CMakeLists.txt b/storage/myisammrg/CMakeLists.txt index c545d04a780..206848b1715 100755 --- a/storage/myisammrg/CMakeLists.txt +++ b/storage/myisammrg/CMakeLists.txt @@ -13,7 +13,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("${PROJECT_SOURCE_DIR}/storage/mysql_storage_engine.cmake") +SET(MYISAMMRG_PLUGIN_STATIC "myisammrg") +SET(MYISAMMRG_PLUGIN_MANDATORY 1) SET(MYISAMMRG_SOURCES myrg_close.c myrg_create.c myrg_delete.c myrg_extra.c myrg_info.c ha_myisammrg.cc diff --git a/storage/mysql_storage_engine.cmake b/storage/mysql_storage_engine.cmake deleted file mode 100644 index b920f16452b..00000000000 --- a/storage/mysql_storage_engine.cmake +++ /dev/null @@ -1,44 +0,0 @@ -# MYSQL_STORAGE_ENGINE Macro creates a project to build storage engine -# library. -# -# Parameters: -# engine - storage engine name. -# variable ENGINE_BUILD_TYPE should be set to "STATIC" or "DYNAMIC" -# Remarks: -# ${engine}_SOURCES variable containing source files to produce the library must set before -# calling this macro -# ${engine}_LIBS variable containing extra libraries to link with may be set - - -MACRO(MYSQL_STORAGE_ENGINE engine) -IF(NOT SOURCE_SUBLIBS) - # Add common include directories - INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/zlib - ${CMAKE_SOURCE_DIR}/sql - ${CMAKE_SOURCE_DIR}/regex - ${CMAKE_SOURCE_DIR}/extra/yassl/include) - STRING(TOUPPER ${engine} engine) - STRING(TOLOWER ${engine} libname) - IF(${ENGINE_BUILD_TYPE} STREQUAL "STATIC") - ADD_DEFINITIONS(-DWITH_${engine}_STORAGE_ENGINE -DMYSQL_SERVER) - #Create static library. The name of the library is <storage_engine>.lib - ADD_LIBRARY(${libname} ${${engine}_SOURCES}) - ADD_DEPENDENCIES(${libname} GenError) - IF(${engine}_LIBS) - TARGET_LINK_LIBRARIES(${libname} ${${engine}_LIBS}) - ENDIF(${engine}_LIBS) - MESSAGE("build ${engine} as static library") - ELSEIF(${ENGINE_BUILD_TYPE} STREQUAL "DYNAMIC") - ADD_DEFINITIONS(-DMYSQL_DYNAMIC_PLUGIN) - #Create a DLL.The name of the dll is ha_<storage_engine>.dll - #The dll is linked to the mysqld executable - SET(dyn_libname ha_${libname}) - ADD_LIBRARY(${dyn_libname} SHARED ${${engine}_SOURCES}) - TARGET_LINK_LIBRARIES (${dyn_libname} mysqlservices mysqld) - IF(${engine}_LIBS) - TARGET_LINK_LIBRARIES(${dyn_libname} ${${engine}_LIBS}) - ENDIF(${engine}_LIBS) - MESSAGE("build ${engine} as DLL") - ENDIF(${ENGINE_BUILD_TYPE} STREQUAL "STATIC") -ENDIF(NOT SOURCE_SUBLIBS) -ENDMACRO(MYSQL_STORAGE_ENGINE) diff --git a/strings/CMakeLists.txt b/strings/CMakeLists.txt index 294a129fc1b..79fe03f019a 100755 --- a/strings/CMakeLists.txt +++ b/strings/CMakeLists.txt @@ -22,8 +22,8 @@ SET(STRINGS_SOURCES bchange.c bcmp.c bfill.c bmove512.c bmove_upp.c ctype-big5.c is_prefix.c llstr.c longlong2str.c my_strtoll10.c my_vsnprintf.c r_strinstr.c str2int.c str_alloc.c strcend.c strend.c strfill.c strmake.c strmov.c strnmov.c strtod.c strtol.c strtoll.c strtoul.c strtoull.c strxmov.c strxnmov.c xml.c - my_strchr.c strcont.c strinstr.c strnlen.c) + my_strchr.c strcont.c strinstr.c strnlen.c strappend.c) + +USE_ABSOLUTE_FILENAMES(STRINGS_SOURCES) +ADD_LIBRARY(strings ${STRINGS_SOURCES}) -IF(NOT SOURCE_SUBLIBS) - ADD_LIBRARY(strings ${STRINGS_SOURCES}) -ENDIF(NOT SOURCE_SUBLIBS) diff --git a/support-files/CMakeLists.txt b/support-files/CMakeLists.txt new file mode 100644 index 00000000000..f8aa1f329f5 --- /dev/null +++ b/support-files/CMakeLists.txt @@ -0,0 +1,61 @@ +# 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 + +IF(WIN32) + SET(localstatedir "C:\\mysql\\data") + SET(install_destination .) + SET(ini_file_extension "ini") +ELSE() + SET(localstatedir "/usr/local/mysql/data") + SET(prefix "/usr/local") + SET(libexedir "/usr/local/mysql/bin") + SET(bindir "/usr/local/mysql/bin" ) + SET(sbindir "/usr/local/mysql/bin") + SET(datadir "/usr/local/mysql/data") + SET(CC ${CMAKE_C_COMPILER}) + SET(CXX ${CMAKE_CXX_COMPILER}) + SET(CFLAGS ${CMAKE_C_COMPILE_FLAGS}) + SET(CXXFLAGS ${CMAKE_COMPILE_CXX_FLAGS}) + SET(MYSQLD_USER "mysql") + SET(install_destination "support-files") + SET(ini_file_extension "cnf") +ENDIF() + +FOREACH(inifile my-huge my-innodb-heavy-4G my-large my-medium my-small) + CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/${inifile}.cnf.sh + ${CMAKE_CURRENT_BINARY_DIR}/${inifile}.${ini_file_extension} @ONLY) + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${inifile}.${ini_file_extension} DESTINATION ${install_destination}) + +ENDFOREACH() + +IF(UNIX) + FILE(GLOB ndb_ini_files ${CMAKE_CURRENT_SOURCE_DIR}/*.ini) + INSTALL(FILES ${ndb_ini_files} DESTINATION ${install_destination}) + + FOREACH(script mysql.server mysqld_multi.server mysql-log-rotate) + CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/${script}.sh + ${CMAKE_CURRENT_BINARY_DIR}/${script} @ONLY ) + + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${script} DESTINATION support-files + PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) + ENDFOREACH() + INSTALL(FILES magic DESTINATION support-files) + INSTALL(FILES mysql.m4 DESTINATION share/aclocal) + CONFIGURE_FILE(MySQL-shared-compat.spec.sh ${CMAKE_CURRENT_BINARY_DIR}/MySQL-shared-compat.spec @ONLY) + CONFIGURE_FILE(mysql.spec.sh ${CMAKE_CURRENT_BINARY_DIR}/mysql.spec @ONLY) + CONFIGURE_FILE(mysql.spec.sh ${CMAKE_CURRENT_BINARY_DIR}/mysql.${VERSION}.spec @ONLY) + CONFIGURE_FILE(MySQL-shared-compat.spec.sh ${CMAKE_CURRENT_BINARY_DIR}/MySQL-shared-compat.spec @ONLY) +ENDIF() + diff --git a/support-files/Makefile.am b/support-files/Makefile.am index 47e8c395b31..9718c6e7ebf 100644 --- a/support-files/Makefile.am +++ b/support-files/Makefile.am @@ -34,7 +34,8 @@ EXTRA_DIST = mysql.spec.sh \ MySQL-shared-compat.spec.sh \ ndb-config-2-node.ini.sh \ compiler_warnings.supp \ - dtrace + dtrace \ + CMakeLists.txt SUBDIRS = MacOSX RHEL4-SElinux diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 0ee8769cd23..ea2f41abb73 100755 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -17,8 +17,14 @@ ADD_DEFINITIONS("-DMYSQL_CLIENT") INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include) -ADD_EXECUTABLE(mysql_client_test mysql_client_test.c ../mysys/my_memmem.c) +ADD_EXECUTABLE(mysql_client_test mysql_client_test.c) TARGET_LINK_LIBRARIES(mysql_client_test mysqlclient) +SET_TARGET_PROPERTIES(mysql_client_test PROPERTIES LINKER_LANGUAGE CXX) -ADD_EXECUTABLE(bug25714 bug25714.c) -TARGET_LINK_LIBRARIES(bug25714 mysqlclient) +IF(WITH_UNIT_TESTS) + ADD_EXECUTABLE(bug25714 bug25714.c) + TARGET_LINK_LIBRARIES(bug25714 mysqlclient) + SET_TARGET_PROPERTIES(bug25714 PROPERTIES LINKER_LANGUAGE CXX) +ENDIF() + +INSTALL(TARGETS mysql_client_test DESTINATION bin) diff --git a/unittest/mysys/CMakeLists.txt b/unittest/mysys/CMakeLists.txt new file mode 100644 index 00000000000..94eb3159693 --- /dev/null +++ b/unittest/mysys/CMakeLists.txt @@ -0,0 +1,36 @@ +# Copyright (C) 2007 MySQL AB, 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 + +INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include + ${CMAKE_SOURCE_DIR}/sql + ${CMAKE_SOURCE_DIR}/regex + ${CMAKE_SOURCE_DIR}/extra/yassl/include + ${CMAKE_SOURCE_DIR}/unittest/mytap) + + +MACRO (MY_ADD_TEST name) + ADD_EXECUTABLE(${name}-t ${name}-t.c) + TARGET_LINK_LIBRARIES(${name}-t mytap mysys) + ADD_TEST(${name} ${name}-t) +ENDMACRO() + + +FOREACH(testname bitmap base64 my_vsnprintf) + MY_ADD_TEST(${testname}) +ENDFOREACH() +IF(NOT WIN32) + # does not work on Windows in 5.x codebase + MY_ADD_TEST(my_atomic) +ENDIF() diff --git a/unittest/mysys/Makefile.am b/unittest/mysys/Makefile.am index 56c65d71396..2dfa6d7698a 100644 --- a/unittest/mysys/Makefile.am +++ b/unittest/mysys/Makefile.am @@ -22,6 +22,8 @@ LDADD = $(top_builddir)/unittest/mytap/libmytap.a \ $(top_builddir)/strings/libmystrings.a noinst_PROGRAMS = bitmap-t base64-t my_vsnprintf-t +EXTRA_DIST = CMakeLists.txt + if NEED_THREAD # my_atomic-t is used to check thread functions, so it is safe to diff --git a/unittest/mytap/CMakeLists.txt b/unittest/mytap/CMakeLists.txt new file mode 100644 index 00000000000..8a2f6c9639a --- /dev/null +++ b/unittest/mytap/CMakeLists.txt @@ -0,0 +1,18 @@ +# Copyright (C) 2007 MySQL AB, 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 + + +INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include) +ADD_LIBRARY(mytap tap.c) diff --git a/unittest/mytap/Makefile.am b/unittest/mytap/Makefile.am index c02bcd3b49d..8feefb134bb 100644 --- a/unittest/mytap/Makefile.am +++ b/unittest/mytap/Makefile.am @@ -20,6 +20,8 @@ noinst_HEADERS = tap.h libmytap_a_SOURCES = tap.c +EXTRA_DIST = CMakeLists.txt + SUBDIRS = . t # Don't update the files from bitkeeper diff --git a/unittest/mytap/tap.c b/unittest/mytap/tap.c index 4e053e3e745..34a3b933eba 100644 --- a/unittest/mytap/tap.c +++ b/unittest/mytap/tap.c @@ -151,7 +151,9 @@ static signal_entry install_signal[]= { { SIGABRT, handle_core_signal }, { SIGFPE, handle_core_signal }, { SIGSEGV, handle_core_signal }, +#ifdef SIGBUS { SIGBUS, handle_core_signal } +#endif #ifdef SIGXCPU , { SIGXCPU, handle_core_signal } #endif @@ -167,7 +169,7 @@ static signal_entry install_signal[]= { }; void -plan(int const count) +plan(int count) { /* Install signal handler @@ -201,7 +203,7 @@ skip_all(char const *reason, ...) } void -ok(int const pass, char const *fmt, ...) +ok(int pass, char const *fmt, ...) { va_list ap; va_start(ap, fmt); @@ -218,7 +220,7 @@ ok(int const pass, char const *fmt, ...) void -skip(int how_many, char const *const fmt, ...) +skip(int how_many, char const *fmt, ...) { char reason[80]; if (fmt && *fmt) diff --git a/vio/CMakeLists.txt b/vio/CMakeLists.txt index e1bd57d150f..6f44ecadb21 100755 --- a/vio/CMakeLists.txt +++ b/vio/CMakeLists.txt @@ -14,13 +14,12 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -ADD_DEFINITIONS(-DUSE_SYMDIR) -INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/extra/yassl/include) +INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include +${SSL_INCLUDE_DIRS}) +ADD_DEFINITIONS(${SSL_DEFINES}) SET(VIO_SOURCES vio.c viosocket.c viossl.c viosslfactories.c) - -IF(NOT SOURCE_SUBLIBS) - ADD_LIBRARY(vio ${VIO_SOURCES}) - ADD_DEPENDENCIES(vio GenError) -ENDIF(NOT SOURCE_SUBLIBS) +USE_ABSOLUTE_FILENAMES(VIO_SOURCES) +ADD_LIBRARY(vio ${VIO_SOURCES}) +ADD_DEPENDENCIES(vio GenError) diff --git a/win/create_def_file.js b/win/create_def_file.js index aaaf4659736..21f884417e3 100644 --- a/win/create_def_file.js +++ b/win/create_def_file.js @@ -173,6 +173,7 @@ function IsCompilerDefinedSymbol(symbol) (symbol.indexOf("??_R") != -1) || (symbol.indexOf("??_7") != -1) || (symbol.indexOf("?_G") != -1) || // scalar deleting destructor + (symbol.indexOf("_VInfreq_?") != -1) || // special label (exception handler?) for Intel compiler (symbol.indexOf("?_E") != -1)); // vector deleting destructor } diff --git a/zlib/CMakeLists.txt b/zlib/CMakeLists.txt index 43235b631f6..2d0706d024e 100755 --- a/zlib/CMakeLists.txt +++ b/zlib/CMakeLists.txt @@ -13,18 +13,15 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# Note that this library is not using any "Thread Local Storage" (TLS), -# i.e. no data declared "__declspec(thread)" or allocated with TlsAlloc(). -# Not directly and indirectly using any of the macros for creating and -# using the storage, pthread_key*(), {,my_}{set,get}_specific*() .... -INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/zlib) - -SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D_DEBUG") +INCLUDE_DIRECTORIES( +${CMAKE_SOURCE_DIR}/include +${CMAKE_SOURCE_DIR}/zlib +) SET(ZLIB_SOURCES adler32.c compress.c crc32.c crc32.h deflate.c deflate.h gzio.c infback.c inffast.c inffast.h inffixed.h inflate.c inflate.h inftrees.c inftrees.h trees.c trees.h uncompr.c zconf.h zlib.h zutil.c zutil.h) -IF(NOT SOURCE_SUBLIBS) - ADD_LIBRARY(zlib ${ZLIB_SOURCES}) -ENDIF(NOT SOURCE_SUBLIBS) +USE_ABSOLUTE_FILENAMES(ZLIB_SOURCES) +ADD_LIBRARY(zlib ${ZLIB_SOURCES}) + |