From: Vladislav Vaintroub Date: December 13 2009 10:13pm Subject: bzr commit into mysql-6.0-codebase branch (wlad:3737) WL#5161 List-Archive: http://lists.mysql.com/commits/93818 Message-Id: <200912132213.nBDMDpPR015263@sol.local> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0677972885==" --===============0677972885== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///export/home/wlad/bzr/mysql-6.0-codebase/ based on revid:alik@stripped 3737 Vladislav Vaintroub 2009-12-13 Port WL#5161 to 6.0 codebase added: BUILD-CMAKE BUILD/choose_configure.sh cmake/ cmake/Makefile.am cmake/abi_check.cmake cmake/bison.cmake cmake/cat.cmake cmake/character_sets.cmake cmake/check_minimal_version.cmake cmake/cmake_parse_arguments.cmake cmake/configurable_file_content.in cmake/configure.pl cmake/create_initial_db.cmake.in cmake/do_abi_check.cmake cmake/dtrace.cmake cmake/dtrace_prelink.cmake cmake/install_macros.cmake cmake/libutils.cmake cmake/make_dist.cmake.in cmake/merge_archives_unix.cmake.in cmake/mysql_version.cmake cmake/plugin.cmake cmake/readline.cmake cmake/ssl.cmake cmake/stack_direction.c cmake/zlib.cmake cmd-line-utils/libedit/CMakeLists.txt cmd-line-utils/readline/CMakeLists.txt config.h.cmake configure.cmake include/CMakeLists.txt man/CMakeLists.txt mysql-test/CMakeLists.txt mysql-test/mtr.out-of-source plugin/daemon_example/CMakeLists.txt plugin/fulltext/CMakeLists.txt scripts/install_scripts.cmake.in sql-bench/CMakeLists.txt sql/main.cc sql/share/CMakeLists.txt support-files/CMakeLists.txt modified: BUILD/Makefile.am BUILD/autorun.sh CMakeLists.txt Makefile.am client/CMakeLists.txt client/mysqltest.cc cmd-line-utils/libedit/Makefile.am cmd-line-utils/readline/Makefile.am configure.in dbug/CMakeLists.txt extra/CMakeLists.txt extra/yassl/CMakeLists.txt extra/yassl/taocrypt/CMakeLists.txt include/Makefile.am include/keycache.h include/my_atomic.h include/my_global.h include/my_pthread.h include/my_sys.h include/mysql/plugin.h include/thr_alarm.h libmysql/CMakeLists.txt libmysql/libmysql.def libmysqld/CMakeLists.txt libmysqld/examples/CMakeLists.txt libmysqld/lib_sql.cc man/Makefile.am mysql-test/Makefile.am mysql-test/lib/My/ConfigFactory.pm mysql-test/lib/My/Find.pm mysql-test/lib/My/SafeProcess.pm mysql-test/lib/My/SafeProcess/CMakeLists.txt mysql-test/lib/My/SafeProcess/safe_kill_win.cc mysql-test/lib/My/SafeProcess/safe_process_win.cc mysql-test/mysql-test-run.pl mysql-test/t/fulltext_plugin.test mysys/CMakeLists.txt mysys/my_create.c mysys/my_getsystime.c mysys/my_winthread.c mysys/mysys_priv.h plugin/daemon_example/Makefile.am plugin/fulltext/Makefile.am plugin/semisync/CMakeLists.txt regex/CMakeLists.txt regex/regex2.h scripts/CMakeLists.txt scripts/Makefile.am sql-bench/Makefile.am sql/CMakeLists.txt sql/Makefile.am sql/backup/CMakeLists.txt sql/mysqld.cc sql/nt_servc.cc sql/share/Makefile.am sql/sql_builtin.cc.in sql/sql_class.h storage/Makefile.am storage/archive/CMakeLists.txt storage/blackhole/CMakeLists.txt storage/csv/CMakeLists.txt storage/example/CMakeLists.txt storage/federated/CMakeLists.txt storage/heap/CMakeLists.txt storage/ibmdb2i/CMakeLists.txt storage/innobase/CMakeLists.txt storage/innobase/handler/ha_innodb.cc storage/myisam/CMakeLists.txt storage/myisammrg/CMakeLists.txt strings/CMakeLists.txt support-files/Makefile.am tests/CMakeLists.txt unittest/mysys/CMakeLists.txt unittest/mytap/CMakeLists.txt vio/CMakeLists.txt win/create_def_file.js zlib/CMakeLists.txt === added file 'BUILD-CMAKE' --- a/BUILD-CMAKE 1970-01-01 00:00:00 +0000 +++ b/BUILD-CMAKE 2009-12-13 22:13:25 +0000 @@ -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 /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 /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 +/CMakeFiles/CMakeError.log and +/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 +/sql/CMakeFiles/mysqld.dir/flags.make and the linker command line +is in /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. === modified file 'BUILD/Makefile.am' --- a/BUILD/Makefile.am 2009-04-06 23:03:28 +0000 +++ b/BUILD/Makefile.am 2009-12-13 22:13:25 +0000 @@ -20,6 +20,7 @@ EXTRA_DIST = FINISH.sh \ SETUP.sh \ autorun.sh \ + choose_configure.sh \ build_mccge.sh \ check-cpu \ cleanup \ === modified file 'BUILD/autorun.sh' --- a/BUILD/autorun.sh 2008-04-25 06:32:23 +0000 +++ b/BUILD/autorun.sh 2009-12-13 22:13:25 +0000 @@ -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 || # and --force to overwrite them if they already exist automake --add-missing --force --copy --gnu -W no-portability || 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 === added file 'BUILD/choose_configure.sh' --- a/BUILD/choose_configure.sh 1970-01-01 00:00:00 +0000 +++ b/BUILD/choose_configure.sh 2009-12-13 22:13:25 +0000 @@ -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 + === modified file 'CMakeLists.txt' --- a/CMakeLists.txt 2009-12-02 16:14:13 +0000 +++ b/CMakeLists.txt 2009-12-13 22:13:25 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2006 MySQL AB, 2009 Sun Microsystems, Inc +# 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,347 +13,229 @@ # 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.0 FATAL_ERROR) -IF(COMMAND cmake_policy) - cmake_policy(SET CMP0005 NEW) -ENDIF(COMMAND cmake_policy) +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) +# Avoid warnings in higher versions +if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" GREATER 2.6) + CMAKE_POLICY(VERSION 2.8) +endif() + + +# 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. + + +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() + +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() -PROJECT(MySql) +IF(WIN32) + 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/libutils.cmake) +INCLUDE(cmake/dtrace.cmake) +INCLUDE(cmake/plugin.cmake) +INCLUDE(cmake/install_macros.cmake) + +# Handle options +OPTION(DISABLE_SHARED + "Don't build shared libraries, compile code as position-dependent" OFF) +IF(DISABLE_SHARED) + SET(WITHOUT_DYNAMIC_PLUGINS 1) +ENDIF() +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 DISABLE_SHARED) + + +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() -# This reads user configuration, generated by configure.js. -INCLUDE(${CMAKE_SOURCE_DIR}/win/configure.data) -# Hardcode support for CSV storage engine -SET(WITH_CSV_STORAGE_ENGINE TRUE) -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") - -# Enable IPv6 handling code -ADD_DEFINITIONS(-DHAVE_IPV6) - -# 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") - -IF(BACKUP_TEST) - ADD_DEFINITIONS(-D BACKUP_TEST) -ENDIF(BACKUP_TEST) - -# 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") - -# 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") - - -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") - -#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") - - -# 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) - - # 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) +# 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}) + 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) - 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}) - STRING (REGEX MATCH "MYSQL_PLUGIN_DISABLED" MYSQL_PLUGIN_DISABLED ${PLUGIN_FILE_CONTENT}) - - IF(MYSQL_PLUGIN_MANDATORY) - SET(WITH_${ENGINE}_STORAGE_ENGINE TRUE) - ENDIF(MYSQL_PLUGIN_MANDATORY) - - IF(MYSQL_PLUGIN_DISABLED) - MESSAGE("Plugin ${ENGINE} disabled") - SET(WITHOUT_${ENGINE}_STORAGE_ENGINE TRUE) - ENDIF(MYSQL_PLUGIN_DISABLED) - - 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}) - IF(EXISTS ${DIR}/unittest) - ADD_SUBDIRECTORY(${DIR}/unittest) - ENDIF(EXISTS ${DIR}/unittest) -ENDFOREACH(DIR ${STATIC_ENGINE_DIRECTORIES}) - -SET (ENGINE_BUILD_TYPE "DYNAMIC") -FOREACH(DIR ${DYNAMIC_ENGINE_DIRECTORIES}) - IF(EXISTS ${DIR}/unittest) - ADD_SUBDIRECTORY(${DIR}/unittest) - ENDIF(EXISTS ${DIR}/unittest) - 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) + INCLUDE(win/configure.data OPTIONAL) +ENDIF() -# FIXME "debug" only needed if build type is "Debug", but -# CMAKE_BUILD_TYPE is not set during configure time. -ADD_SUBDIRECTORY(vio) +# 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) +SET (MYSQLD_STATIC_PLUGIN_LIBS "" CACHE INTERNAL "") + # 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) -ADD_SUBDIRECTORY(unittest/mytap) -ADD_SUBDIRECTORY(unittest/examples) -ADD_SUBDIRECTORY(unittest/mysys) -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() + +ADD_SUBDIRECTORY(extra) +IF(NOT WITHOUT_SERVER) + ADD_SUBDIRECTORY(tests) + 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 ) +CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/sql/sql_builtin.cc.in + ${CMAKE_BINARY_DIR}/sql/sql_builtin.cc) + +# 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() === modified file 'Makefile.am' --- a/Makefile.am 2009-12-01 01:33:55 +0000 +++ b/Makefile.am 2009-12-13 22:13:25 +0000 @@ -21,7 +21,7 @@ AUTOMAKE_OPTIONS = foreign # "CMakeLists.txt" is for Windows only, EXTRA_DIST = INSTALL-SOURCE INSTALL-WIN-SOURCE \ README COPYING EXCEPTIONS-CLIENT \ - CMakeLists.txt + CMakeLists.txt configure.cmake config.h.cmake BUILD-CMAKE SUBDIRS = . include @docs_dirs@ @zlib_dir@ \ @readline_topdir@ sql-common scripts \ @@ -30,8 +30,8 @@ SUBDIRS = . include @docs_dirs@ @zlib_d @sql_server@ unittest @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 \ @@ -40,6 +40,7 @@ DIST_SUBDIRS = . include Docs zlib \ netware libmysqld \ mysql-test support-files sql-bench \ win \ + cmake \ BUILD DISTCLEANFILES = ac_available_languages_fragment @@ -58,6 +59,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@ === modified file 'client/CMakeLists.txt' --- a/client/CMakeLists.txt 2009-10-03 19:49:08 +0000 +++ b/client/CMakeLists.txt 2009-12-13 22:13:25 +0000 @@ -12,75 +12,80 @@ # 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 - ${CMAKE_SOURCE_DIR}/sql/backup) - -ADD_EXECUTABLE(mysql completion_hash.cc mysql.cc readline.cc sql_string.cc ../mysys/my_conio.c) +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}/sql/backup + ${CMAKE_SOURCE_DIR}/strings + ${READLINE_INCLUDE_DIR} + ${CMAKE_CURRENT_BINARY_DIR} +) + +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(mysqlbackup mysqlbackup.cc - backup_stream.c - ../sql/backup/stream_v1.c - ../sql/backup/stream_v1_transport.c) -TARGET_LINK_LIBRARIES(mysqlbackup mysqlclient ws2_32) - -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(mysqlbackup mysqlbackup.cc backup_stream.c) +TARGET_LINK_LIBRARIES(mysqlbackup mysqlclient backupstream) + + ADD_EXECUTABLE(mysqladmin mysqladmin.cc) 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("mysqlbackup" "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 + mysqlslap + mysql + mysqladmin + mysqlbinlog + mysqlbackup + mysqltest + ) + +MYSQL_INSTALL_TARGETS(${INSTALL_EXES} DESTINATION bin) === modified file 'client/mysqltest.cc' --- a/client/mysqltest.cc 2009-11-25 15:05:56 +0000 +++ b/client/mysqltest.cc 2009-12-13 22:13:25 +0000 @@ -82,9 +82,7 @@ enum { static int record= 0, opt_sleep= -1; static char *opt_db= 0, *opt_pass= 0; const char *opt_user= 0, *opt_host= 0, *unix_sock= 0, *opt_basedir= "./"; -#ifdef HAVE_SMEM static char *shared_memory_base_name=0; -#endif const char *opt_logdir= ""; const char *opt_include= 0, *opt_charsets_dir; static int opt_port= 0; @@ -5825,12 +5823,10 @@ static struct my_option my_long_options[ 0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, {"server-file", 'F', "Read embedded server arguments from file.", 0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, -#ifdef HAVE_SMEM {"shared-memory-base-name", OPT_SHARED_MEMORY_BASE_NAME, "Base name of shared memory.", (uchar**) &shared_memory_base_name, (uchar**) &shared_memory_base_name, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, -#endif {"silent", 's', "Suppress all normal output. Synonym for --quiet.", (uchar**) &silent, (uchar**) &silent, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, {"skip-safemalloc", OPT_SKIP_SAFEMALLOC, === added directory 'cmake' === added file 'cmake/Makefile.am' --- a/cmake/Makefile.am 1970-01-01 00:00:00 +0000 +++ b/cmake/Makefile.am 2009-12-13 22:13:25 +0000 @@ -0,0 +1,22 @@ +EXTRA_DIST = \ + cmake_parse_arguments.cmake \ + configurable_file_content.in \ + 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 \ + libutils.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 === added file 'cmake/abi_check.cmake' --- a/cmake/abi_check.cmake 1970-01-01 00:00:00 +0000 +++ b/cmake/abi_check.cmake 2009-12-13 22:13:25 +0000 @@ -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 + +# +# 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 + ${CMAKE_SOURCE_DIR}/include/mysql/psi/psi_abi_v1.h + ${CMAKE_SOURCE_DIR}/include/mysql/psi/psi_abi_v2.h + ) + + SET(TEST_PREPROCESSOR_HEADER + ${CMAKE_SOURCE_DIR}/sql/mysql_priv.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() + === added file 'cmake/bison.cmake' --- a/cmake/bison.cmake 1970-01-01 00:00:00 +0000 +++ b/cmake/bison.cmake 2009-12-13 22:13:25 +0000 @@ -0,0 +1,80 @@ +# 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(CMAKE_SYSTEM_NAME MATCHES "SunOS") + # On Solaris, /opt/csw often contains a newer bison + IF(NOT BISON_EXECUTABLE AND EXISTS /opt/csw/bin/bison) + SET(BISON_EXECUTABLE /opt/csw/bin/bison) + ENDIF() +ENDIF() +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_EXECUTABLE} -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. + SET(ERRMSG + "Bison (GNU parser generator) is required to build MySQL." + "Please install bison." + ) + IF(WIN32) + SET(ERRMSG ${ERRMSG} + "You can download bison from http://gnuwin32.sourceforge.net/packages/bison.htm " + "Choose 'Complete package, except sources' installation. We recommend to " + "install bison into a directory without spaces, e.g C:\\GnuWin32.") + ENDIF() + MESSAGE(FATAL_ERROR ${ERRMSG}) + ENDIF() + ENDIF() +ENDMACRO() === added file 'cmake/cat.cmake' --- a/cmake/cat.cmake 1970-01-01 00:00:00 +0000 +++ b/cmake/cat.cmake 2009-12-13 22:13:25 +0000 @@ -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() + + === added file 'cmake/character_sets.cmake' --- a/cmake/character_sets.cmake 1970-01-01 00:00:00 +0000 +++ b/cmake/character_sets.cmake 2009-12-13 22:13:25 +0000 @@ -0,0 +1,59 @@ +# 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) + + +SET (EXTRA_CHARSETS "all") +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) + === added file 'cmake/check_minimal_version.cmake' --- a/cmake/check_minimal_version.cmake 1970-01-01 00:00:00 +0000 +++ b/cmake/check_minimal_version.cmake 2009-12-13 22:13:25 +0000 @@ -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) === added file 'cmake/cmake_parse_arguments.cmake' --- a/cmake/cmake_parse_arguments.cmake 1970-01-01 00:00:00 +0000 +++ b/cmake/cmake_parse_arguments.cmake 2009-12-13 22:13:25 +0000 @@ -0,0 +1,47 @@ + +# 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 + +# Handy macro to parse macro arguments +MACRO(CMAKE_PARSE_ARGUMENTS prefix arg_names option_names) + SET(DEFAULT_ARGS) + FOREACH(arg_name ${arg_names}) + SET(${prefix}_${arg_name}) + ENDFOREACH(arg_name) + FOREACH(option ${option_names}) + SET(${prefix}_${option} FALSE) + ENDFOREACH(option) + + SET(current_arg_name DEFAULT_ARGS) + SET(current_arg_list) + FOREACH(arg ${ARGN}) + SET(larg_names ${arg_names}) + LIST(FIND larg_names "${arg}" is_arg_name) + IF (is_arg_name GREATER -1) + SET(${prefix}_${current_arg_name} ${current_arg_list}) + SET(current_arg_name ${arg}) + SET(current_arg_list) + ELSE (is_arg_name GREATER -1) + SET(loption_names ${option_names}) + LIST(FIND loption_names "${arg}" is_option) + IF (is_option GREATER -1) + SET(${prefix}_${arg} TRUE) + ELSE (is_option GREATER -1) + SET(current_arg_list ${current_arg_list} ${arg}) + ENDIF (is_option GREATER -1) + ENDIF (is_arg_name GREATER -1) + ENDFOREACH(arg) + SET(${prefix}_${current_arg_name} ${current_arg_list}) +ENDMACRO() \ No newline at end of file === added file 'cmake/configurable_file_content.in' --- a/cmake/configurable_file_content.in 1970-01-01 00:00:00 +0000 +++ b/cmake/configurable_file_content.in 2009-12-13 22:13:25 +0000 @@ -0,0 +1 @@ +@CMAKE_CONFIGURABLE_FILE_CONTENT@ === added file 'cmake/configure.pl' --- a/cmake/configure.pl 1970-01-01 00:00:00 +0000 +++ b/cmake/configure.pl 2009-12-13 22:13:25 +0000 @@ -0,0 +1,93 @@ +#!/usr/bin/perl +use strict; +use Cwd 'abs_path'; +use File::Basename; + +my $cmakeargs = ""; + +# Find source root directory +# Assume this script is in /cmake +my $srcdir = dirname(dirname(abs_path($0))); + +foreach my $option (@ARGV) +{ + + if (substr ($option, 0, 2) == "--") + { + $option = substr($option, 2); + } + if($option =~ /srcdir/) + { + $srcdir = substr($option,7); + next; + } + if($option =~ /help/) + { + system("cmake ${srcdir} -LH"); + exit(0); + } + if($option =~ /with-plugins=/) + { + my @plugins= split(/,/, substr($option,13)); + foreach my $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 ($option =~ /extra-charsets=all/) + { + $cmakeargs = $cmakeargs." -DWITH_CHARSETS=all"; + next; + } + if ($option =~ /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 $srcdir $cmakeargs\n"); +my $rc = system("cmake $srcdir $cmakeargs"); +exit($rc); === added file 'cmake/create_initial_db.cmake.in' --- a/cmake/create_initial_db.cmake.in 1970-01-01 00:00:00 +0000 +++ b/cmake/create_initial_db.cmake.in 2009-12-13 22:13:25 +0000 @@ -0,0 +1,81 @@ +# 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@") +# Force Visual Studio to output to stdout +IF(ENV{VS_UNICODE_OUTPUT}) + SET ($ENV{VS_UNICODE_OUTPUT}) +ENDIF() +IF(CMAKE_CFG_INTDIR AND CONFIG) + #Resolve build configuration variables + STRING(REPLACE "${CMAKE_CFG_INTDIR}" ${CONFIG} MYSQLD_EXECUTABLE + "${MYSQLD_EXECUTABLE}") +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() + + +FILE(REMOVE_RECURSE mysql) +MAKE_DIRECTORY(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 === added file 'cmake/do_abi_check.cmake' --- a/cmake/do_abi_check.cmake 1970-01-01 00:00:00 +0000 +++ b/cmake/do_abi_check.cmake 2009-12-13 22:13:25 +0000 @@ -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 /abi_check.out file. +# +# A developer with a justified API change will then do a +# mv /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() + === added file 'cmake/dtrace.cmake' --- a/cmake/dtrace.cmake 1970-01-01 00:00:00 +0000 +++ b/cmake/dtrace.cmake 2009-12-13 22:13:25 +0000 @@ -0,0 +1,144 @@ +# 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 ${objdir}/${target}_dtrace.o) + GET_TARGET_PROPERTY(target_type ${target} TYPE) + 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} + -DDIRS=. + -DTYPE=${target_type} + -P ${CMAKE_SOURCE_DIR}/cmake/dtrace_prelink.cmake + WORKING_DIRECTORY ${objdir} + ) + # Add full object path to linker flags + GET_TARGET_PROPERTY(target_type ${target} TYPE) + IF(NOT target_type MATCHES "STATIC") + SET_TARGET_PROPERTIES(${target} PROPERTIES LINK_FLAGS "${outfile}") + ELSE() + # For static library flags, add the object to the library. + # Note: DTrace probes in static libraries are unusable currently + # (see explanation for DTRACE_INSTRUMENT_STATIC_LIBS below) + # but maybe one day this will be fixed. + GET_TARGET_PROPERTY(target_location ${target} LOCATION) + ADD_CUSTOM_COMMAND( + TARGET ${target} POST_BUILD + COMMAND ${CMAKE_AR} r ${target_location} ${outfile} + COMMAND ${CMAKE_RANLIB} ${target_location} + ) + # Used in DTRACE_INSTRUMENT_WITH_STATIC_LIBS + SET(TARGET_OBJECT_DIRECTORY_${target} ${objdir} CACHE INTERNAL "") + ENDIF() + ENDIF() + ENDIF() +ENDMACRO() + + +# Ugly workaround for Solaris' DTrace inability to use probes +# from static libraries, discussed e.g in this thread +# (http://opensolaris.org/jive/thread.jspa?messageID=432454) +# We have to collect all object files that may be instrumented +# and go into the mysqld (also those that come from in static libs) +# run them again through dtrace -G to generate an ELF file that links +# to mysqld. +MACRO (DTRACE_INSTRUMENT_STATIC_LIBS target libs) +IF(CMAKE_SYSTEM_NAME MATCHES "SunOS" AND ENABLE_DTRACE) + FOREACH(lib ${libs}) + SET(dirs ${dirs} ${TARGET_OBJECT_DIRECTORY_${lib}}) + ENDFOREACH() + SET (obj ${CMAKE_CURRENT_BINARY_DIR}/${target}_dtrace_all.o) + ADD_CUSTOM_COMMAND( + OUTPUT ${obj} + DEPENDS ${libs} + COMMAND ${CMAKE_COMMAND} + -DDTRACE=${DTRACE} + -DOUTFILE=${obj} + -DDFILE=${CMAKE_BINARY_DIR}/include/probes_mysql.d + -DDTRACE_FLAGS=${DTRACE_FLAGS} + "-DDIRS=${dirs}" + -DTYPE=MERGE + -P ${CMAKE_SOURCE_DIR}/cmake/dtrace_prelink.cmake + VERBATIM + ) + ADD_CUSTOM_TARGET(${target}_dtrace_all DEPENDS ${obj}) + ADD_DEPENDENCIES(${target} ${target}_dtrace_all) + TARGET_LINK_LIBRARIES(${target} ${obj}) +ENDIF() +ENDMACRO() === added file 'cmake/dtrace_prelink.cmake' --- a/cmake/dtrace_prelink.cmake 1970-01-01 00:00:00 +0000 +++ b/cmake/dtrace_prelink.cmake 2009-12-13 22:13:25 +0000 @@ -0,0 +1,83 @@ +# 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(REMOVE ${OUTFILE}) + +MACRO(CONVERT_TO_RELATIVE_PATHS files rel_paths) + GET_FILENAME_COMPONENT(abs_dir . ABSOLUTE) + SET(${rel_paths}) + FOREACH(file ${files}) + FILE(RELATIVE_PATH rel ${abs_dir} ${file}) + LIST(APPEND ${rel_paths} ${rel}) + ENDFOREACH() +ENDMACRO() + +IF(TYPE STREQUAL "MERGE") + # Rerun dtrace on objects that are already in static libraries. + # Object paths are stored in text files named 'dtrace_objects' + # in the input directores. We have to copy the objects into temp. + # directory, as running dtrace -G on original files will change + # timestamps and cause rebuilds or the libraries / excessive + # relink + FILE(REMOVE_RECURSE dtrace_objects_merge) + MAKE_DIRECTORY(dtrace_objects_merge) + + FOREACH(dir ${DIRS}) + FILE(STRINGS ${dir}/dtrace_objects OBJS) + FOREACH(obj ${OBJS}) + IF(obj) + EXECUTE_PROCESS(COMMAND cp ${obj} dtrace_objects_merge) + ENDIF() + ENDFOREACH() + ENDFOREACH() + FILE(GLOB_RECURSE OBJECTS dtrace_objects_merge/*.o) + CONVERT_TO_RELATIVE_PATHS("${OBJECTS}" REL_OBJECTS) + EXECUTE_PROCESS( + COMMAND ${DTRACE} ${DTRACE_FLAGS} -o ${OUTFILE} -G -s ${DFILE} ${REL_OBJECTS} + ) + RETURN() +ENDIF() + +FOREACH(dir ${DIRS}) + FILE(GLOB_RECURSE OBJECTS ${dir}/*.o) + CONVERT_TO_RELATIVE_PATHS("${OBJECTS}" REL) + LIST(APPEND REL_OBJECTS ${REL}) +ENDFOREACH() + +FILE(WRITE dtrace_timestamp "") +EXECUTE_PROCESS( + COMMAND ${DTRACE} ${DTRACE_FLAGS} -o ${OUTFILE} -G -s ${DFILE} ${REL_OBJECTS} +) + +# Save objects that contain dtrace probes in a file. +# This file is used when script is called with -DTYPE=MERGE +# to dtrace from static libs. +# To find objects with probes, look at the timestamp, it was updated +# by dtrace -G run +IF(TYPE MATCHES "STATIC") + FILE(WRITE dtrace_objects "") + FOREACH(obj ${REL_OBJECTS}) + IF(${obj} IS_NEWER_THAN dtrace_timestamp) + GET_FILENAME_COMPONENT(obj_absolute_path ${obj} ABSOLUTE) + FILE(APPEND dtrace_objects "${obj_absolute_path}\n" ) + ENDIF() + ENDFOREACH() +ENDIF() === added file 'cmake/install_macros.cmake' --- a/cmake/install_macros.cmake 1970-01-01 00:00:00 +0000 +++ b/cmake/install_macros.cmake 2009-12-13 22:13:25 +0000 @@ -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 + +GET_FILENAME_COMPONENT(MYSQL_CMAKE_SCRIPT_DIR ${CMAKE_CURRENT_LIST_FILE} PATH) +INCLUDE(${MYSQL_CMAKE_SCRIPT_DIR}/cmake_parse_arguments.cmake) +MACRO (INSTALL_DEBUG_SYMBOLS targets) + IF(MSVC) + 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 "${CMAKE_CFG_INTDIR}" "\${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) + IF(CMAKE_GENERATOR MATCHES "Xcode") + # For Xcode, replace project config with install config + STRING(REPLACE "${CMAKE_CFG_INTDIR}" + "\${CMAKE_INSTALL_CONFIG_NAME}" output ${output}) + ENDIF() + INSTALL(FILES ${output} DESTINATION ${destination}) +ENDIF() +ENDMACRO() + +IF(WIN32) + OPTION(SIGNCODE "Sign executables and dlls with digital certificate" OFF) + MARK_AS_ADVANCED(SIGNCODE) + IF(SIGNCODE) + SET(SIGNTOOL_PARAMETERS + /a /t http://timestamp.verisign.com/scripts/timstamp.dll + CACHE STRING "parameters for signtool (list)") + FIND_PROGRAM(SIGNTOOL_EXECUTABLE signtool) + IF(NOT SIGNTOOL_EXECUTABLE) + MESSAGE(FATAL_ERROR + "signtool is not found. Signing executables not possible") + ENDIF() + MARK_AS_ADVANCED(SIGNTOOL_EXECUTABLE SIGNTOOL_PARAMETERS) + ENDIF() +ENDIF() + +MACRO(SIGN_TARGET target) + GET_TARGET_PROPERTY(target_type ${target} TYPE) + IF(target_type AND NOT target_type MATCHES "STATIC") + GET_TARGET_PROPERTY(target_location ${target} LOCATION) + IF(CMAKE_GENERATOR MATCHES "Visual Studio") + STRING(REPLACE "${CMAKE_CFG_INTDIR}" "\${CMAKE_INSTALL_CONFIG_NAME}" + target_location ${target_location}) + ENDIF() + INSTALL(CODE + "EXECUTE_PROCESS(COMMAND + ${SIGNTOOL_EXECUTABLE} sign ${SIGNTOOL_PARAMETERS} ${target_location} + ERROR_VARIABLE ERR) + IF(NOT \${ERR} EQUAL 0) + MESSAGE(FATAL_ERROR \"Error signing ${target_location}\") + ENDIF() + ") + ENDIF() +ENDMACRO() + + +# Installs targets, also installs pdbs on Windows. +# +# More stuff can be added later, e.g signing +# or pre-link custom targets (one example is creating +# version resource for windows executables) + +FUNCTION(MYSQL_INSTALL_TARGETS) + CMAKE_PARSE_ARGUMENTS(ARG + "DESTINATION" + "" + ${ARGN} + ) + SET(TARGETS ${ARG_DEFAULT_ARGS}) + IF(NOT TARGETS) + MESSAGE(FATAL_ERROR "Need target list for MYSQL_INSTALL_TARGETS") + ENDIF() + IF(NOT ARG_DESTINATION) + MESSAGE(FATAL_ERROR "Need DESTINATION parameter for MYSQL_INSTALL_TARGETS") + ENDIF() + + # If signing is required, sign executables before installing + IF(SIGNCODE) + FOREACH(target ${TARGETS}) + SIGN_TARGET(${target}) + ENDFOREACH() + ENDIF() + + INSTALL(TARGETS ${TARGETS} DESTINATION ${ARG_DESTINATION}) + SET(INSTALL_LOCATION ${ARG_DESTINATION} ) + INSTALL_DEBUG_SYMBOLS("${TARGETS}") + SET(INSTALL_LOCATION) +ENDFUNCTION() + === added file 'cmake/libutils.cmake' --- a/cmake/libutils.cmake 1970-01-01 00:00:00 +0000 +++ b/cmake/libutils.cmake 2009-12-13 22:13:25 +0000 @@ -0,0 +1,289 @@ +# 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 file exports macros that emulate some functionality found in GNU libtool +# on Unix systems. One such feature is convenience libraries. In this context, +# convenience library is a static library that can be linked to shared library +# On systems that force position-independent code, linking into shared library +# normally requires compilation with a special flag (often -fPIC). To enable +# linking static libraries to shared, we compile source files that come into +# static library with the PIC flag (${CMAKE_SHARED_LIBRARY_C_FLAGS} in CMake) +# Some systems, like Windows or OSX do not need special compilation (Windows +# never uses PIC and OSX always uses it). +# +# The intention behind convenience libraries is simplify the build and to reduce +# excessive recompiles. + +# Except for convenience libraries, this file provides macros to merge static +# libraries (we need it for mysqlclient) and to create shared library out of +# convenience libraries(again, for mysqlclient) + +# Following macros are exported +# - ADD_CONVENIENCE_LIBRARY(target source1...sourceN) +# This macro creates convenience library. The functionality is similar to +# ADD_LIBRARY(target STATIC source1...sourceN), the difference is that resulting +# library can always be linked to shared library +# +# - MERGE_LIBRARIES(target [STATIC|SHARED|MODULE] [linklib1 .... linklibN] +# [EXPORTS exported_func1 .... exported_func_N] +# [OUTPUT_NAME output_name] +# This macro merges several static libraries into a single one or creates a shared +# library from several convenience libraries + +# Important global flags +# - WITH_PIC : If set, it is assumed that everything is compiled as position +# independent code (that is CFLAGS/CMAKE_C_FLAGS contain -fPIC or equivalent) +# If defined, ADD_CONVENIENCE_LIBRARY does not add PIC flag to compile flags +# +# - DISABLE_SHARED: If set, it is assumed that shared libraries are not produced +# during the build. ADD_CONVENIENCE_LIBRARY does not add anything to compile flags + + +GET_FILENAME_COMPONENT(MYSQL_CMAKE_SCRIPT_DIR ${CMAKE_CURRENT_LIST_FILE} PATH) +IF(WIN32 OR CYGWIN OR APPLE OR WITH_PIC OR DISABLE_SHARED OR NOT CMAKE_SHARED_LIBRARY_C_FLAGS) + SET(_SKIP_PIC 1) +ENDIF() + +INCLUDE(${MYSQL_CMAKE_SCRIPT_DIR}/cmake_parse_arguments.cmake) +# CREATE_EXPORT_FILE (VAR target api_functions) +# Internal macro, used to create source file for shared libraries that +# otherwise consists entirely of "convenience" libraries. On Windows, +# also exports API functions as dllexport. On unix, creates a dummy file +# that references all exports and this prevents linker from creating an +# empty library(there are unportable alternatives, --whole-archive) +MACRO(CREATE_EXPORT_FILE VAR TARGET API_FUNCTIONS) + IF(WIN32) + SET(DUMMY ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_dummy.c) + SET(EXPORTS ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_exports.def) + CONFIGURE_FILE_CONTENT("" ${DUMMY}) + SET(CONTENT "EXPORTS\n") + FOREACH(FUNC ${API_FUNCTIONS}) + SET(CONTENT "${CONTENT} ${FUNC}\n") + ENDFOREACH() + CONFIGURE_FILE_CONTENT(${CONTENT} ${EXPORTS}) + SET(${VAR} ${DUMMY} ${EXPORTS}) + ELSE() + SET(EXPORTS ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_exports_file.cc) + SET(CONTENT) + FOREACH(FUNC ${API_FUNCTIONS}) + SET(CONTENT "${CONTENT} extern void* ${FUNC}\;\n") + ENDFOREACH() + SET(CONTENT "${CONTENT} void *${TARGET}_api_funcs[] = {\n") + FOREACH(FUNC ${API_FUNCTIONS}) + SET(CONTENT "${CONTENT} &${FUNC},\n") + ENDFOREACH() + SET(CONTENT "${CONTENT} (void *)0\n}\;") + CONFIGURE_FILE_CONTENT(${CONTENT} ${EXPORTS}) + SET(${VAR} ${EXPORTS}) + ENDIF() +ENDMACRO() + + +# MYSQL_ADD_CONVENIENCE_LIBRARY(name source1...sourceN) +# Create static library that can be linked to shared library. +# On systems that force position-independent code, adds -fPIC or +# equivalent flag to compile flags. +MACRO(ADD_CONVENIENCE_LIBRARY) + SET(TARGET ${ARGV0}) + SET(SOURCES ${ARGN}) + LIST(REMOVE_AT SOURCES 0) + ADD_LIBRARY(${TARGET} STATIC ${SOURCES}) + IF(NOT _SKIP_PIC) + SET_TARGET_PROPERTIES(${TARGET} PROPERTIES COMPILE_FLAGS + "${CMAKE_SHARED_LIBRARY_C_FLAGS}") + ENDIF() +ENDMACRO() + + +# Write content to file, using CONFIGURE_FILE +# The advantage compared to FILE(WRITE) is that timestamp +# does not change if file already has the same content +MACRO(CONFIGURE_FILE_CONTENT content file) + SET(CMAKE_CONFIGURABLE_FILE_CONTENT + "${content}\n") + CONFIGURE_FILE( + ${MYSQL_CMAKE_SCRIPT_DIR}/configurable_file_content.in + ${file} + @ONLY) +ENDMACRO() + +# Merge static libraries into a big static lib. The resulting library +# should not not have dependencies on other static libraries. +# We use it in MySQL to merge mysys,dbug,vio etc into mysqlclient + +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}) + + SET(OSLIBS) + 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. + LIST(APPEND OSLIBS ${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}) + # Extract dependend OS libraries + GET_DEPENDEND_OS_LIBS(${LIB} LIB_OSLIBS) + LIST(APPEND OSLIBS ${LIB_OSLIBS}) + ELSE() + # This is a shared library our static lib depends on. + LIST(APPEND OSLIBS ${LIB}) + ENDIF() + ENDIF() + ENDFOREACH() + LIST(REMOVE_DUPLICATES OSLIBS) + TARGET_LINK_LIBRARIES(${TARGET} ${OSLIBS}) + + # 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( + ${MYSQL_CMAKE_SCRIPT_DIR}/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() + +# Create libs from libs. +# Merges static libraries, creates shared libraries out of convenience libraries. +# MYSQL_MERGE_LIBRARIES(target [STATIC|SHARED|MODULE] +# [linklib1 .... linklibN] +# [EXPORTS exported_func1 .... exportedFuncN] +# [OUTPUT_NAME output_name] +#) +MACRO(MERGE_LIBRARIES) + CMAKE_PARSE_ARGUMENTS(ARG + "EXPORTS;OUTPUT_NAME" + "STATIC;SHARED;MODULE" + ${ARGN} + ) + LIST(GET ARG_DEFAULT_ARGS 0 TARGET) + SET(LIBS ${ARG_DEFAULT_ARGS}) + LIST(REMOVE_AT LIBS 0) + IF(ARG_STATIC) + IF (NOT "${ARG_OUTPUT_NAME}") + SET(ARG_OUTPUT_NAME ${TARGET}) + ENDIF() + MERGE_STATIC_LIBS(${TARGET} ${ARG_OUTPUT_NAME} "${LIBS}") + ELSEIF(ARG_SHARED OR ARG_MODULE) + IF(ARG_SHARED) + SET(LIBTYPE SHARED) + ELSE() + SET(LIBTYPE MODULE) + ENDIF() + # check for non-PIC libraries + IF(NOT _SKIP_PIC) + FOREACH(LIB ${LIBS}) + GET_TARGET_PROPERTY(${LIB} TYPE LIBTYPE) + IF(LIBTYPE STREQUAL "STATIC_LIBRARY") + GET_TARGET_PROPERTY(LIB COMPILE_FLAGS LIB_COMPILE_FLAGS) + STRING(REPLACE "${CMAKE_SHARED_LIBRARY_C_FLAGS}" + "" LIB_COMPILE_FLAGS ${LIB_COMPILE_FLAG}) + IF(NOT LIB_COMPILE_FLAGS MATCHES "") + MESSAGE(FATAL_ERROR + "Attempted to link non-PIC static library ${LIB} to shared library ${TARGET}\n" + "Please use ADD_CONVENIENCE_LIBRARY, instead of ADD_LIBRARY for ${LIB}" + ) + ENDIF() + ENDIF() + ENDFOREACH() + ENDIF() + + + CREATE_EXPORT_FILE(SRC ${TARGET} "${ARG_EXPORTS}") + ADD_LIBRARY(${TARGET} SHARED ${SRC}) + TARGET_LINK_LIBRARIES(${TARGET} ${LIBS}) + IF(ARG_OUTPUT_NAME) + SET_TARGET_PROPERTIES(${TARGET} PROPERTIES OUTPUT_NAME "${ARG_OUTPUT_NAME}") + ENDIF() + ELSE() + MESSAGE(FATAL_ERROR "Unknown library type") + ENDIF() +ENDMACRO() + +FUNCTION(GET_DEPENDEND_OS_LIBS target result) + SET(deps ${${target}_LIB_DEPENDS}) + IF(deps) + FOREACH(lib ${deps}) + # Filter out keywords for used for debug vs optimized builds + IF(NOT lib MATCHES "general" AND NOT lib MATCHES "debug" AND NOT lib MATCHES "optimized") + GET_TARGET_PROPERTY(lib_location ${lib} LOCATION) + IF(NOT lib_location) + SET(ret ${ret} ${lib}) + ENDIF() + ENDIF() + ENDFOREACH() + ENDIF() + SET(${result} ${ret} PARENT_SCOPE) +ENDFUNCTION() + +MACRO(RESTRICT_SYMBOL_EXPORTS target) + IF(CMAKE_COMPILER_IS_GNUCXX AND UNIX) + GET_TARGET_PROPERTY(COMPILE_FLAGS ${target} COMPILE_FLAGS) + IF(NOT COMPILE_FLAGS) + # Avoid COMPILE_FLAGS-NOTFOUND + SET(COMPILE_FLAGS) + ENDIF() + SET_TARGET_PROPERTIES(${target} PROPERTIES + COMPILE_FLAGS "${COMPILE_FLAGS} -fvisibility=hidden") + ENDIF() +ENDMACRO() === added file 'cmake/make_dist.cmake.in' --- a/cmake/make_dist.cmake.in 1970-01-01 00:00:00 +0000 +++ b/cmake/make_dist.cmake.in 2009-12-13 22:13:25 +0000 @@ -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") === added file 'cmake/merge_archives_unix.cmake.in' --- a/cmake/merge_archives_unix.cmake.in 1970-01-01 00:00:00 +0000 +++ b/cmake/merge_archives_unix.cmake.in 2009-12-13 22:13:25 +0000 @@ -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}) === added file 'cmake/mysql_version.cmake' --- a/cmake/mysql_version.cmake 1970-01-01 00:00:00 +0000 +++ b/cmake/mysql_version.cmake 2009-12-13 22:13:25 +0000 @@ -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) + SET(VERSION_STRING "6.0.14-alpha") + 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 +) === added file 'cmake/plugin.cmake' --- a/cmake/plugin.cmake 1970-01-01 00:00:00 +0000 +++ b/cmake/plugin.cmake 2009-12-13 22:13:25 +0000 @@ -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 + + +GET_FILENAME_COMPONENT(MYSQL_CMAKE_SCRIPT_DIR ${CMAKE_CURRENT_LIST_FILE} PATH) +INCLUDE(${MYSQL_CMAKE_SCRIPT_DIR}/cmake_parse_arguments.cmake) + +# MYSQL_ADD_PLUGIN(plugin_name source1...sourceN +# [STORAGE_ENGINE] +# [MANDATORY|DEFAULT] +# [STATIC_ONLY|DYNAMIC_ONLY] +# [MODULE_OUTPUT_NAME module_name] +# [STATIC_OUTPUT_NAME static_name] +# [RECOMPILE_FOR_EMBEDDED] +# [LINK_LIBRARIES lib1...libN] +# [DEPENDENCIES target1...targetN] + +MACRO(MYSQL_ADD_PLUGIN) + CMAKE_PARSE_ARGUMENTS(ARG + "LINK_LIBRARIES;DEPENDENCIES;MODULE_OUTPUT_NAME;STATIC_OUTPUT_NAME" + "STORAGE_ENGINE;STATIC_ONLY;MODULE_ONLY;MANDATORY;DEFAULT;DISABLED;RECOMPILE_FOR_EMBEDDED" + ${ARGN} + ) + + # Add common include directories + INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include + ${CMAKE_SOURCE_DIR}/sql + ${CMAKE_SOURCE_DIR}/regex + ${SSL_INCLUDE_DIRS} + ${ZLIB_INCLUDE_DIR}) + + LIST(GET ARG_DEFAULT_ARGS 0 plugin) + SET(SOURCES ${ARG_DEFAULT_ARGS}) + LIST(REMOVE_AT SOURCES 0) + STRING(TOUPPER ${plugin} plugin) + STRING(TOLOWER ${plugin} target) + + # Figure out whether to build plugin + IF(WITH_PLUGIN_${plugin}) + SET(WITH_${plugin} 1) + ENDIF() + + IF(WITH_${plugin}_STORAGE_ENGINE + OR WITH_{$plugin} + OR WITH_ALL + OR WITH_MAX + OR ARG_DEFAULT + AND NOT WITHOUT_${plugin}_STORAGE_ENGINE + AND NOT WITHOUT_${plugin} + AND NOT ARG_MODULE_ONLY) + + 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(ARG_MANDATORY) + SET(WITH_${plugin} 1) + ENDIF() + + + IF(ARG_STORAGE_ENGINE) + SET(with_var "WITH_${plugin}_STORAGE_ENGINE" ) + ELSE() + SET(with_var "WITH_${plugin}") + ENDIF() + + IF(NOT ARG_DEPENDENCIES) + SET(ARG_DEPENDENCIES) + ENDIF() + # Build either static library or module + IF (WITH_${plugin} AND NOT ARG_MODULE_ONLY) + ADD_LIBRARY(${target} STATIC ${SOURCES}) + SET_TARGET_PROPERTIES(${target} PROPERTIES COMPILE_DEFINITONS "MYSQL_SERVER") + DTRACE_INSTRUMENT(${target}) + ADD_DEPENDENCIES(${target} GenError ${ARG_DEPENDENCIES}) + IF(WITH_EMBEDDED_SERVER) + # Embedded library should contain PIC code and be linkable + # to shared libraries (on systems that need PIC) + IF(ARG_RECOMPILE_FOR_EMBEDDED OR NOT _SKIP_PIC) + # Recompile some plugins for embedded + ADD_CONVENIENCE_LIBRARY(${target}_embedded ${SOURCES}) + DTRACE_INSTRUMENT(${target}_embedded) + IF(ARG_RECOMPILE_FOR_EMBEDDED) + SET_TARGET_PROPERTIES(${target}_embedded + PROPERTIES COMPILE_DEFINITIONS "MYSQL_SERVER;EMBEDDED_LIBRARY") + ENDIF() + ADD_DEPENDENCIES(${target}_embedded GenError) + ENDIF() + ENDIF() + + IF(ARG_STATIC_OUTPUT_NAME) + SET_TARGET_PROPERTIES(${target} PROPERTIES + OUTPUT_NAME ${ARG_STATIC_OUTPUT_NAME}) + ENDIF() + + # Update mysqld dependencies + SET (MYSQLD_STATIC_PLUGIN_LIBS ${MYSQLD_STATIC_PLUGIN_LIBS} + ${target} CACHE INTERNAL "") + + SET (mysql_plugin_defs "${mysql_plugin_defs},builtin_${target}_plugin" + PARENT_SCOPE) + IF(ARG_STORAGE_ENGINE) + SET(${with_var} ON CACHE BOOL "Link ${plugin} statically to the server" + FORCE) + ENDIF() + ELSEIF(NOT WITHOUT_${plugin} AND NOT ARG_STATIC_ONLY AND NOT WITHOUT_DYNAMIC_PLUGINS) + + ADD_LIBRARY(${target} MODULE ${SOURCES}) + DTRACE_INSTRUMENT(${target}) + SET_TARGET_PROPERTIES (${target} PROPERTIES PREFIX "" + COMPILE_DEFINITIONS "MYSQL_DYNAMIC_PLUGIN") + IF(ARG_LINK_LIBRARIES) + TARGET_LINK_LIBRARIES (${target} ${ARG_LINK_LIBRARIES}) + ENDIF() + 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 ${ARG_LINK_LIBRARIES}) + ENDIF() + ADD_DEPENDENCIES(${target} GenError ${ARG_DEPENDENCIES}) + + IF(NOT ARG_MODULE_OUTPUT_NAME) + IF(ARG_STORAGE_ENGINE) + SET(ARG_MODULE_OUTPUT_NAME "ha_${target}") + ELSE() + SET(ARG_MODULE_OUTPUT_NAME "${target}") + ENDIF() + ENDIF() + SET_TARGET_PROPERTIES(${target} PROPERTIES + OUTPUT_NAME "${ARG_MODULE_OUTPUT_NAME}") + # Install dynamic library + SET(INSTALL_LOCATION lib/plugin) + MYSQL_INSTALL_TARGETS(${target} DESTINATION ${INSTALL_LOCATION}) + ENDIF() +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() +ENDMACRO() === added file 'cmake/readline.cmake' --- a/cmake/readline.cmake 1970-01-01 00:00:00 +0000 +++ b/cmake/readline.cmake 2009-12-13 22:13:25 +0000 @@ -0,0 +1,204 @@ +# 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 + 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) + SET(ERRORMSG "Curses library not found. Please install appropriate package, + remove CMakeCache.txt and rerun cmake.") + IF(CMAKE_SYSTEM_NAME MATCHES "Linux") + SET(ERRORMSG ${ERRORMSG} + "On Debian/Ubuntu, package name is libncurses5-dev, on Redhat and derivates " + "it is ncurses-devel.") + ENDIF() + MESSAGE(FATAL_ERROR ${ERRORMSG}) + 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 + #include + int main(int argc, char **argv) + { + HIST_ENTRY entry; + return 0; + }" + HAVE_HIST_ENTRY) + + CHECK_CXX_SOURCE_COMPILES(" + #include + #include + 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 + #include + 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() + === added file 'cmake/ssl.cmake' --- a/cmake/ssl.cmake 1970-01-01 00:00:00 +0000 +++ b/cmake/ssl.cmake 2009-12-13 22:13:25 +0000 @@ -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() === added file 'cmake/stack_direction.c' --- a/cmake/stack_direction.c 1970-01-01 00:00:00 +0000 +++ b/cmake/stack_direction.c 2009-12-13 22:13:25 +0000 @@ -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 === added file 'cmake/zlib.cmake' --- a/cmake/zlib.cmake 1970-01-01 00:00:00 +0000 +++ b/cmake/zlib.cmake 2009-12-13 22:13:25 +0000 @@ -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() === added file 'cmd-line-utils/libedit/CMakeLists.txt' --- a/cmd-line-utils/libedit/CMakeLists.txt 1970-01-01 00:00:00 +0000 +++ b/cmd-line-utils/libedit/CMakeLists.txt 2009-12-13 22:13:25 +0000 @@ -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) +include(CheckFunctionExists) +CHECK_INCLUDE_FILES(term.h HAVE_TERM_H) + +SET(CMAKE_REQUIRED_LIBRARIES ${CURSES_CURSES_LIBRARY}) +CHECK_CXX_SOURCE_COMPILES(" +#include +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_BINARY_DIR}/makelist @ONLY) + +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_EXTRA_SOURCES ${LIBEDIT_EXTRA_SOURCES} np/vis.c) +ENDIF() + +CHECK_FUNCTION_EXISTS(strunvis HAVE_STRUNVIS) +IF(NOT HAVE_STRUNVIS) + SET(LIBEDIT_EXTRA_SOURCES ${LIBEDIT_EXTRA_SOURCES} np/unvis.c) +ENDIF() + +CHECK_FUNCTION_EXISTS(strlcpy HAVE_STRLCPY) +IF(NOT HAVE_STRLCPY) + SET(LIBEDIT_EXTRA_SOURCES ${LIBEDIT_EXTRA_SOURCES} np/strlcpy.c) +ENDIF() + +CHECK_FUNCTION_EXISTS(strlcat HAVE_STRLCAT) +IF(NOT HAVE_STRLCAT) + SET(LIBEDIT_EXTRA_SOURCES ${LIBEDIT_EXTRA_SOURCES} np/strlcat.c) +ENDIF() + +CHECK_FUNCTION_EXISTS(fgetln HAVE_FGETLN) +IF(NOT HAVE_FGETLN) + SET(LIBEDIT_EXTRA_SOURCES ${LIBEDIT_EXTRA_SOURCES} np/fgetln.c) +ENDIF() + +# Generate headers +FOREACH(SRCBASENAME vi emacs common) + SET(SRC ${CMAKE_CURRENT_SOURCE_DIR}/${SRCBASENAME}.c) + SET(HDR ${CMAKE_CURRENT_BINARY_DIR}/${SRCBASENAME}.h) + + ADD_CUSTOM_COMMAND( + OUTPUT ${HDR} + COMMAND sh ./makelist -h ${SRC} > ${HDR} + DEPENDS ${SRC}) + + SET(AHDR ${AHDR} ${HDR}) + SET(ASRC ${ASRC} ${SRC}) +ENDFOREACH() + +# Generate source files +ADD_CUSTOM_COMMAND( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/help.c + COMMAND sh ./makelist -bc ${ASRC} > help.c + DEPENDS ${ASRC} +) + +ADD_CUSTOM_COMMAND( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/help.h + COMMAND sh ./makelist -bh ${ASRC} > help.h + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + DEPENDS ${ASRC} +) + +ADD_CUSTOM_COMMAND( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/fcns.h + COMMAND sh ./makelist -fh ${AHDR} > fcns.h + VERBATIM + DEPENDS ${AHDR} +) + +ADD_CUSTOM_COMMAND( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/fcns.c + COMMAND sh ./makelist -fc ${AHDR} > fcns.c + VERBATIM + DEPENDS ${AHDR} +) + + +INCLUDE_DIRECTORIES( +${CMAKE_SOURCE_DIR}/include +${CMAKE_CURRENT_BINARY_DIR} +${CURSES_INCLUDE_PATH} +) + +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 + filecomplete.c + ${CMAKE_CURRENT_BINARY_DIR}/help.c + ${CMAKE_CURRENT_BINARY_DIR}/help.h + ${CMAKE_CURRENT_BINARY_DIR}/fcns.c + ${CMAKE_CURRENT_BINARY_DIR}/fcns.h + ${AHDR} + ${LIBEDIT_EXTRA_SOURCES} +) +ADD_LIBRARY(edit ${LIBEDIT_SOURCES}) +TARGET_LINK_LIBRARIES(edit ${CURSES_LIBRARY}) + === modified file 'cmd-line-utils/libedit/Makefile.am' --- a/cmd-line-utils/libedit/Makefile.am 2009-06-15 16:18:14 +0000 +++ b/cmd-line-utils/libedit/Makefile.am 2009-12-13 22:13:25 +0000 @@ -23,7 +23,7 @@ noinst_HEADERS = chared.h el.h el_term.h 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 === added file 'cmd-line-utils/readline/CMakeLists.txt' --- a/cmd-line-utils/readline/CMakeLists.txt 1970-01-01 00:00:00 +0000 +++ b/cmd-line-utils/readline/CMakeLists.txt 2009-12-13 22:13:25 +0000 @@ -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}) === modified file 'cmd-line-utils/readline/Makefile.am' --- a/cmd-line-utils/readline/Makefile.am 2009-10-12 09:08:34 +0000 +++ b/cmd-line-utils/readline/Makefile.am 2009-12-13 22:13:25 +0000 @@ -28,6 +28,6 @@ noinst_HEADERS = readline.h chardefs.h k 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 === added file 'config.h.cmake' --- a/config.h.cmake 1970-01-01 00:00:00 +0000 +++ b/config.h.cmake 2009-12-13 22:13:25 +0000 @@ -0,0 +1,635 @@ +/* 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 + +#ifdef __APPLE__ + /* + Special handling required for OSX to support universal binaries that + mix 32 and 64 bit architectures. + */ + #if(__LP64__) + #define SIZEOF_LONG 8 + #else + #define SIZEOF_LONG 4 + #endif + #define SIZEOF_CHARP SIZEOF_LONG + #define SIZEOF_SIZE_T SIZEOF_LONG +#else + #cmakedefine SIZEOF_LONG @SIZEOF_LONG@ + #cmakedefine SIZEOF_CHARP @SIZEOF_CHARP@ + #cmakedefine SIZEOF_SIZE_T @SIZEOF_CHARP@ +#endif + +#if SIZEOF_LONG +# define HAVE_LONG 1 +#endif + + +#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_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 + +#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__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 === added file 'configure.cmake' --- a/configure.cmake 1970-01-01 00:00:00 +0000 +++ b/configure.cmake 2009-12-13 22:13:25 +0000 @@ -0,0 +1,1305 @@ +# 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) +INCLUDE (CheckSymbolExists) + + +# 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() + + +# 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 "${CMAKE_CXX_FLAGS} /Op") + SET(CMAKE_C_FLAGS "${CMAKE_CXX_FLAGS} /Op") +ENDIF() + + +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 Itanium 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() + +# Ensure we have clean build for shared libraries +# without extra dependencies and without unresolved symbols +# (on system that support it) +IF(CMAKE_SYSTEM_NAME STREQUAL "Linux") + FOREACH(LANG C CXX) + STRING(REPLACE "-rdynamic" "" + CMAKE_SHARED_LIBRARY_LINK_${LANG}_FLAGS + ${CMAKE_SHARED_LIBRARY_LINK_${LANG}_FLAGS} + ) + ENDFOREACH() + SET(LINK_FLAG_NO_UNDEFINED "--Wl,--no-undefined") +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 + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /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() + +# Searches function in libraries +# if function is found, sets output parameter result to the name of the library +# if function is found in libc, result will be empty +FUNCTION(MY_SEARCH_LIBS func libs result) + CHECK_FUNCTION_EXISTS(${func} HAVE_${func}_IN_LIBC) + IF(HAVE_${func}_IN_LIBC) + SET(${result} "" PARENT_SCOPE) + RETURN() + ENDIF() + FOREACH(lib ${libs}) + CHECK_LIBRARY_EXISTS(${lib} ${func} "" HAVE_${func}_IN_${lib}) + IF(HAVE_${func}_IN_${lib}) + SET(${result} ${lib} PARENT_SCOPE) + RETURN() + ENDIF() + ENDFOREACH() +ENDFUNCTION() + +IF(UNIX) + MY_SEARCH_LIBS(floor m LIBM) + IF(NOT LIBM) + MY_SEARCH_LIBS(__infinity m LIBM) + ENDIF() + MY_SEARCH_LIBS(gethostbyname_r "nsl_r;nsl" LIBNLS) + MY_SEARCH_LIBS(bind "bind;socket" LIBBIND) + MY_SEARCH_LIBS(crypt crypt LIBCRYPT) + MY_SEARCH_LIBS(setsockopt socket LIBSOCKET) + MY_SEARCH_LIBS(dlopen dl LIBDL) + MY_SEARCH_LIBS(sched_yield rt LIBRT) + IF(NOT LIBRT) + MY_SEARCH_LIBS(clock_gettime rt LIBRT) + ENDIF() + FIND_PACKAGE(Threads) + + SET(CMAKE_REQUIRED_LIBRARIES + ${LIBM} ${LIBNLS} ${LIBBIND} ${LIBCRYPT} ${LIBSOCKET} ${LIBDL} ${CMAKE_THREAD_LIBS_INIT} ${LIBRT}) + + LIST(REMOVE_DUPLICATES CMAKE_REQUIRED_LIBRARIES) + LINK_LIBRARIES(${CMAKE_THREAD_LIBS_INIT}) + + 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 + 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 "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 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) +CHECK_INCLUDE_FILES_UNIX("stdlib.h;sys/un.h" 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_SYMBOL_EXISTS_UNIX(fdatasync "unistd.h" 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_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_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) + +#-------------------------------------------------------------------- +# Support for WL#2373 (Use cycle counter for timing) +#-------------------------------------------------------------------- + +CHECK_INCLUDE_FILES_UNIX(time.h HAVE_TIME_H) +CHECK_INCLUDE_FILES_UNIX(sys/time.h HAVE_SYS_TIME_H) +CHECK_INCLUDE_FILES_UNIX(sys/times.h HAVE_SYS_TIMES_H) +CHECK_INCLUDE_FILES_UNIX(asm/msr.h HAVE_ASM_MSR_H) +#msr.h has rdtscll() + +CHECK_INCLUDE_FILES_UNIX(ia64intrin.h HAVE_IA64INTRIN_H) + +CHECK_FUNCTION_EXISTS_UNIX(times HAVE_TIMES) +CHECK_FUNCTION_EXISTS_UNIX(gettimeofday HAVE_GETTIMEOFDAY) +CHECK_FUNCTION_EXISTS_UNIX(read_real_time HAVE_READ_REAL_TIME) +# This should work on AIX. + +CHECK_FUNCTION_EXISTS_UNIX(ftime HAVE_FTIME) +# This is still a normal call for milliseconds. + +CHECK_FUNCTION_EXISTS_UNIX(time HAVE_TIME) +# We can use time() on Macintosh if there is no ftime(). + +CHECK_FUNCTION_EXISTS_UNIX(rdtscll HAVE_RDTSCLL) +# I doubt that we'll ever reach the check for this. + + +# +# Tests for symbols +# + +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) +CHECK_SYMBOL_EXISTS(isnan math.h HAVE_ISNAN) +CHECK_SYMBOL_EXISTS(rint math.h HAVE_RINT) + +# isinf() prototype not found on Solaris +CHECK_CXX_SOURCE_COMPILES( +"#include +int main() { + isinf(0.0); + return 0; +}" HAVE_ISINF) + + + +# +# Test for endianess +# +INCLUDE(TestBigEndian) +IF(APPLE) + # Can'r run endian test on universal PPC/Intel binaries + # would return inconsistent result. + 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) + +IF(NOT APPLE) + CHECK_TYPE_SIZE("char *" SIZEOF_CHARP) + CHECK_TYPE_SIZE(long SIZEOF_LONG) + CHECK_TYPE_SIZE(size_t SIZEOF_SIZE_T) +ENDIF() +CHECK_TYPE_SIZE(char SIZEOF_CHAR) +CHECK_TYPE_SIZE(short SIZEOF_SHORT) +CHECK_TYPE_SIZE(int SIZEOF_INT) +CHECK_TYPE_SIZE("long long" SIZEOF_LONG_LONG) +SET(CMAKE_EXTRA_INCLUDE_FILES stdio.h 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 +#include +#else +#include +#include +#include +#endif +int main() +{ + getaddrinfo( 0, 0, 0, 0); + return 0; +}" +HAVE_GETADDRINFO) + +CHECK_C_SOURCE_COMPILES(" +#ifdef _WIN32 +#include +#include +#else +#include +#include +#include +#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 + +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 +#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 +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 + 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 + 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 +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 direction : ${STACK_DIRECTION}") + ENDIF() +ENDIF() + +# +# Check return type of signal handlers +# +CHECK_C_SOURCE_COMPILES(" +#include +#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) + + +CHECK_INCLUDE_FILES_UNIX("time.h;sys/time.h" TIME_WITH_SYS_TIME) +CHECK_SYMBOL_EXISTS_UNIX(O_NONBLOCK "unistd.h;fcntl.h" HAVE_FCNTL_NONBLOCK) +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 + 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 + 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 + 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 + 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 + 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 + #include + #include + #include + #include + #include + 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 + #include + #include + #include + #include + #include + 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 + #include + #include + #include + #include + #include + 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) + 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 + 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 + int main() + { + return IPPROTO_IPV6; + }" + HAVE_IPPROTO_IPV6) + + CHECK_C_SOURCE_COMPILES(" + #include + #include + 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) === modified file 'configure.in' --- a/configure.in 2009-12-02 16:14:13 +0000 +++ b/configure.in 2009-12-13 22:13:25 +0000 @@ -3155,7 +3155,9 @@ AC_CONFIG_FILES(Makefile extra/Makefile 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) === modified file 'dbug/CMakeLists.txt' --- a/dbug/CMakeLists.txt 2009-10-03 19:49:08 +0000 +++ b/dbug/CMakeLists.txt 2009-12-13 22:13:25 +0000 @@ -13,11 +13,10 @@ # 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) +ADD_CONVENIENCE_LIBRARY(dbug ${DBUG_SOURCES}) +TARGET_LINK_LIBRARIES(dbug mysys) === modified file 'extra/CMakeLists.txt' --- a/extra/CMakeLists.txt 2009-10-15 12:27:13 +0000 +++ b/extra/CMakeLists.txt 2009-12-13 22:13:25 +0000 @@ -12,43 +12,72 @@ # 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) - -ADD_EXECUTABLE(comp_err comp_err.c) -TARGET_LINK_LIBRARIES(comp_err zlib) - -GET_TARGET_PROPERTY(COMP_ERR_EXE comp_err LOCATION) - -ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_SOURCE_DIR}/include/mysqld_error.h - COMMAND ${COMP_ERR_EXE} +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) + + +IF(NOT CMAKE_CROSSCOMPILING) + ADD_EXECUTABLE(comp_err comp_err.c) + TARGET_LINK_LIBRARIES(comp_err mysys) +ENDIF() + +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) ADD_DEPENDENCIES(perror GenError) -TARGET_LINK_LIBRARIES(perror strings mysys dbug) +TARGET_LINK_LIBRARIES(perror mysys) ADD_EXECUTABLE(resolveip resolveip.c) -TARGET_LINK_LIBRARIES(resolveip strings mysys dbug) +TARGET_LINK_LIBRARIES(resolveip mysys) +IF(CMAKE_SYSTEM_NAME STREQUAL "SunOS") + INCLUDE(CheckFunctionExists) + INCLUDE(CheckLibraryExists) + MY_SEARCH_LIBS(inet_aton "nsl;socket;resolv" SOLARIS_NSL) + TARGET_LINK_LIBRARIES(resolveip ${SOLARIS_NSL}) +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) + + MYSQL_INSTALL_TARGETS(innochecksum mysql_waitpid resolve_stack_dump DESTINATION bin) +ENDIF() -IF(EMBED_MANIFESTS) - MYSQL_EMBED_MANIFEST("myTest" "asInvoker") -ENDIF(EMBED_MANIFESTS) +MYSQL_INSTALL_TARGETS(perror resolveip my_print_defaults DESTINATION bin) === modified file 'extra/yassl/CMakeLists.txt' --- a/extra/yassl/CMakeLists.txt 2008-01-30 02:58:57 +0000 +++ b/extra/yassl/CMakeLists.txt 2009-12-13 22:13:25 +0000 @@ -13,16 +13,23 @@ # 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) +ADD_CONVENIENCE_LIBRARY(yassl ${YASSL_SOURCES}) +RESTRICT_SYMBOL_EXPORTS(yassl) + + === modified file 'extra/yassl/taocrypt/CMakeLists.txt' --- a/extra/yassl/taocrypt/CMakeLists.txt 2007-08-03 20:57:21 +0000 +++ b/extra/yassl/taocrypt/CMakeLists.txt 2009-12-13 22:13:25 +0000 @@ -16,6 +16,8 @@ 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}) 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 +26,6 @@ SET(TAOCRYPT_SOURCES src/aes.cpp src/ae 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) +ADD_CONVENIENCE_LIBRARY(taocrypt ${TAOCRYPT_SOURCES}) +RESTRICT_SYMBOL_EXPORTS(taocrypt) + === added file 'include/CMakeLists.txt' --- a/include/CMakeLists.txt 1970-01-01 00:00:00 +0000 +++ b/include/CMakeLists.txt 2009-12-13 22:13:25 +0000 @@ -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") + + === modified file 'include/Makefile.am' --- a/include/Makefile.am 2009-12-01 01:33:55 +0000 +++ b/include/Makefile.am 2009-12-13 22:13:25 +0000 @@ -46,7 +46,8 @@ noinst_HEADERS = config-win.h config-net atomic/gcc_builtins.h my_libwrap.h my_stacktrace.h \ atomic/solaris.h \ wqueue.h waiting_threads.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 \ mysql/psi/psi_abi_v1.h.pp \ mysql/psi/psi_abi_v2.h.pp === modified file 'include/keycache.h' --- a/include/keycache.h 2009-09-22 18:21:09 +0000 +++ b/include/keycache.h 2009-12-13 22:13:25 +0000 @@ -74,7 +74,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 */ === modified file 'include/my_atomic.h' --- a/include/my_atomic.h 2009-11-18 01:25:50 +0000 +++ b/include/my_atomic.h 2009-12-13 22:13:25 +0000 @@ -69,6 +69,7 @@ #include "atomic/nolock.h" #endif +#ifndef MY_ATOMICS_MADE #ifndef make_atomic_cas_body /* nolock.h was not able to generate even a CAS function, fall back */ #include "atomic/rwlock.h" @@ -277,6 +278,7 @@ make_atomic_store(ptr) #undef make_atomic_load_body #undef make_atomic_store_body #undef make_atomic_fas_body +#endif /* MY_ATOMICS_MADE */ #undef intptr /* === modified file 'include/my_global.h' --- a/include/my_global.h 2009-12-01 01:33:55 +0000 +++ b/include/my_global.h 2009-12-13 22:13:25 +0000 @@ -70,8 +70,8 @@ #define STATIC_CAST(TYPE) (TYPE) #endif -#if defined(_WIN32) || defined(_WIN64) || defined(__WIN32__) || defined(WIN32) -#include +#if defined(_WIN32) +#include #elif defined(__NETWARE__) #include #include @@ -119,6 +119,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 +#include /* SOCKET */ +#include /* access(), chmod() */ +#include /* 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 @@ -505,8 +548,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 /* HPUX 10.20 defines ulong here. UGLY !!! */ #define HAVE_ULONG @@ -666,7 +712,9 @@ typedef char my_bool; /* Small bool */ /* 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 @@ -754,7 +802,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 @@ -838,6 +892,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)) @@ -845,7 +924,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) @@ -1105,15 +1183,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 -#define MY_FILEPOS_ERROR (~STATIC_CAST(my_off_t)(0)) -#if !defined(__WIN__) -typedef off_t os_off_t; -#endif +#endif /*_WIN32*/ +#define MY_FILEPOS_ERROR (~(my_off_t) 0) #if defined(__WIN__) #define socket_errno WSAGetLastError() @@ -1139,9 +1220,6 @@ typedef off_t os_off_t; 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 */ -#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) @@ -1516,12 +1594,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 #endif #endif === modified file 'include/my_pthread.h' --- a/include/my_pthread.h 2009-12-01 01:33:55 +0000 +++ b/include/my_pthread.h 2009-12-13 22:13:25 +0000 @@ -116,9 +116,11 @@ struct tm *gmtime_r(const time_t *timep, 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 @@ -149,8 +151,9 @@ int pthread_join(pthread_t thread, void #define pthread_detach_this_thread() #define pthread_condattr_init(A) #define pthread_condattr_destroy(A) -#define pthread_yield() SwitchToThread() +#define pthread_yield() SwitchToThread() +#define my_sigset(A,B) signal(A,B) #else /* Normal threads */ @@ -706,25 +709,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, === modified file 'include/my_sys.h' --- a/include/my_sys.h 2009-12-04 12:41:24 +0000 +++ b/include/my_sys.h 2009-12-13 22:13:25 +0000 @@ -39,6 +39,9 @@ extern int NEAR my_errno; /* Last error #include /* for CHARSET_INFO */ #include #include +#ifdef _WIN32 +#include /*for alloca*/ +#endif #define MYSYS_PROGRAM_DONT_USE_CURSES() { error_handler_hook = my_message_no_curses; mysys_uses_curses=0;} #define MY_INIT(name); { my_progname= name; my_init(); } === modified file 'include/mysql/plugin.h' --- a/include/mysql/plugin.h 2009-11-05 08:44:22 +0000 +++ b/include/mysql/plugin.h 2009-12-13 22:13:25 +0000 @@ -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 @@ -88,9 +103,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; \ === modified file 'include/thr_alarm.h' --- a/include/thr_alarm.h 2008-04-28 16:24:05 +0000 +++ b/include/thr_alarm.h 2009-12-13 22:13:25 +0000 @@ -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 */ === modified file 'libmysql/CMakeLists.txt' --- a/libmysql/CMakeLists.txt 2009-10-23 06:47:02 +0000 +++ b/libmysql/CMakeLists.txt 2009-12-13 22:13:25 +0000 @@ -12,98 +12,173 @@ # 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/my_sync.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 ../mysys/my_rnd.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/dtoa.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} libmysql.def) -ADD_DEPENDENCIES(libmysql GenError) -TARGET_LINK_LIBRARIES(libmysql) \ No newline at end of file +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}) + +SET(CLIENT_API_FUNCTIONS +load_defaults +mysql_thread_end +mysql_thread_init +myodbc_remove_escape +mysql_affected_rows +mysql_autocommit +mysql_stmt_bind_param +mysql_stmt_bind_result +mysql_change_user +mysql_character_set_name +mysql_close +mysql_commit +mysql_data_seek +mysql_debug +mysql_dump_debug_info +mysql_eof +mysql_errno +mysql_error +mysql_escape_string +mysql_hex_string +mysql_stmt_execute +mysql_stmt_fetch +mysql_stmt_fetch_column +mysql_fetch_field +mysql_fetch_field_direct +mysql_fetch_fields +mysql_fetch_lengths +mysql_fetch_row +mysql_field_count +mysql_field_seek +mysql_field_tell +mysql_free_result +mysql_get_client_info +mysql_get_host_info +mysql_get_proto_info +mysql_get_server_info +mysql_get_client_version +mysql_get_ssl_cipher +mysql_info +mysql_init +mysql_insert_id +mysql_kill +mysql_set_server_option +mysql_list_dbs +mysql_list_fields +mysql_list_processes +mysql_list_tables +mysql_more_results +mysql_next_result +mysql_num_fields +mysql_num_rows +mysql_odbc_escape_string +mysql_options +mysql_stmt_param_count +mysql_stmt_param_metadata +mysql_ping +mysql_stmt_result_metadata +mysql_query +mysql_read_query_result +mysql_real_connect +mysql_real_escape_string +mysql_real_query +mysql_refresh +mysql_rollback +mysql_row_seek +mysql_row_tell +mysql_select_db +mysql_stmt_send_long_data +mysql_send_query +mysql_shutdown +mysql_ssl_set +mysql_stat +mysql_stmt_affected_rows +mysql_stmt_close +mysql_stmt_reset +mysql_stmt_data_seek +mysql_stmt_errno +mysql_stmt_error +mysql_stmt_free_result +mysql_stmt_num_rows +mysql_stmt_row_seek +mysql_stmt_row_tell +mysql_stmt_store_result +mysql_store_result +mysql_thread_id +mysql_thread_safe +mysql_use_result +mysql_warning_count +mysql_stmt_sqlstate +mysql_sqlstate +mysql_get_server_version +mysql_stmt_prepare +mysql_stmt_init +mysql_stmt_insert_id +mysql_stmt_attr_get +mysql_stmt_attr_set +mysql_stmt_field_count +mysql_set_local_infile_default +mysql_set_local_infile_handler +mysql_embedded +mysql_server_init +mysql_server_end +mysql_set_character_set +mysql_get_character_set_info + +CACHE INTERNAL "Functions exported by client API" + +) + +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_CONVENIENCE_LIBRARY(clientlib ${CLIENT_SOURCES}) +DTRACE_INSTRUMENT(clientlib) +ADD_DEPENDENCIES(clientlib GenError) + +SET(LIBS clientlib dbug strings vio mysys ${ZLIB_LIBRARY} ${SSL_LIBRARIES}) + +# Merge several convenience libraries into one big mysqlclient +# and link them together into shared library. +MERGE_LIBRARIES(mysqlclient STATIC ${LIBS}) +MYSQL_INSTALL_TARGETS(mysqlclient DESTINATION lib) +IF(UNIX) + INSTALL_SYMLINK(${CMAKE_STATIC_LIBRARY_PREFIX}mysqlclient_r mysqlclient lib) +ENDIF() + +IF(NOT DISABLE_SHARED) + MERGE_LIBRARIES(libmysql SHARED ${LIBS} EXPORTS ${CLIENT_API_FUNCTIONS}) + MYSQL_INSTALL_TARGETS(libmysql DESTINATION lib) + IF(UNIX) + # Name of shared library is mysqlclient on Unix + SET_TARGET_PROPERTIES(libmysql PROPERTIES + OUTPUT_NAME mysqlclient + VERSION "${SHARED_LIB_MAJOR_VERSION}.0.0" + SOVERSION "${SHARED_LIB_MAJOR_VERSION}") + IF(LINK_FLAG_NO_UNDEFINED) + GET_TARGET_PROPERTY(libmysql_link_flags libmysql LINK_FLAGS) + IF(NOT libmysql_link_flag) + SET(libmysql_link_flags) + ENDIF() + SET_TARGET_PROPERTIES(libmysql PROPERTIES LINK_FLAGS + "${libmysql_link_flags} ${LINK_FLAG_NO_UNDEFINED}") + ENDIF() + # clean direct output needs to be set several targets have the same name + #(mysqlclient in this case) + SET_TARGET_PROPERTIES(mysqlclient PROPERTIES CLEAN_DIRECT_OUTPUT 1) + SET_TARGET_PROPERTIES(libmysql PROPERTIES CLEAN_DIRECT_OUTPUT 1) + INSTALL_SYMLINK(${CMAKE_SHARED_LIBRARY_PREFIX}mysqlclient_r libmysql lib) + ENDIF() +ENDIF() === modified file 'libmysql/libmysql.def' --- a/libmysql/libmysql.def 2009-11-09 10:27:46 +0000 +++ b/libmysql/libmysql.def 2009-12-13 22:13:25 +0000 @@ -1,7 +1,7 @@ LIBRARY LIBMYSQL VERSION 6.0 EXPORTS - mysql_get_parameters + load_defaults mysql_thread_end mysql_thread_init myodbc_remove_escape @@ -105,4 +105,3 @@ EXPORTS mysql_server_end mysql_set_character_set mysql_get_character_set_info - mysql_stmt_next_result === modified file 'libmysqld/CMakeLists.txt' --- a/libmysqld/CMakeLists.txt 2009-12-02 14:52:07 +0000 +++ b/libmysqld/CMakeLists.txt 2009-12-13 22:13:25 +0000 @@ -13,92 +13,39 @@ # 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 + ${SSL_DEFINES}) -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 +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 +${CMAKE_BINARY_DIR}/sql/sql_builtin.cc +) + +SET_SOURCE_FILES_PROPERTIES(${GEN_SOURCES} PROPERTIES GENERATED TRUE) + +SET(SQL_EMBEDDED_SOURCES emb_qcache.cc libmysqld.c lib_sql.cc ../libmysql/libmysql.c ../libmysql/errmsg.c ../client/get_password.c ../sql-common/client.c ../sql-common/my_time.c ../sql-common/my_user.c ../sql-common/pack.c ../sql/password.c ../sql/discover.cc ../sql/derror.cc ../sql/field.cc ../sql/field_conv.cc - ../sql/filesort.cc ../sql/gstream.cc ../sql/ha_partition.cc + ../sql/filesort.cc ../sql/gstream.cc ../sql/handler.cc ../sql/hash_filo.cc ../sql/hostname.cc ../sql/init.cc ../sql/item_buff.cc ../sql/item_cmpfunc.cc ../sql/item.cc ../sql/item_create.cc ../sql/item_func.cc @@ -139,28 +86,48 @@ SET(LIBMYSQLD_SOURCES emb_qcache.cc libm ../sql/transaction.cc ../sql/rpl_handler.cc ${GEN_SOURCES} - ${LIB_SOURCES}) + ${MYSYS_LIBWRAP_SOURCE} +) + -# 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) +ADD_LIBRARY(sql_embedded STATIC ${SQL_EMBEDDED_SOURCES}) +DTRACE_INSTRUMENT(sql_embedded) +ADD_DEPENDENCIES(sql_embedded 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() + + +SET(LIBS + dbug strings regex mysys vio + ${ZLIB_LIBRARY} ${SSL_LIBRARIES} + ${LIBWRAP} ${LIBCRYPT} ${LIBDL} + ${MYSQLD_STATIC_PLUGIN_LIBS} ${NDB_CLIENT_LIBS} + sql_embedded +) + +# Some storage engine were compiled for embedded specifically +# (with corresponding target ${engine}_embedded) +SET(EMBEDDED_LIBS) +FOREACH(LIB ${LIBS}) + GET_TARGET_PROPERTY(EMBEDDED_LOCATION ${LIB}_embedded LOCATION) + IF(EMBEDDED_LOCATION) + LIST(APPEND EMBEDDED_LIBS ${LIB}_embedded) + ELSE() + LIST(APPEND EMBEDDED_LIBS ${LIB}) + ENDIF() +ENDFOREACH() + +MERGE_LIBRARIES(mysqlserver STATIC ${EMBEDDED_LIBS} + OUTPUT_NAME ${MYSQLSERVER_OUTPUT_NAME}) +MYSQL_INSTALL_TARGETS(mysqlserver DESTINATION lib) + +IF(MSVC AND NOT DISABLE_SHARED) + MERGE_LIBRARIES(libmysqld SHARED ${LIBS} EXPORTS ${CLIENT_API_FUNCTIONS}) + MYSQL_INSTALL_TARGETS(libmysqld DESTINATION lib) +ENDIF() === modified file 'libmysqld/examples/CMakeLists.txt' --- a/libmysqld/examples/CMakeLists.txt 2009-10-03 19:49:08 +0000 +++ b/libmysqld/examples/CMakeLists.txt 2009-12-13 22:13:25 +0000 @@ -15,27 +15,51 @@ 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. IF(WIN32) ADD_DEFINITIONS(-DUSE_TLS) ENDIF(WIN32) -ADD_DEFINITIONS(-DEMBEDDED_LIBRARY -DMY_USE_CLIENT_DLL) +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) -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) -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. + ADD_CUSTOM_COMMAND(OUTPUT + ${CMAKE_CURRENT_BINARY_DIR}/mysql_client_test_embedded_dummy.cc + COMMAND ${CMAKE_COMMAND} -E touch + ${CMAKE_CURRENT_BINARY_DIR}/mysql_client_test_embedded_dummy.cc + ) + ADD_EXECUTABLE(mysql_client_test_embedded + ${CMAKE_CURRENT_BINARY_DIR}/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) -TARGET_LINK_LIBRARIES(mysql_client_test_embedded libmysqld) +INSTALL(TARGETS mysql_embedded mysqltest_embedded mysql_client_test_embedded DESTINATION bin) === modified file 'libmysqld/lib_sql.cc' --- a/libmysqld/lib_sql.cc 2009-11-23 12:36:34 +0000 +++ b/libmysqld/lib_sql.cc 2009-12-13 22:13:25 +0000 @@ -729,11 +729,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) === added file 'man/CMakeLists.txt' --- a/man/CMakeLists.txt 1970-01-01 00:00:00 +0000 +++ b/man/CMakeLists.txt 2009-12-13 22:13:25 +0000 @@ -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() === modified file 'man/Makefile.am' --- a/man/Makefile.am 2009-08-31 15:23:37 +0000 +++ b/man/Makefile.am 2009-12-13 22:13:25 +0000 @@ -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: === added file 'mysql-test/CMakeLists.txt' --- a/mysql-test/CMakeLists.txt 1970-01-01 00:00:00 +0000 +++ b/mysql-test/CMakeLists.txt 2009-12-13 22:13:25 +0000 @@ -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=${CMAKE_CFG_INTDIR}) +ELSEIF(CMAKE_GENERATOR MATCHES "Xcode") + SET(SETCONFIG_COMMAND export MTR_VS_CONFIG=${CMAKE_CFG_INTDIR}) +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} +) + + === modified file 'mysql-test/Makefile.am' --- a/mysql-test/Makefile.am 2009-10-23 06:24:37 +0000 +++ b/mysql-test/Makefile.am 2009-12-13 22:13:25 +0000 @@ -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 === modified file 'mysql-test/lib/My/ConfigFactory.pm' --- a/mysql-test/lib/My/ConfigFactory.pm 2009-11-25 12:30:04 +0000 +++ b/mysql-test/lib/My/ConfigFactory.pm 2009-12-13 22:13:25 +0000 @@ -30,6 +30,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)= @_; @@ -39,7 +48,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); } @@ -335,6 +344,7 @@ my @mysql_upgrade_rules= sub post_check_client_group { my ($self, $config, $client_group_name, $mysqld_group_name)= @_; + # Settings needed for client, copied from its "mysqld" my %client_needs= ( @@ -344,7 +354,6 @@ sub post_check_client_group { user => '#user', password => '#password', ); - my $group_to_copy_from= $config->group($mysqld_group_name); while (my ($name_to, $name_from)= each( %client_needs )) { my $option= $group_to_copy_from->option($name_from); === modified file 'mysql-test/lib/My/Find.pm' --- a/mysql-test/lib/My/Find.pm 2008-09-20 13:51:31 +0000 +++ b/mysql-test/lib/My/Find.pm 2009-12-13 22:13:25 +0000 @@ -167,16 +167,16 @@ sub my_find_paths { } # ------------------------------------------------------- - # Windows specific + # CMake generator specific (Visual Studio and Xcode have multimode builds) # ------------------------------------------------------- - 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; - } + + # 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"; === modified file 'mysql-test/lib/My/SafeProcess.pm' --- a/mysql-test/lib/My/SafeProcess.pm 2009-04-29 14:13:38 +0000 +++ b/mysql-test/lib/My/SafeProcess.pm 2009-12-13 22:13:25 +0000 @@ -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); } === modified file 'mysql-test/lib/My/SafeProcess/CMakeLists.txt' --- a/mysql-test/lib/My/SafeProcess/CMakeLists.txt 2007-12-19 11:58:06 +0000 +++ b/mysql-test/lib/My/SafeProcess/CMakeLists.txt 2009-12-13 22:13:25 +0000 @@ -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") === modified file 'mysql-test/lib/My/SafeProcess/safe_kill_win.cc' --- a/mysql-test/lib/My/SafeProcess/safe_kill_win.cc 2009-09-29 22:19:00 +0000 +++ b/mysql-test/lib/My/SafeProcess/safe_kill_win.cc 2009-12-13 22:13:25 +0000 @@ -24,6 +24,7 @@ #include #include #include +#include int main(int argc, const char** argv ) { === modified file 'mysql-test/lib/My/SafeProcess/safe_process_win.cc' --- a/mysql-test/lib/My/SafeProcess/safe_process_win.cc 2009-10-06 16:10:34 +0000 +++ b/mysql-test/lib/My/SafeProcess/safe_process_win.cc 2009-12-13 22:13:25 +0000 @@ -54,6 +54,7 @@ #include #include #include +#include static int verbose= 0; static char safe_process_name[32]= {0}; @@ -245,6 +246,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) === added file 'mysql-test/mtr.out-of-source' --- a/mysql-test/mtr.out-of-source 1970-01-01 00:00:00 +0000 +++ b/mysql-test/mtr.out-of-source 2009-12-13 22:13:25 +0000 @@ -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 === modified file 'mysql-test/mysql-test-run.pl' --- a/mysql-test/mysql-test-run.pl 2009-12-05 02:58:48 +0000 +++ b/mysql-test/mysql-test-run.pl 2009-12-13 22:13:25 +0000 @@ -94,6 +94,7 @@ $SIG{INT}= sub { mtr_error("Got ^C signa our $mysql_version_id; our $glob_mysql_test_dir; our $basedir; +our $bindir; our $path_charsetsdir; our $path_client_bindir; @@ -958,7 +959,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) { @@ -967,21 +972,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()) { @@ -1119,7 +1124,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; @@ -1573,7 +1585,8 @@ sub collect_mysqld_features_from_running } sub find_mysqld { - my ($mysqld_basedir)= @_; + + my ($mysqld_basedir)= $ENV{MTR_BINDIR}|| @_; my @mysqld_names= ("mysqld", "mysqld-max-nt", "mysqld-max", "mysqld-nt"); @@ -1750,7 +1763,7 @@ sub mysql_client_test_arguments(){ sub tool_arguments ($$) { my($sedir, $tool_name) = @_; - my $exe= my_find_bin($basedir, + my $exe= my_find_bin($bindir, [$sedir, "bin"], $tool_name); @@ -1772,6 +1785,30 @@ sub have_maria_support () { # 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); @@ -1810,9 +1847,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 ) { @@ -1828,62 +1874,39 @@ 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; - if (IS_WINDOWS) - { - $semisync_master_filename = "semisync_master.dll"; - $semisync_slave_filename = "semisync_slave.dll"; - } - else - { - $semisync_master_filename = "semisync_master.so"; - $semisync_slave_filename = "semisync_slave.so"; - } - 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, - "$basedir/lib/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, - "$basedir/lib/plugin/" . $semisync_slave_filename); + + + my ($lib_semisync_master_plugin) = find_plugin("semisync_master", "plugin/semisync"); + my ($lib_semisync_slave_plugin) = find_plugin("semisync_slave", "plugin/semisync"); + + if ($lib_semisync_master_plugin && $lib_semisync_slave_plugin) { $ENV{'SEMISYNC_MASTER_PLUGIN'}= basename($lib_semisync_master_plugin); @@ -1901,10 +1924,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=". @@ -2334,18 +2357,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"); } === modified file 'mysql-test/t/fulltext_plugin.test' --- a/mysql-test/t/fulltext_plugin.test 2008-12-17 13:24:34 +0000 +++ b/mysql-test/t/fulltext_plugin.test 2009-12-13 22:13:25 +0000 @@ -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; === modified file 'mysys/CMakeLists.txt' --- a/mysys/CMakeLists.txt 2009-11-25 00:28:38 +0000 +++ b/mysys/CMakeLists.txt 2009-12-13 22:13:25 +0000 @@ -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,14 +24,14 @@ SET(MYSYS_SOURCES array.c charset-def.c 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_chmod.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_dup.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 lf_alloc-pin.c lf_dynarray.c lf_hash.c @@ -45,6 +39,31 @@ SET(MYSYS_SOURCES array.c charset-def.c my_uuid.c wqueue.c waiting_threads.c my_rdtsc.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(CMAKE_SYSTEM_NAME MATCHES "SunOS" AND CMAKE_C_COMPILER_ID MATCHES "SunPro") + # Inline assembly template for rdtsc + SET_SOURCE_FILES_PROPERTIES(my_rdtsc.c + PROPERTIES COMPILE_FLAGS "${CMAKE_CURRENT_SOURCE_DIR}/my_timer_cycles.il") +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) +ENDIF() +ADD_CONVENIENCE_LIBRARY(mysys ${MYSYS_SOURCES}) +TARGET_LINK_LIBRARIES(mysys dbug strings ${ZLIB_LIBRARY} + ${LIBNLS} ${LIBM} ${LIBRT}) +DTRACE_INSTRUMENT(mysys) === modified file 'mysys/my_create.c' --- a/mysys/my_create.c 2009-09-27 21:00:41 +0000 +++ b/mysys/my_create.c 2009-12-13 22:13:25 +0000 @@ -39,14 +39,11 @@ File my_create(const char *FileName, int 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) && === modified file 'mysys/my_getsystime.c' --- a/mysys/my_getsystime.c 2009-05-14 21:49:53 +0000 +++ b/mysys/my_getsystime.c 2009-12-13 22:13:25 +0000 @@ -152,6 +152,9 @@ ulonglong my_micro_time() #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) { #if defined(__WIN__) === modified file 'mysys/my_winthread.c' --- a/mysys/my_winthread.c 2009-12-01 01:33:55 +0000 +++ b/mysys/my_winthread.c 2009-12-13 22:13:25 +0000 @@ -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 === modified file 'mysys/mysys_priv.h' --- a/mysys/mysys_priv.h 2009-12-09 07:44:39 +0000 +++ b/mysys/mysys_priv.h 2009-12-13 22:13:25 +0000 @@ -87,6 +87,7 @@ extern PSI_file_key key_file_charset, ke void my_error_unregister_all(void); #ifdef _WIN32 +#include /* 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); === added file 'plugin/daemon_example/CMakeLists.txt' --- a/plugin/daemon_example/CMakeLists.txt 1970-01-01 00:00:00 +0000 +++ b/plugin/daemon_example/CMakeLists.txt 2009-12-13 22:13:25 +0000 @@ -0,0 +1,16 @@ +# 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 + +MYSQL_ADD_PLUGIN(DAEMON_EXAMPLE daemon_example.cc MODULE_ONLY) === modified file 'plugin/daemon_example/Makefile.am' --- a/plugin/daemon_example/Makefile.am 2009-11-05 08:44:22 +0000 +++ b/plugin/daemon_example/Makefile.am 2009-12-13 22:13:25 +0000 @@ -34,3 +34,4 @@ libdaemon_example_la_SOURCES = daemon_ex EXTRA_LIBRARIES = libdaemon_example.a noinst_LIBRARIES = @plugin_daemon_example_static_target@ libdaemon_example_a_SOURCES= daemon_example.cc +EXTRA_DIST = CMakeLists.txt === added file 'plugin/fulltext/CMakeLists.txt' --- a/plugin/fulltext/CMakeLists.txt 1970-01-01 00:00:00 +0000 +++ b/plugin/fulltext/CMakeLists.txt 2009-12-13 22:13:25 +0000 @@ -0,0 +1,17 @@ +# 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 + + +MYSQL_ADD_PLUGIN(FTEXAMPLE plugin_example.c MODULE_ONLY MODULE_OUTPUT_NAME mypluglib) === modified file 'plugin/fulltext/Makefile.am' --- a/plugin/fulltext/Makefile.am 2009-01-07 10:58:33 +0000 +++ b/plugin/fulltext/Makefile.am 2009-12-13 22:13:25 +0000 @@ -22,3 +22,4 @@ 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 === modified file 'plugin/semisync/CMakeLists.txt' --- a/plugin/semisync/CMakeLists.txt 2009-12-08 07:39:23 +0000 +++ b/plugin/semisync/CMakeLists.txt 2009-12-13 22:13:25 +0000 @@ -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,19 @@ # # 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 -SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX") -SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX") -# 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_SOURCES semisync.cc semisync_master.cc semisync_master_plugin.cc) -SET(SEMISYNC_SLAVE_SOURCES semisync.cc semisync_slave.cc semisync_slave_plugin.cc) - -ADD_DEFINITIONS(-DMYSQL_DYNAMIC_PLUGIN) -ADD_LIBRARY(semisync_master SHARED ${SEMISYNC_MASTER_SOURCES}) -TARGET_LINK_LIBRARIES(semisync_master mysqlservices mysqld) -ADD_LIBRARY(semisync_slave SHARED ${SEMISYNC_SLAVE_SOURCES}) -TARGET_LINK_LIBRARIES(semisync_slave mysqld) -MESSAGE("build SEMISYNC as DLL") +SET(SEMISYNC_MASTER_SOURCES + semisync.cc semisync_master.cc semisync_master_plugin.cc + semisync.h semisync_master.h) + +MYSQL_ADD_PLUGIN(semisync_master ${SEMISYNC_MASTER_SOURCES} + MODULE_ONLY MODULE_OUTPUT_NAME "semisync_master") + +SET(SEMISYNC_SLAVE_SOURCES semisync.cc semisync_slave.cc + semisync_slave_plugin.cc semisync.h semisync_slave.h ) +MYSQL_ADD_PLUGIN(semisync_slave ${SEMISYNC_SLAVE_SOURCES} + MODULE_ONLY MODULE_OUTPUT_NAME "semisync_slave") + === modified file 'regex/CMakeLists.txt' --- a/regex/CMakeLists.txt 2009-10-19 18:36:44 +0000 +++ b/regex/CMakeLists.txt 2009-12-13 22:13:25 +0000 @@ -17,7 +17,4 @@ INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include) SET(REGEX_SOURCES regcomp.c regerror.c regexec.c regfree.c reginit.c) - -IF(NOT SOURCE_SUBLIBS) - ADD_LIBRARY(regex ${REGEX_SOURCES}) -ENDIF(NOT SOURCE_SUBLIBS) +ADD_CONVENIENCE_LIBRARY(regex ${REGEX_SOURCES}) === modified file 'regex/regex2.h' --- a/regex/regex2.h 2002-03-06 16:04:13 +0000 +++ b/regex/regex2.h 2009-12-13 22:13:25 +0000 @@ -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] */ === modified file 'scripts/CMakeLists.txt' --- a/scripts/CMakeLists.txt 2009-10-03 19:49:08 +0000 +++ b/scripts/CMakeLists.txt 2009-12-13 22:13:25 +0000 @@ -13,65 +13,73 @@ # 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) # 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 +) + +# Build mysql_fix_privilege_tables.sql (concatenate 2 sql scripts) +FILE(WRITE ${FIX_PRIVILEGES_SQL} "") +FOREACH(FILENAME ${FIX_PRIVS_IN}) + FILE(READ "${FILENAME}" CONTENTS) + FILE(APPEND ${FIX_PRIVILEGES_SQL} "${CONTENTS}") +ENDFOREACH() + + +# 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 + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} +) -# Use comp_sql to build mysql_fix_privilege_tables_sql.c -GET_TARGET_PROPERTY(COMP_SQL_EXE comp_sql LOCATION) - -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) - -# 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) - -# ---------------------------------------------------------------------- -# 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) - -CONFIGURE_FILE(mysql_config.pl.in - scripts/mysql_config.pl ESCAPE_QUOTES @ONLY) - -CONFIGURE_FILE(mysql_convert_table_format.sh - scripts/mysql_convert_table_format.pl ESCAPE_QUOTES @ONLY) - -CONFIGURE_FILE(mysql_install_db.pl.in - scripts/mysql_install_db.pl ESCAPE_QUOTES @ONLY) - -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) - -CONFIGURE_FILE(mysqldumpslow.sh - scripts/mysqldumpslow.pl ESCAPE_QUOTES @ONLY) - -CONFIGURE_FILE(mysqlhotcopy.sh - scripts/mysqlhotcopy.pl ESCAPE_QUOTES @ONLY) + ALL + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/mysql_fix_privilege_tables_sql.c +) + +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() + +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 + ${CMAKE_CURRENT_SOURCE_DIR}/mysql_test_data_timezone.sql + DESTINATION share +) + +# TCMalloc hacks +IF($ENV{MALLOC_LIB}) + SET(MALLOC_LIB $ENV{MALLOC_LIB} CACHE STRING "malloc library") +ENDIF() + +IF(MALLOC_LIB) + INSTALL(FILES ${MALLOC_LIB} DESTINATION lib OPTIONAL) +ENDIF() + +# install_scripts.cmake delays configuring scripts (e.g mysql_install_db) +# until cpack runs (necessary to handle DESTDIR correctly) +CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/install_scripts.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/install_scripts.cmake @ONLY) +INSTALL(SCRIPT ${CMAKE_CURRENT_BINARY_DIR}/install_scripts.cmake) === modified file 'scripts/Makefile.am' --- a/scripts/Makefile.am 2009-09-17 14:36:39 +0000 +++ b/scripts/Makefile.am 2009-12-13 22:13:25 +0000 @@ -67,7 +67,8 @@ EXTRA_DIST = $(EXTRA_SCRIPTS) \ make_win_bin_dist \ mysql_fix_privilege_tables_sql.c \ mysql_system_tables_fix.sql \ - CMakeLists.txt + CMakeLists.txt \ + install_scripts.cmake.in dist_pkgdata_DATA = fill_help_tables.sql \ mysql_fix_privilege_tables.sql \ === added file 'scripts/install_scripts.cmake.in' --- a/scripts/install_scripts.cmake.in 1970-01-01 00:00:00 +0000 +++ b/scripts/install_scripts.cmake.in 2009-12-13 22:13:25 +0000 @@ -0,0 +1,242 @@ +SET(CMAKE_SYSTEM_NAME @CMAKE_SYSTEM_NAME@) +SET(UNIX @UNIX@) +SET(WIN32 @WIN32@) +SET(MSVC @MSVC@) +SET(CFLAGS "@CMAKE_C_FLAGS_RELWITHDEBINFO@") +SET(CXXFLAGS "@CMAKE_CXX_FLAGS_RELWITHDEBINFO@") +SET(LDFLAGS "@CMAKE_SHARED_LIBRARY_LINK_FLAGS@") +SET(mysqlclient_LIB_DEPENDS "@mysqlclient_LIB_DEPENDS@") +SET(mysqlserver_LIB_DEPENDS "@mysqlserver_LIB_DEPENDS@") +SET(CMAKE_CURRENT_SOURCE_DIR "@CMAKE_CURRENT_SOURCE_DIR@") +SET(CMAKE_CURRENT_BINARY_DIR "@CMAKE_CURRENT_BINARY_DIR@") +SET(CMAKE_COMPILER_IS_GNUCXX "@CMAKE_COMPILER_IS_GNUCXX@") +SET(CMAKE_CXX_COMPILER "@CMAKE_CXX_COMPILER@") +SET(CMAKE_CXX_COMPILER_ARG1 "@CMAKE_CXX_COMPILER_ARG1@") +SET(VERSION "@VERSION@") +SET(MYSQL_UNIX_ADDR "@MYSQL_UNIX_ADDR@") +SET(MYSQL_TCP_PORT_DEFAULT "@MYSQL_TCP_PORT_DEFAULT@") +SET(MYSQL_TCP_PORT "@MYSQL_TCP_PORT@") +SET(LIBDL "@LIBDL@") +SET(LIBWRAP "@LIBWRAP@") + + +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) + + + + +set(prefix "$ENV{DESTDIR}/${CMAKE_INSTALL_PREFIX}") + +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) +# some scripts use @TARGET_LINUX@ +IF(CMAKE_SYSTEM_NAME MATCHES "Linux") + SET(TARGET_LINUX 1) +ELSE() + SET(TARGET_LINUX 0) +ENDIF() + +# Use cmake variables to inspect dependencies for +# mysqlclient library (add -l stuff) +SET(CLIENT_LIBS "") +SET(LIBS "") + +# Avoid compatibility warning about lists with empty elements +IF(POLICY CMP0011) + CMAKE_POLICY(SET CMP0011 NEW) +ENDIF() +IF(POLICY CMP0007) + CMAKE_POLICY(SET CMP0007 OLD) +ENDIF() + +LIST(REMOVE_ITEM mysqlclient_LIB_DEPENDS "") +LIST(REMOVE_DUPLICATES mysqlclient_LIB_DEPENDS) +FOREACH(lib ${mysqlclient_LIB_DEPENDS}) + # Filter out "general", it is not a library, just CMake hint + IF(NOT lib STREQUAL "general" AND NOT CLIENT_LIBS MATCHES "-l${lib} ") + IF (lib MATCHES "^\\-l") + SET(CLIENT_LIBS "${CLIENT_LIBS} ${lib} ") + ELSEIF(lib MATCHES "^/") + # Full path, convert to just filename, strip "lib" prefix and extension + GET_FILENAME_COMPONENT(lib "${lib}" NAME_WE) + STRING(REGEX REPLACE "^lib" "" lib "${lib}") + SET(CLIENT_LIBS "${CLIENT_LIBS}-l${lib} " ) + ELSE() + SET(CLIENT_LIBS "${CLIENT_LIBS}-l${lib} " ) + ENDIF() + ENDIF() +ENDFOREACH() + + +IF(LIBDL AND NOT LIBDL MATCHES "-l") + SET(LIBDL "-l${LIBDL}") +ENDIF() + +IF(LIBWRAP) + SET(WRAPLIBS "-lwrap") +ENDIF() + +SET(LIBS "${CLIENT_LIBS}") + +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(${CMAKE_CURRENT_SOURCE_DIR}/${file}.pl.in + ${CMAKE_CURRENT_BINARY_DIR}/${file}.pl ESCAPE_QUOTES @ONLY) + + FILE(INSTALL DESTINATION + "${CMAKE_INSTALL_PREFIX}/scripts" TYPE FILE + PERMISSIONS OWNER_READ OWNER_WRITE + OWNER_EXECUTE GROUP_READ GROUP_EXECUTE + WORLD_READ WORLD_EXECUTE FILES + "${CMAKE_CURRENT_BINARY_DIR}/${file}.pl") + ENDFOREACH() + + FOREACH(file ${SH_FILES}) + CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/${file}.sh + ${CMAKE_CURRENT_BINARY_DIR}/${file}.pl ESCAPE_QUOTES @ONLY) + FILE(INSTALL DESTINATION + "${CMAKE_INSTALL_PREFIX}/scripts" TYPE FILE + PERMISSIONS OWNER_READ OWNER_WRITE + OWNER_EXECUTE GROUP_READ GROUP_EXECUTE + WORLD_READ WORLD_EXECUTE FILES + "${CMAKE_CURRENT_BINARY_DIR}/${file}.pl") + 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() + + FILE(INSTALL DESTINATION + "${CMAKE_INSTALL_PREFIX}/bin" TYPE FILE PERMISSIONS OWNER_READ OWNER_WRITE + OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE FILES + "${CMAKE_CURRENT_BINARY_DIR}/${file}") + ENDFOREACH() + + CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/mysqld_safe.sh + ${CMAKE_CURRENT_BINARY_DIR}/mysqld_safe @ONLY) + + FILE(INSTALL DESTINATION + "${CMAKE_INSTALL_PREFIX}/bin" TYPE FILE + PERMISSIONS OWNER_READ OWNER_WRITE + OWNER_EXECUTE GROUP_READ GROUP_EXECUTE + WORLD_READ WORLD_EXECUTE FILES + "${CMAKE_CURRENT_BINARY_DIR}/mysqld_safe" + ) + + # For some reason, mysqld_safe needs to be also in scripts directory + FILE(INSTALL DESTINATION + "${CMAKE_INSTALL_PREFIX}/scripts" TYPE FILE + PERMISSIONS OWNER_READ OWNER_WRITE + OWNER_EXECUTE GROUP_READ GROUP_EXECUTE + WORLD_READ WORLD_EXECUTE FILES + "${CMAKE_CURRENT_BINARY_DIR}/mysql_install_db") + +ENDIF() + +# Install libgcc as mylibgcc.a +IF(CMAKE_COMPILER_IS_GNUCXX) + 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}) + FILE(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/lib" + TYPE FILE OPTIONAL FILES "${LIBGCC_LOCATION}") + ENDIF() +ENDIF() + === added file 'sql-bench/CMakeLists.txt' --- a/sql-bench/CMakeLists.txt 1970-01-01 00:00:00 +0000 +++ b/sql-bench/CMakeLists.txt 2009-12-13 22:13:25 +0000 @@ -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() === modified file 'sql-bench/Makefile.am' --- a/sql-bench/Makefile.am 2009-01-07 10:58:33 +0000 +++ b/sql-bench/Makefile.am 2009-12-13 22:13:25 +0000 @@ -37,7 +37,7 @@ EXTRA_SCRIPTS = test-ATIS.sh test-conne 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 \ === modified file 'sql/CMakeLists.txt' --- a/sql/CMakeLists.txt 2009-12-02 14:52:07 +0000 +++ b/sql/CMakeLists.txt 2009-12-13 22:13:25 +0000 @@ -12,7 +12,6 @@ # 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") IF(MSVC) #Innodb plugin needs linker-generated map file to locate server exports @@ -20,25 +19,28 @@ IF(MSVC) SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /MAP /MAPINFO:EXPORTS") ENDIF(MSVC) -INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include - ${CMAKE_SOURCE_DIR}/extra/yassl/include - ${CMAKE_SOURCE_DIR}/sql - ${CMAKE_SOURCE_DIR}/regex - ${CMAKE_SOURCE_DIR}/zlib - ${CMAKE_SOURCE_DIR}/sql/backup +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_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(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(${GEN_SOURCES} PROPERTIES GENERATED 1) -ADD_DEFINITIONS(-DMYSQL_SERVER -D_CONSOLE -DHAVE_DLOPEN -DHAVE_EVENT_SCHEDULER) +ADD_DEFINITIONS(-DMYSQL_SERVER -DHAVE_EVENT_SCHEDULER) +IF(SSL_DEFINES) + ADD_DEFINITIONS(${SSL_DEFINES}) +ENDIF() ADD_SUBDIRECTORY(backup) @@ -54,8 +56,7 @@ SET (SQL_SOURCE log_event.cc rpl_record.cc rpl_reporting.cc 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 + mysqld.cc main.cc net_serv.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 @@ -81,78 +82,181 @@ SET (SQL_SOURCE bml.cc si_objects.cc si_logs.cc sql_profile.cc event_parse_data.cc mdl.cc rpl_handler.cc sql_signal.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 backup backupstream 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}) - - ADD_CUSTOM_COMMAND(TARGET mysqld PRE_LINK - COMMAND 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) + ${GEN_SOURCES} + ${MYSYS_LIBWRAP_SOURCE}) -ADD_DEPENDENCIES(sql GenError) +MYSQL_ADD_PLUGIN(partition ha_partition.cc STORAGE_ENGINE DEFAULT STATIC_ONLY) -# 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) +ADD_LIBRARY(sql STATIC ${SQL_SOURCE}) +DTRACE_INSTRUMENT(sql) +TARGET_LINK_LIBRARIES(sql ${MYSQLD_STATIC_PLUGIN_LIBS} + vio mysys dbug strings regex backup backupstream + ${LIBWRAP} ${LIBCRYPT} ${LIBDL} + ${SSL_LIBRARIES}) + +IF(WIN32) + SET(MYSQLD_SOURCE main.cc nt_servc.cc nt_servc.h) +ELSE() + SET(MYSQLD_SOURCE main.cc ${DTRACE_PROBES_ALL}) +ENDIF() + +ADD_EXECUTABLE(mysqld ${MYSQLD_SOURCE}) + +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 sql mysys 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 echo ${PLATFORM} && cscript ARGS //nologo ${PROJECT_SOURCE_DIR}/win/create_def_file.js + ${PLATFORM} ${LIB_LOCATIONS} > mysqld.def + 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 sql) +# Provide plugins with minimal set of libraries +SET(INTERFACE_LIBS ${LIBRT}) +IF(INTERFACE_LIBS) + SET_TARGET_PROPERTIES(mysqld PROPERTIES LINK_INTERFACE_LIBRARIES + "${INTERFACE_LIBS}") +ENDIF() + +# On Solaris, some extra effort is required in order to get dtrace probes +# from static libraries +DTRACE_INSTRUMENT_STATIC_LIBS(mysqld + "sql;mysys;${MYSQLD_STATIC_PLUGIN_LIBS}") + +MYSQL_INSTALL_TARGETS(mysqld DESTINATION bin) + + +# 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 +) # 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) +TARGET_LINK_LIBRARIES(gen_lex_hash mysys) + 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(sql 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) + 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 AND NOT DISABLE_SHARED) + 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) + ELSE() + # udf_example is using safemutex exported by mysqld + TARGET_LINK_LIBRARIES(udf_example mysqld) + 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} +) + + + + + +# 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 + ) + + IF(MSVC_IDE OR CMAKE_GENERATOR MATCHES "Xcode") + SET (CONFIG_PARAM -DCONFIG=${CMAKE_CFG_INTDIR}) + ENDIF() + MAKE_DIRECTORY(${CMAKE_CURRENT_BINARY_DIR}/data) + ADD_CUSTOM_COMMAND( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/data/mysql/user.frm + COMMAND ${CMAKE_COMMAND} + ${CONFIG_PARAM} + -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() === modified file 'sql/Makefile.am' --- a/sql/Makefile.am 2009-12-02 14:52:07 +0000 +++ b/sql/Makefile.am 2009-12-13 22:13:25 +0000 @@ -132,7 +132,7 @@ mysqld_SOURCES = sql_lex.cc sql_handler. net_serv.cc protocol.cc sql_state.c \ lock.cc my_lock.c \ sql_string.cc sql_manager.cc sql_map.cc \ - mysqld.cc password.c hash_filo.cc hostname.cc \ + main.cc mysqld.cc password.c hash_filo.cc hostname.cc \ sql_connect.cc scheduler.cc sql_parse.cc \ set_var.cc sql_yacc.yy \ sql_join_cache.cc \ === modified file 'sql/backup/CMakeLists.txt' --- a/sql/backup/CMakeLists.txt 2008-11-05 10:19:19 +0000 +++ b/sql/backup/CMakeLists.txt 2009-12-13 22:13:25 +0000 @@ -25,12 +25,9 @@ SET(BACKUP_SOURCES stream.cc logger.cc k be_snapshot.cc be_thread.cc backup_test.cc be_nodata.cc) -IF(NOT SOURCE_SUBLIBS) - ADD_LIBRARY(backup ${BACKUP_SOURCES}) - ADD_LIBRARY(backupstream stream_v1.c stream_v1_transport.c) -ENDIF(NOT SOURCE_SUBLIBS) +ADD_LIBRARY(backup ${BACKUP_SOURCES}) +ADD_LIBRARY(backupstream stream_v1.c stream_v1_transport.c) -TARGET_LINK_LIBRARIES(backup backupstream) -ADD_DEPENDENCIES(backup mysys) +TARGET_LINK_LIBRARIES(backup backupstream sql) ADD_DEPENDENCIES(backup GenError) === added file 'sql/main.cc' --- a/sql/main.cc 1970-01-01 00:00:00 +0000 +++ b/sql/main.cc 2009-12-13 22:13:25 +0000 @@ -0,0 +1,25 @@ +/* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +/* + main() for mysqld. + Calls mysqld_main() entry point exported by sql library. +*/ +extern int mysqld_main(int argc, char **argv); + +int main(int argc, char **argv) +{ + return mysqld_main(argc, argv); +} === modified file 'sql/mysqld.cc' --- a/sql/mysqld.cc 2009-12-03 09:24:13 +0000 +++ b/sql/mysqld.cc 2009-12-13 22:13:25 +0000 @@ -4617,7 +4617,7 @@ static void test_lc_time_sz() #ifdef __WIN__ int win_main(int argc, char **argv) #else -int main(int argc, char **argv) +int mysqld_main(int argc, char **argv) #endif { MY_INIT(argv[0]); // init my_sys library & pthreads @@ -4998,7 +4998,7 @@ default_service_handling(char **argv, } -int main(int argc, char **argv) +int mysqld_main(int argc, char **argv) { /* When several instances are running on the same machine, we === modified file 'sql/nt_servc.cc' --- a/sql/nt_servc.cc 2008-11-22 00:10:38 +0000 +++ b/sql/nt_servc.cc 2009-12-13 22:13:25 +0000 @@ -10,6 +10,7 @@ #include #include #include +#include #include "nt_servc.h" === added file 'sql/share/CMakeLists.txt' --- a/sql/share/CMakeLists.txt 1970-01-01 00:00:00 +0000 +++ b/sql/share/CMakeLists.txt 2009-12-13 22:13:25 +0000 @@ -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) === modified file 'sql/share/Makefile.am' --- a/sql/share/Makefile.am 2009-10-15 12:27:13 +0000 +++ b/sql/share/Makefile.am 2009-12-13 22:13:25 +0000 @@ -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; \ === modified file 'sql/sql_builtin.cc.in' --- a/sql/sql_builtin.cc.in 2006-12-31 01:29:11 +0000 +++ b/sql/sql_builtin.cc.in 2009-12-13 22:13:25 +0000 @@ -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[]= === modified file 'sql/sql_class.h' --- a/sql/sql_class.h 2009-12-10 14:50:03 +0000 +++ b/sql/sql_class.h 2009-12-13 22:13:25 +0000 @@ -2259,7 +2259,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 @@ -2275,6 +2275,7 @@ public: is_slave_error= 0; DBUG_VOID_RETURN; } +#ifndef EMBEDDED_LIBRARY inline bool vio_ok() const { return net.vio != 0; } /** Return FALSE if connection to client is broken. */ bool is_connected() @@ -2282,7 +2283,6 @@ public: return vio_ok() ? vio_is_connected(net.vio) : FALSE; } #else - void clear_error(); inline bool vio_ok() const { return TRUE; } inline bool is_connected() { return TRUE; } #endif === modified file 'storage/Makefile.am' --- a/storage/Makefile.am 2009-08-18 11:04:32 +0000 +++ b/storage/Makefile.am 2009-12-13 22:13:25 +0000 @@ -18,6 +18,5 @@ 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@ === modified file 'storage/archive/CMakeLists.txt' --- a/storage/archive/CMakeLists.txt 2009-08-18 11:04:32 +0000 +++ b/storage/archive/CMakeLists.txt 2009-12-13 22:13:25 +0000 @@ -13,6 +13,7 @@ # 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_SOURCES azio.c ha_archive.cc ha_archive.h) -MYSQL_STORAGE_ENGINE(ARCHIVE) +MYSQL_ADD_PLUGIN(archive ${ARCHIVE_SOURCES} STORAGE_ENGINE LINK_LIBRARIES ${ZLIB_LIBRARY}) + === modified file 'storage/blackhole/CMakeLists.txt' --- a/storage/blackhole/CMakeLists.txt 2009-10-03 19:49:08 +0000 +++ b/storage/blackhole/CMakeLists.txt 2009-12-13 22:13:25 +0000 @@ -13,7 +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(BLACKHOLE_SOURCES ha_blackhole.cc ha_blackhole.h) -MYSQL_STORAGE_ENGINE(BLACKHOLE) +SET(BLACKHOLE_SOURCES ha_blackhole.cc ha_blackhole.h) +MYSQL_ADD_PLUGIN(BLACKHOLE ${BLACKHOLE_SOURCES} STORAGE_ENGINE) === modified file 'storage/csv/CMakeLists.txt' --- a/storage/csv/CMakeLists.txt 2009-10-03 19:49:08 +0000 +++ b/storage/csv/CMakeLists.txt 2009-12-13 22:13:25 +0000 @@ -12,6 +12,7 @@ # 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") +SET(CSV_PLUGIN_STATIC "csv") +SET(CSV_PLUGIN_MANDATORY TRUE) 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 +MYSQL_ADD_PLUGIN(csv ${CSV_SOURCES} STORAGE_ENGINE MANDATORY) === modified file 'storage/example/CMakeLists.txt' --- a/storage/example/CMakeLists.txt 2009-10-03 19:49:08 +0000 +++ b/storage/example/CMakeLists.txt 2009-12-13 22:13:25 +0000 @@ -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) +MYSQL_ADD_PLUGIN(example ${EXAMPLE_SOURCES} STORAGE_ENGINE) === modified file 'storage/federated/CMakeLists.txt' --- a/storage/federated/CMakeLists.txt 2009-08-18 11:04:32 +0000 +++ b/storage/federated/CMakeLists.txt 2009-12-13 22:13:25 +0000 @@ -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) -MYSQL_STORAGE_ENGINE(FEDERATED) +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_ADD_PLUGIN(federated ${FEDERATED_SOURCES} STORAGE_ENGINE) === modified file 'storage/heap/CMakeLists.txt' --- a/storage/heap/CMakeLists.txt 2009-10-03 19:49:08 +0000 +++ b/storage/heap/CMakeLists.txt 2009-12-13 22:13:25 +0000 @@ -13,10 +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(HEAP_PLUGIN_STATIC "heap") +SET(HEAP_PLUGIN_MANDATORY TRUE) 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 hp_rename.c hp_rfirst.c hp_rkey.c hp_rlast.c hp_rnext.c hp_rprev.c hp_rrnd.c hp_rsame.c hp_scan.c hp_static.c hp_update.c hp_write.c) -MYSQL_STORAGE_ENGINE(HEAP) + +MYSQL_ADD_PLUGIN(heap ${HEAP_SOURCES} STORAGE_ENGINE MANDATORY RECOMPILE_FOR_EMBEDDED) === modified file 'storage/ibmdb2i/CMakeLists.txt' --- a/storage/ibmdb2i/CMakeLists.txt 2009-02-15 02:18:30 +0000 +++ b/storage/ibmdb2i/CMakeLists.txt 2009-12-13 22:13:25 +0000 @@ -13,13 +13,27 @@ # 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") +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) + + +MYSQL_ADD_PLUGIN(ibmdb2i ${IBMDB2I_SOURCES} STORAGE_ENGINE LINK_LIBRARIES iconv) + +ENDIF(HAVE_PASE_ENVIRONMENT) === modified file 'storage/innobase/CMakeLists.txt' --- a/storage/innobase/CMakeLists.txt 2009-09-16 05:36:47 +0000 +++ b/storage/innobase/CMakeLists.txt 2009-12-13 22:13:25 +0000 @@ -1,5 +1,5 @@ -# Copyright (C) 2006 MySQL AB -# +# Copyright (C) 2009 Oracle/Innobase Oy +# # 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. @@ -11,45 +11,133 @@ # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +# This is the CMakeLists for InnoDB Plugin -INCLUDE("${PROJECT_SOURCE_DIR}/storage/mysql_storage_engine.cmake") -ADD_DEFINITIONS(-DMYSQL_SERVER -D_WIN32 -D_LIB) +INCLUDE(CheckFunctionExists) +INCLUDE(CheckCSourceCompiles) +INCLUDE(CheckCSourceRuns) + +# 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() + +# 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 + #include + 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 + 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() + + +# Include directories under innobase +INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/storage/innobase/include + ${CMAKE_SOURCE_DIR}/storage/innobase/handler) + +# 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 CMAKE_SIZEOF_VOIDP EQUAL 8) + SET_SOURCE_FILES_PROPERTIES(mem/mem0mem.c mem/mem0pool.c + PROPERTIES COMPILE_FLAGS -Od) +ENDIF() -# Bug 19424 - InnoDB: Possibly a memory overrun of the buffer being freed (64-bit Visual C) -# Removing Win64 compiler optimizations for all innodb/mem/* files. -IF(CMAKE_GENERATOR MATCHES "Visual Studio" AND CMAKE_SIZEOF_VOID_P MATCHES 8) - SET_SOURCE_FILES_PROPERTIES(${CMAKE_SOURCE_DIR}/storage/innobase/mem/mem0mem.c - ${CMAKE_SOURCE_DIR}/storage/innobase/mem/mem0pool.c - PROPERTIES COMPILE_FLAGS -Od) -ENDIF(CMAKE_GENERATOR MATCHES "Visual Studio" AND CMAKE_SIZEOF_VOID_P MATCHES 8) - -INCLUDE_DIRECTORIES( - ${CMAKE_SOURCE_DIR}/storage/innobase/include - ${CMAKE_SOURCE_DIR}/storage/innobase/handler - ) -IF (WIN32) - IF (NOT WITHOUT_ATOMICS) -# Check if this Windows version supports atomic instructions - IF (CMAKE_SIZEOF_VOID_P MATCHES 8) -# Check for 64 bit atomics - TRY_RUN(RUN_RES COMPILE_RES ${CMAKE_BINARY_DIR} - ${CMAKE_SOURCE_DIR}/storage/innobase/win_atomics64_test.c) - IF (COMPILE_RES AND NOT RUN_RES) - MESSAGE("Adding support for Win64 atomics") - ADD_DEFINITIONS(-DWIN_ATOMICS64) - ENDIF (COMPILE_RES AND NOT RUN_RES) - ELSE (CMAKE_SIZEOF_VOID_P MATCHES 8) -# Check for 32 bit atomics - TRY_RUN(RUN_RES COMPILE_RES ${CMAKE_BINARY_DIR} - ${CMAKE_SOURCE_DIR}/storage/innobase/win_atomics32_test.c) - IF (COMPILE_RES AND NOT RUN_RES) - MESSAGE("Adding support for Win32 atomics") - ADD_DEFINITIONS(-DWIN_ATOMICS32) - ENDIF (COMPILE_RES AND NOT RUN_RES) - ENDIF (CMAKE_SIZEOF_VOID_P MATCHES 8) - ENDIF (NOT WITHOUT_ATOMICS) -ENDIF (WIN32) SET(INNOBASE_SOURCES btr/btr0btr.c btr/btr0cur.c btr/btr0pcur.c btr/btr0sea.c buf/buf0buf.c buf/buf0flu.c buf/buf0lru.c buf/buf0rea.c @@ -82,6 +170,35 @@ SET(INNOBASE_SOURCES btr/btr0btr.c btr/ trx/trx0purge.c trx/trx0rec.c trx/trx0roll.c trx/trx0rseg.c trx/trx0sys.c trx/trx0trx.c trx/trx0undo.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) + -MYSQL_STORAGE_ENGINE(INNOBASE) - +IF(WITH_INNODB) + # Legacy option + SET(WITH_INNOBASE_STORAGE_ENGINE TRUE) +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) + GET_TARGET_PROPERTY(LIB_LOCATION ha_innobase LOCATION) + IF(LIB_LOCATION) + SET_TARGET_PROPERTIES(ha_innobase PROPERTIES OUTPUT_NAME ha_innodb) + ENDIF() +ELSEIF (MYSQL_VERSION_ID LESS "50137") + # Windows only, no plugin support + IF (NOT SOURCE_SUBLIBS) + 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() +ELSE() + # New plugin support, cross-platform , base name for shared module is "ha_innodb" + MYSQL_ADD_PLUGIN(INNOBASE ${INNOBASE_SOURCES} STORAGE_ENGINE + MODULE_OUTPUT_NAME ha_innodb + LINK_LIBRARIES ${ZLIB_LIBRARY}) +ENDIF() === modified file 'storage/innobase/handler/ha_innodb.cc' --- a/storage/innobase/handler/ha_innodb.cc 2009-11-03 09:57:42 +0000 +++ b/storage/innobase/handler/ha_innodb.cc 2009-12-13 22:13:25 +0000 @@ -43,7 +43,7 @@ have disabled the InnoDB inlining in thi #ifndef MYSQL_SERVER /* This is needed because of Bug #3596. Let us hope that pthread_mutex_t is defined the same in both builds: the MySQL server and the InnoDB plugin. */ -extern pthread_mutex_t LOCK_thread_count; +extern MYSQL_PLUGIN_IMPORT pthread_mutex_t LOCK_thread_count; #endif /* MYSQL_SERVER */ /** to protect innobase_open_files */ === modified file 'storage/myisam/CMakeLists.txt' --- a/storage/myisam/CMakeLists.txt 2009-12-11 06:07:07 +0000 +++ b/storage/myisam/CMakeLists.txt 2009-12-13 22:13:25 +0000 @@ -12,9 +12,6 @@ # 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_SOURCES ft_boolean_search.c ft_nlq_search.c ft_parser.c ft_static.c ha_myisam.cc ft_myisam.c ft_stopwords.c ft_update.c mi_cache.c mi_changed.c mi_check.c @@ -28,44 +25,43 @@ SET(MYISAM_SOURCES ft_boolean_search.c rt_split.c sort.c sp_key.c mi_extrafunc.h myisamdef.h rt_index.h mi_rkey.c mi_examine_log.c myisam_backup_engine.cc) -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(myisamchk myisamchk.c) - TARGET_LINK_LIBRARIES(myisamchk myisam mysys dbug strings zlib) +MYSQL_ADD_PLUGIN(myisam ${MYISAM_SOURCES} + STORAGE_ENGINE + MANDATORY + RECOMPILE_FOR_EMBEDDED) + +ADD_EXECUTABLE(myisam_ftdump myisam_ftdump.c) +TARGET_LINK_LIBRARIES(myisam_ftdump myisam mysys) - ADD_EXECUTABLE(myisamlog myisamlog.c) - TARGET_LINK_LIBRARIES(myisamlog myisam mysys dbug strings zlib) +ADD_EXECUTABLE(myisamchk myisamchk.c) +TARGET_LINK_LIBRARIES(myisamchk myisam mysys) - ADD_EXECUTABLE(myisampack myisampack.c) +ADD_EXECUTABLE(myisamlog myisamlog.c) +TARGET_LINK_LIBRARIES(myisamlog myisam mysys) - TARGET_LINK_LIBRARIES(myisampack myisam mysys dbug strings zlib) +ADD_EXECUTABLE(myisampack myisampack.c) +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 dbug strings zlib) + TARGET_LINK_LIBRARIES(mi_test1 myisam mysys) ADD_EXECUTABLE(mi_test2 mi_test2.c) - TARGET_LINK_LIBRARIES(mi_test2 myisam mysys dbug strings zlib) + TARGET_LINK_LIBRARIES(mi_test2 myisam mysys) ADD_EXECUTABLE(mi_test3 mi_test3.c) - TARGET_LINK_LIBRARIES(mi_test3 myisam mysys dbug strings zlib) + TARGET_LINK_LIBRARIES(mi_test3 myisam mysys) ADD_EXECUTABLE(sp_test sp_test.c) - TARGET_LINK_LIBRARIES(sp_test myisam mysys dbug strings zlib) + TARGET_LINK_LIBRARIES(sp_test myisam mysys) ADD_EXECUTABLE(rt_test rt_test.c) - TARGET_LINK_LIBRARIES(rt_test myisam mysys dbug strings zlib) + TARGET_LINK_LIBRARIES(rt_test myisam mysys) +ENDIF() +IF (MSVC) SET_TARGET_PROPERTIES(myisamchk myisampack PROPERTIES LINK_FLAGS "setargv.obj") +ENDIF() - 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) - -ENDIF(NOT SOURCE_SUBLIBS) +MYSQL_INSTALL_TARGETS(myisamchk myisamlog myisampack myisam_ftdump DESTINATION bin) === modified file 'storage/myisammrg/CMakeLists.txt' --- a/storage/myisammrg/CMakeLists.txt 2009-10-03 19:49:08 +0000 +++ b/storage/myisammrg/CMakeLists.txt 2009-12-13 22:13:25 +0000 @@ -12,8 +12,6 @@ # 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") - SET(MYISAMMRG_SOURCES myrg_close.c myrg_create.c myrg_delete.c myrg_extra.c myrg_info.c ha_myisammrg.cc myrg_locking.c myrg_open.c myrg_panic.c myrg_queue.c myrg_range.c @@ -21,4 +19,4 @@ SET(MYISAMMRG_SOURCES myrg_close.c myrg myrg_rprev.c myrg_rrnd.c myrg_rsame.c myrg_static.c myrg_update.c myrg_write.c myrg_records.c) -MYSQL_STORAGE_ENGINE(MYISAMMRG) +MYSQL_ADD_PLUGIN(MYISAMMRG ${MYISAMMRG_SOURCES} STORAGE_ENGINE MANDATORY RECOMPILE_FOR_EMBEDDED) === modified file 'strings/CMakeLists.txt' --- a/strings/CMakeLists.txt 2009-10-03 19:49:08 +0000 +++ b/strings/CMakeLists.txt 2009-12-13 22:13:25 +0000 @@ -22,9 +22,6 @@ SET(STRINGS_SOURCES bchange.c bcmp.c bfi 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 strtol.c strtoll.c strtoul.c strtoull.c strxmov.c strxnmov.c xml.c - my_strchr.c strcont.c strinstr.c strnlen.c - strappend.c) + my_strchr.c strcont.c strinstr.c strnlen.c strappend.c) -IF(NOT SOURCE_SUBLIBS) - ADD_LIBRARY(strings ${STRINGS_SOURCES}) -ENDIF(NOT SOURCE_SUBLIBS) +ADD_CONVENIENCE_LIBRARY(strings ${STRINGS_SOURCES}) === added file 'support-files/CMakeLists.txt' --- a/support-files/CMakeLists.txt 1970-01-01 00:00:00 +0000 +++ b/support-files/CMakeLists.txt 2009-12-13 22:13:25 +0000 @@ -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() + === modified file 'support-files/Makefile.am' --- a/support-files/Makefile.am 2009-07-02 14:23:36 +0000 +++ b/support-files/Makefile.am 2009-12-13 22:13:25 +0000 @@ -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 === modified file 'tests/CMakeLists.txt' --- a/tests/CMakeLists.txt 2009-10-03 19:49:08 +0000 +++ b/tests/CMakeLists.txt 2009-12-13 22:13:25 +0000 @@ -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) === modified file 'unittest/mysys/CMakeLists.txt' --- a/unittest/mysys/CMakeLists.txt 2009-11-25 00:28:38 +0000 +++ b/unittest/mysys/CMakeLists.txt 2009-12-13 22:13:25 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2007 MySQL AB, 2008-2009 Sun Microsystems, Inc +# 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 @@ -13,29 +13,20 @@ # 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}/zlib +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) -ADD_EXECUTABLE(bitmap-t bitmap-t.c) -TARGET_LINK_LIBRARIES(bitmap-t mytap mysys dbug strings) -ADD_EXECUTABLE(base64-t base64-t.c) -TARGET_LINK_LIBRARIES(base64-t mytap mysys dbug strings) -ADD_EXECUTABLE(my_atomic-t my_atomic-t.c) -TARGET_LINK_LIBRARIES(my_atomic-t mytap mysys dbug strings) +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() -ADD_EXECUTABLE(lf-t lf-t.c) -TARGET_LINK_LIBRARIES(lf-t mytap mysys dbug strings) - -ADD_EXECUTABLE(waiting_threads-t waiting_threads-t.c) -TARGET_LINK_LIBRARIES(waiting_threads-t mytap mysys dbug strings) - -ADD_EXECUTABLE(safe_cleanup_cat_path-t safe_cleanup_cat_path-t.c) -TARGET_LINK_LIBRARIES(safe_cleanup_cat_path-t mytap mysys dbug strings) - -ADD_EXECUTABLE(my_rdtsc-t my_rdtsc-t.c) -TARGET_LINK_LIBRARIES(my_rdtsc-t mytap mysys dbug strings) +FOREACH(testname bitmap base64 my_vsnprintf my_atomic my_rdtsc lf) + MY_ADD_TEST(${testname}) +ENDFOREACH() === modified file 'unittest/mytap/CMakeLists.txt' --- a/unittest/mytap/CMakeLists.txt 2008-11-05 10:19:19 +0000 +++ b/unittest/mytap/CMakeLists.txt 2009-12-13 22:13:25 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2007 MySQL AB +# 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 @@ -14,8 +14,5 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/zlib - ${CMAKE_SOURCE_DIR}/sql - ${CMAKE_SOURCE_DIR}/regex - ${CMAKE_SOURCE_DIR}/extra/yassl/include) +INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include) ADD_LIBRARY(mytap tap.c) === modified file 'vio/CMakeLists.txt' --- a/vio/CMakeLists.txt 2009-10-03 19:49:08 +0000 +++ b/vio/CMakeLists.txt 2009-12-13 22:13:25 +0000 @@ -14,13 +14,10 @@ # 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) - +ADD_CONVENIENCE_LIBRARY(vio ${VIO_SOURCES}) +TARGET_LINK_LIBRARIES(vio ${LIBSOCKET}) === modified file 'win/create_def_file.js' --- a/win/create_def_file.js 2009-03-28 00:27:25 +0000 +++ b/win/create_def_file.js 2009-12-13 22:13:25 +0000 @@ -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 } === modified file 'zlib/CMakeLists.txt' --- a/zlib/CMakeLists.txt 2008-11-05 10:19:19 +0000 +++ b/zlib/CMakeLists.txt 2009-12-13 22:13:25 +0000 @@ -13,16 +13,13 @@ # 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) - +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) +ADD_CONVENIENCE_LIBRARY(zlib ${ZLIB_SOURCES}) +RESTRICT_SYMBOL_EXPORTS(zlib) + --===============0677972885== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/wlad@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: wlad@stripped # target_branch: file:///export/home/wlad/bzr/mysql-6.0-codebase/ # testament_sha1: 40cf40099fc834761a8aaa436e33bd843c6d99f6 # timestamp: 2009-12-13 22:13:51 +0000 # base_revision_id: alik@stripped # # Begin bundle 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 --===============0677972885==--