From def8d6b36399708c7e1dd28d13178b303ed14d14 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 2 Aug 2007 12:49:27 +0200 Subject: [PATCH 1/4] CMakeLists.txt (several), make_win_bin_dist: Aligned client library build and use with the Unix version when it comes to what source to include directly in the builds, and what libraries to link with (bug#30118). Also reviewed, corrected and made more clear when static or dynamic Thread Local Storage is to be used. Some code duplication was removed, and some redundant library usage were removed, reducing the risk of incorrect TLS usage. client/CMakeLists.txt: - Removed code duplication by moving build of "mysqlclient" to the "libmysql" directory - Link clients with the new "mysqlclient_notls", to protect for the case the clients use more than the client API, and access thread data directly. - Synced explicit target addition of sources with Unix. dbug/CMakeLists.txt: No need to set CXX flags, no C++ code libmysql/CMakeLists.txt: - Aligned more with Unix version when it comes to included source files - Build both DLL and static library in this directory - Produce separe static TLS version of the static client library, for use when building clients in this build that might access TLS storage directly. mysys/CMakeLists.txt: We only have to build the static TLS version, as no clients are linking directly with the "mysys" library. scripts/make_win_bin_dist: Ajusted paths to new "mysqlclient.lib" location in source tree sql/CMakeLists.txt: Removed duplicate "ha_blackhole.cc" in file listing Removed explicit link to "dbug.lib" not needed Link with the static TLS "mysqlclient_notls" tests/CMakeLists.txt: Removed explicit link to "dbug", "mysys", "yassl", "taocrypt" and "zlib" not needed. Added explicit source addition "../mysys/my_memmem.c". No need for setting CXX flags, no C++ code. Use the static TLS "mysqlclient_notls" for linkage. zlib/CMakeLists.txt: No need for a dynamic TLS version of this library, no access to thread storage is done from it. Also no need to define MYSQL_CLIENT, not used, or __WIN32__ that is handled by the library header without this define. --- client/CMakeLists.txt | 114 ++++++-------------------------------- dbug/CMakeLists.txt | 1 - libmysql/CMakeLists.txt | 59 ++++++++++++++------ mysys/CMakeLists.txt | 14 ++--- scripts/make_win_bin_dist | 4 +- sql/CMakeLists.txt | 5 +- tests/CMakeLists.txt | 8 +-- zlib/CMakeLists.txt | 6 +- 8 files changed, 79 insertions(+), 132 deletions(-) diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt index 8eaa04f8392..89675138750 100755 --- a/client/CMakeLists.txt +++ b/client/CMakeLists.txt @@ -14,128 +14,48 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA INCLUDE("${PROJECT_SOURCE_DIR}/win/mysql_manifest.cmake") +# We use the "mysqlclient_notls" library here just as safety, in case +# any of the clients here would go beond the client API and access the +# Thread Local Storage directly. + SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX") SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX") -# The old Windows build method used renamed (.cc -> .cpp) source files, fails -# in #include in mysqlbinlog.cc. So disable that using the USING_CMAKE define. -ADD_DEFINITIONS(-DUSING_CMAKE -DYASSL_PREFIX -DUSE_TLS) - INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/zlib ${CMAKE_SOURCE_DIR}/extra/yassl/include - ${CMAKE_SOURCE_DIR}/extra/yassl/taocrypt/include - ${CMAKE_SOURCE_DIR}/extra/yassl/taocrypt/mySTL ${CMAKE_SOURCE_DIR}/libmysql ${CMAKE_SOURCE_DIR}/regex - ${CMAKE_SOURCE_DIR}/mysys ${CMAKE_SOURCE_DIR}/sql ${CMAKE_SOURCE_DIR}/strings) -SET(YASSL_SOURCES ../extra/yassl/src/buffer.cpp - ../extra/yassl/src/cert_wrapper.cpp - ../extra/yassl/src/crypto_wrapper.cpp - ../extra/yassl/src/handshake.cpp - ../extra/yassl/src/lock.cpp - ../extra/yassl/src/log.cpp - ../extra/yassl/src/socket_wrapper.cpp - ../extra/yassl/src/ssl.cpp - ../extra/yassl/src/timer.cpp - ../extra/yassl/src/yassl_error.cpp - ../extra/yassl/src/yassl_imp.cpp - ../extra/yassl/src/yassl_int.cpp) - -SET(TAOCRYPT_SOURCES ../extra/yassl/taocrypt/src/aes.cpp - ../extra/yassl/taocrypt/src/aestables.cpp - ../extra/yassl/taocrypt/src/algebra.cpp - ../extra/yassl/taocrypt/src/arc4.cpp - ../extra/yassl/taocrypt/src/asn.cpp - ../extra/yassl/taocrypt/src/coding.cpp - ../extra/yassl/taocrypt/src/des.cpp - ../extra/yassl/taocrypt/src/dh.cpp - ../extra/yassl/taocrypt/src/dsa.cpp - ../extra/yassl/taocrypt/src/file.cpp - ../extra/yassl/taocrypt/src/hash.cpp - ../extra/yassl/taocrypt/src/integer.cpp - ../extra/yassl/taocrypt/src/md2.cpp - ../extra/yassl/taocrypt/src/md4.cpp - ../extra/yassl/taocrypt/src/md5.cpp - ../extra/yassl/taocrypt/src/misc.cpp - ../extra/yassl/taocrypt/src/random.cpp - ../extra/yassl/taocrypt/src/ripemd.cpp - ../extra/yassl/taocrypt/src/rsa.cpp - ../extra/yassl/taocrypt/src/sha.cpp) +ADD_EXECUTABLE(mysql completion_hash.cc mysql.cc readline.cc sql_string.cc ../mysys/my_conio.c) +TARGET_LINK_LIBRARIES(mysql mysqlclient_notls wsock32) -ADD_LIBRARY(mysqlclient ../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 ../libmysql/errmsg.c ../mysys/errors.c - ../libmysql/get_password.c ../strings/int2str.c ../strings/is_prefix.c - ../libmysql/libmysql.c ../mysys/list.c ../strings/llstr.c - ../strings/longlong2str.c ../libmysql/manager.c ../mysys/mf_cache.c - ../mysys/mf_dirname.c ../mysys/mf_fn_ext.c ../mysys/mf_format.c - ../mysys/mf_iocache.c ../mysys/mf_iocache2.c ../mysys/mf_loadpath.c - ../mysys/mf_pack.c ../mysys/mf_path.c ../mysys/mf_tempfile.c ../mysys/mf_unixpath.c - ../mysys/mf_wcomp.c ../mysys/mulalloc.c ../mysys/my_access.c ../mysys/my_alloc.c - ../mysys/my_chsize.c ../mysys/my_compress.c ../mysys/my_create.c - ../mysys/my_delete.c ../mysys/my_div.c ../mysys/my_error.c ../mysys/my_file.c - ../mysys/my_fopen.c ../mysys/my_fstream.c ../mysys/my_gethostbyname.c - ../mysys/my_getopt.c ../mysys/my_getwd.c ../mysys/my_init.c ../mysys/my_lib.c - ../mysys/my_malloc.c ../mysys/my_messnc.c ../mysys/my_net.c ../mysys/my_once.c - ../mysys/my_open.c ../mysys/my_pread.c ../mysys/my_pthread.c ../mysys/my_read.c - ../mysys/my_realloc.c ../mysys/my_rename.c ../mysys/my_seek.c - ../mysys/my_static.c ../strings/my_strtoll10.c ../mysys/my_symlink.c - ../mysys/my_symlink2.c ../mysys/my_thr_init.c ../sql-common/my_time.c - ../strings/my_vsnprintf.c ../mysys/my_wincond.c ../mysys/my_winthread.c - ../mysys/my_write.c ../sql/net_serv.cc ../sql-common/pack.c ../sql/password.c - ../mysys/safemalloc.c ../mysys/sha1.c ../strings/str2int.c - ../strings/str_alloc.c ../strings/strcend.c ../strings/strcont.c ../strings/strend.c - ../strings/strfill.c ../mysys/string.c ../strings/strinstr.c ../strings/strmake.c - ../strings/strmov.c ../strings/strnlen.c ../strings/strnmov.c ../strings/strtod.c - ../strings/strtoll.c ../strings/strtoull.c ../strings/strxmov.c ../strings/strxnmov.c - ../mysys/thr_mutex.c ../mysys/typelib.c ../vio/vio.c ../vio/viosocket.c - ../vio/viossl.c ../vio/viosslfactories.c ../strings/xml.c - ${YASSL_SOURCES} ${TAOCRYPT_SOURCES} - ) - - -ADD_DEPENDENCIES(mysqlclient GenError) -ADD_EXECUTABLE(mysql completion_hash.cc mysql.cc readline.cc sql_string.cc) -LINK_DIRECTORIES(${MYSQL_BINARY_DIR}/mysys ${MYSQL_BINARY_DIR}/zlib) -TARGET_LINK_LIBRARIES(mysql mysqlclient mysys zlib dbug wsock32) - -ADD_EXECUTABLE(mysqltest mysqltest.c) -TARGET_LINK_LIBRARIES(mysqltest mysqlclient mysys zlib dbug regex wsock32) +ADD_EXECUTABLE(mysqltest mysqltest.c ../mysys/my_getsystime.c ../mysys/my_copy.c) +TARGET_LINK_LIBRARIES(mysqltest mysqlclient_notls regex wsock32) ADD_EXECUTABLE(mysqlcheck mysqlcheck.c) -TARGET_LINK_LIBRARIES(mysqlcheck mysqlclient dbug zlib wsock32) +TARGET_LINK_LIBRARIES(mysqlcheck mysqlclient_notls wsock32) -ADD_EXECUTABLE(mysqldump mysqldump.c ../sql-common/my_user.c) -TARGET_LINK_LIBRARIES(mysqldump mysqlclient mysys dbug zlib wsock32) +ADD_EXECUTABLE(mysqldump mysqldump.c ../sql-common/my_user.c ../mysys/mf_getdate.c) +TARGET_LINK_LIBRARIES(mysqldump mysqlclient_notls wsock32) ADD_EXECUTABLE(mysqlimport mysqlimport.c) -TARGET_LINK_LIBRARIES(mysqlimport mysqlclient mysys dbug zlib wsock32) +TARGET_LINK_LIBRARIES(mysqlimport mysqlclient_notls wsock32) ADD_EXECUTABLE(mysql_upgrade mysql_upgrade.c ../mysys/my_getpagesize.c) -TARGET_LINK_LIBRARIES(mysql_upgrade mysqlclient mysys dbug zlib wsock32) +TARGET_LINK_LIBRARIES(mysql_upgrade mysqlclient_notls wsock32) ADD_DEPENDENCIES(mysql_upgrade GenFixPrivs) ADD_EXECUTABLE(mysqlshow mysqlshow.c) -TARGET_LINK_LIBRARIES(mysqlshow mysqlclient mysys dbug zlib wsock32) +TARGET_LINK_LIBRARIES(mysqlshow mysqlclient_notls wsock32) -ADD_EXECUTABLE(mysqlbinlog mysqlbinlog.cc ../mysys/mf_tempdir.c ../mysys/my_new.cc - ../mysys/my_bit.c ../mysys/my_bitmap.c - ../mysys/base64.c) -TARGET_LINK_LIBRARIES(mysqlbinlog mysqlclient dbug zlib wsock32) +ADD_EXECUTABLE(mysqlbinlog mysqlbinlog.cc ../mysys/mf_tempdir.c ../mysys/my_new.cc) +TARGET_LINK_LIBRARIES(mysqlbinlog mysqlclient_notls wsock32) ADD_EXECUTABLE(mysqladmin mysqladmin.cc) -TARGET_LINK_LIBRARIES(mysqladmin mysqlclient mysys dbug zlib wsock32) +TARGET_LINK_LIBRARIES(mysqladmin mysqlclient_notls wsock32) ADD_EXECUTABLE(echo echo.c) diff --git a/dbug/CMakeLists.txt b/dbug/CMakeLists.txt index 375fd19fb40..34f44f9a720 100755 --- a/dbug/CMakeLists.txt +++ b/dbug/CMakeLists.txt @@ -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 -SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX -D__WIN32__") SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX") INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include) diff --git a/libmysql/CMakeLists.txt b/libmysql/CMakeLists.txt index 3b18531f6c0..c659c36117a 100755 --- a/libmysql/CMakeLists.txt +++ b/libmysql/CMakeLists.txt @@ -14,14 +14,14 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA INCLUDE("${PROJECT_SOURCE_DIR}/win/mysql_manifest.cmake") -# Need to set USE_TLS, since __declspec(thread) approach to thread local -# storage does not work properly in DLLs. -SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX -DUSE_TLS") -SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX -DUSE_TLS") -SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DSAFEMALLOC -DSAFE_MUTEX -DUSE_TLS") -SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -DSAFEMALLOC -DSAFE_MUTEX -DUSE_TLS") -SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -DSAFEMALLOC -DSAFE_MUTEX -DUSE_TLS") -SET(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -DSAFEMALLOC -DSAFE_MUTEX -DUSE_TLS") +SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX") +SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX") + +# 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}/zlib @@ -31,8 +31,7 @@ INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/sql ${CMAKE_SOURCE_DIR}/strings) -ADD_LIBRARY(libmysql SHARED dll.c libmysql.def - ../mysys/array.c ../strings/bchange.c ../strings/bmove.c +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 @@ -41,10 +40,11 @@ ADD_LIBRARY(libmysql SHARED dll.c libmysql.def ../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 ../libmysql/errmsg.c ../mysys/errors.c - ../libmysql/get_password.c ../strings/int2str.c ../strings/is_prefix.c - ../libmysql/libmysql.c ../mysys/list.c ../strings/llstr.c - ../strings/longlong2str.c ../libmysql/manager.c ../mysys/mf_cache.c + ../mysys/default.c errmsg.c ../mysys/errors.c + ../mysys/hash.c ../mysys/my_sleep.c ../mysys/default_modify.c + get_password.c ../strings/int2str.c ../strings/is_prefix.c + libmysql.c ../mysys/list.c ../strings/llstr.c + ../strings/longlong2str.c manager.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 @@ -67,8 +67,35 @@ ADD_LIBRARY(libmysql SHARED dll.c libmysql.def ../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) -ADD_DEPENDENCIES(libmysql dbug vio mysys strings GenError zlib yassl taocrypt) -TARGET_LINK_LIBRARIES(libmysql mysys strings wsock32) + +# Need to set USE_TLS for building the DLL, since __declspec(thread) +# approach to thread local storage does not work properly in DLLs. +# +# The static library might be used to form another DLL, as is the case +# with the ODBC driver, so it has to be compiled with USE_TLS as well. +# +# We create a third library without USE_TLS for internal use. We can't +# be sure that some client application part of this build doesn't go +# beond the documented API, and try access the Thread Local Storage. +# The "_notls" means no Tls*() functions used, i.e. "static" TLS. + +ADD_LIBRARY(libmysql SHARED dll.c libmysql.def ${CLIENT_SOURCES}) +ADD_LIBRARY(mysqlclient STATIC ${CLIENT_SOURCES}) +ADD_LIBRARY(mysqlclient_notls STATIC ${CLIENT_SOURCES}) + +SET_TARGET_PROPERTIES(libmysql mysqlclient PROPERTIES COMPILE_FLAGS "-DUSE_TLS") + +SET(CLIENT_LIB_DEPS yassl taocrypt zlib dbug GenError) +SET(CLIENT_LIBS yassl taocrypt zlib debug dbug) + +ADD_DEPENDENCIES(libmysql ${CLIENT_LIB_DEPS}) +TARGET_LINK_LIBRARIES(libmysql ${CLIENT_LIBS} wsock32) + +ADD_DEPENDENCIES(mysqlclient ${CLIENT_LIB_DEPS}) +TARGET_LINK_LIBRARIES(mysqlclient ${CLIENT_LIBS}) + +ADD_DEPENDENCIES(mysqlclient_notls ${CLIENT_LIB_DEPS}) +TARGET_LINK_LIBRARIES(mysqlclient_notls ${CLIENT_LIBS}) ADD_EXECUTABLE(myTest mytest.c) TARGET_LINK_LIBRARIES(myTest libmysql) diff --git a/mysys/CMakeLists.txt b/mysys/CMakeLists.txt index 608d7cb1ce9..4c11b57d736 100755 --- a/mysys/CMakeLists.txt +++ b/mysys/CMakeLists.txt @@ -16,17 +16,13 @@ SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX") SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX") -# Need to set USE_TLS, since mysys is linked into libmysql.dll and -# libmysqld.dll, and __declspec(thread) approach to thread local storage does -# not work properly in DLLs. -# Currently, USE_TLS crashes in Debug builds, so until that is fixed Debug -# .dlls cannot be loaded at runtime. -SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DUSE_TLS") -SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -DUSE_TLS") -SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -DUSE_TLS") -SET(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -DUSE_TLS") +# 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. INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/zlib ${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/mysys ) + ADD_LIBRARY(mysys 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 mf_format.c mf_getdate.c mf_iocache.c mf_iocache2.c mf_keycache.c diff --git a/scripts/make_win_bin_dist b/scripts/make_win_bin_dist index beb274ca1a3..c14423a06c1 100755 --- a/scripts/make_win_bin_dist +++ b/scripts/make_win_bin_dist @@ -287,7 +287,7 @@ cp include/mysql.h \ mkdir -p $DESTDIR/lib/opt cp libmysql/$TARGET/libmysql.dll \ libmysql/$TARGET/libmysql.lib \ - client/$TARGET/mysqlclient.lib \ + libmysql/$TARGET/mysqlclient.lib \ regex/$TARGET/regex.lib \ strings/$TARGET/strings.lib \ zlib/$TARGET/zlib.lib $DESTDIR/lib/opt/ @@ -297,7 +297,7 @@ if [ x"$PACK_DEBUG" = x"" -a -f "libmysql/debug/libmysql.lib" -o \ mkdir -p $DESTDIR/lib/debug cp libmysql/debug/libmysql.dll \ libmysql/debug/libmysql.lib \ - client/debug/mysqlclient.lib \ + libmysql/debug/mysqlclient.lib \ regex/debug/regex.lib \ strings/debug/strings.lib \ zlib/debug/zlib.lib $DESTDIR/lib/debug/ diff --git a/sql/CMakeLists.txt b/sql/CMakeLists.txt index 0cbeb97184f..6726fdfd85a 100755 --- a/sql/CMakeLists.txt +++ b/sql/CMakeLists.txt @@ -51,7 +51,7 @@ ADD_EXECUTABLE(mysqld${MYSQLD_EXE_SUFFIX} discover.cc ../libmysql/errmsg.c field.cc field_conv.cc filesort.cc gstream.cc ha_blackhole.cc ha_archive.cc ha_heap.cc ha_myisam.cc ha_myisammrg.cc - ha_innodb.cc ha_federated.cc ha_berkeley.cc ha_blackhole.cc + ha_innodb.cc ha_federated.cc ha_berkeley.cc handler.cc hash_filo.cc hash_filo.h hostname.cc init.cc item.cc item_buff.cc item_cmpfunc.cc item_create.cc item_func.cc item_geofunc.cc item_row.cc @@ -128,8 +128,9 @@ ADD_CUSTOM_COMMAND( DEPENDS ${PROJECT_SOURCE_DIR}/sql/message.mc) # Gen_lex_hash +# About "mysqlclient_notls", see note in "client/CMakeLists.txt" ADD_EXECUTABLE(gen_lex_hash gen_lex_hash.cc) -TARGET_LINK_LIBRARIES(gen_lex_hash dbug mysqlclient wsock32) +TARGET_LINK_LIBRARIES(gen_lex_hash mysqlclient_notls wsock32) GET_TARGET_PROPERTY(GEN_LEX_HASH_EXE gen_lex_hash LOCATION) ADD_CUSTOM_COMMAND( OUTPUT ${PROJECT_SOURCE_DIR}/sql/lex_hash.h diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 5eade93621b..6c3964e9b12 100755 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -13,12 +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 -SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX") -SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX") +# About "mysqlclient_notls", see note in "client/CMakeLists.txt" +SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX") ADD_DEFINITIONS("-DMYSQL_CLIENT") INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include) -ADD_EXECUTABLE(mysql_client_test mysql_client_test.c) -TARGET_LINK_LIBRARIES(mysql_client_test dbug mysys mysqlclient yassl taocrypt zlib wsock32) +ADD_EXECUTABLE(mysql_client_test mysql_client_test.c ../mysys/my_memmem.c) +TARGET_LINK_LIBRARIES(mysql_client_test mysqlclient_notls wsock32) diff --git a/zlib/CMakeLists.txt b/zlib/CMakeLists.txt index ac315b0dd85..123b7f6ec7f 100755 --- a/zlib/CMakeLists.txt +++ b/zlib/CMakeLists.txt @@ -13,10 +13,14 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# 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*() .... + SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_DEBUG") SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D_DEBUG") -ADD_DEFINITIONS(-DUSE_TLS -DMYSQL_CLIENT -D__WIN32__) ADD_LIBRARY(zlib 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) From 39371b1bcbb6bad75ecad0c044bf7de63a549741 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 2 Aug 2007 15:37:33 +0200 Subject: [PATCH 2/4] Makefile.am: Add CMakeLists.txt to source distribution CMakeLists.txt: Added missing '${MYSQLD_EXE_SUFFIX}' to "mysqld" targets new in 5.1 Manual merge from 5.0 (bug#30118) CMakeLists.txt, mysqlbinlog.cc, lib_sql.cc: No need to test on USING_CMAKE, it is the only Windows build client/mysqlbinlog.cc: No need to test on USING_CMAKE, it is the only Windows build libmysqld/CMakeLists.txt: No need to test on USING_CMAKE, it is the only Windows build libmysqld/lib_sql.cc: No need to test on USING_CMAKE, it is the only Windows build libmysqld/Makefile.am: Add CMakeLists.txt to source distribution libmysqld/examples/Makefile.am: Add CMakeLists.txt to source distribution sql/CMakeLists.txt: Added missing '${MYSQLD_EXE_SUFFIX}' to "mysqld" targets new in 5.1 client/CMakeLists.txt: Manual merge from 5.0 (bug#30118) libmysql/CMakeLists.txt: Manual merge from 5.0 (bug#30118) mysys/CMakeLists.txt: Manual merge from 5.0 (bug#30118) zlib/CMakeLists.txt: Manual merge from 5.0 (bug#30118) --- client/CMakeLists.txt | 127 +++++++-------------------------- client/mysqlbinlog.cc | 8 --- libmysql/CMakeLists.txt | 56 +++++++++++---- libmysqld/CMakeLists.txt | 4 -- libmysqld/Makefile.am | 2 +- libmysqld/examples/Makefile.am | 1 + libmysqld/lib_sql.cc | 4 -- mysys/CMakeLists.txt | 21 +++--- sql/CMakeLists.txt | 8 +-- zlib/CMakeLists.txt | 2 - 10 files changed, 88 insertions(+), 145 deletions(-) diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt index 8a670cf4c4b..0b37f4d3d1c 100644 --- a/client/CMakeLists.txt +++ b/client/CMakeLists.txt @@ -14,130 +14,54 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA INCLUDE("${PROJECT_SOURCE_DIR}/win/mysql_manifest.cmake") +# We use the "mysqlclient_notls" library here just as safety, in case +# any of the clients here would go beond the client API and access the +# Thread Local Storage directly. + SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX") SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX") -# The old Windows build method used renamed (.cc -> .cpp) source files, fails -# in #include in mysqlbinlog.cc. So disable that using the USING_CMAKE define. -ADD_DEFINITIONS(-DUSING_CMAKE -DYASSL_PREFIX -DUSE_TLS) -INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include - ${CMAKE_SOURCE_DIR}/zlib +INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include + ${CMAKE_SOURCE_DIR}/zlib ${CMAKE_SOURCE_DIR}/extra/yassl/include - ${CMAKE_SOURCE_DIR}/extra/yassl/taocrypt/include - ${CMAKE_SOURCE_DIR}/extra/yassl/taocrypt/mySTL ${CMAKE_SOURCE_DIR}/libmysql ${CMAKE_SOURCE_DIR}/regex ${CMAKE_SOURCE_DIR}/sql ${CMAKE_SOURCE_DIR}/strings) -SET(YASSL_SOURCES ../extra/yassl/src/buffer.cpp - ../extra/yassl/src/cert_wrapper.cpp - ../extra/yassl/src/crypto_wrapper.cpp - ../extra/yassl/src/handshake.cpp - ../extra/yassl/src/lock.cpp - ../extra/yassl/src/log.cpp - ../extra/yassl/src/socket_wrapper.cpp - ../extra/yassl/src/ssl.cpp - ../extra/yassl/src/timer.cpp - ../extra/yassl/src/yassl_error.cpp - ../extra/yassl/src/yassl_imp.cpp - ../extra/yassl/src/yassl_int.cpp) - -SET(TAOCRYPT_SOURCES ../extra/yassl/taocrypt/src/aes.cpp - ../extra/yassl/taocrypt/src/aestables.cpp - ../extra/yassl/taocrypt/src/algebra.cpp - ../extra/yassl/taocrypt/src/arc4.cpp - ../extra/yassl/taocrypt/src/asn.cpp - ../extra/yassl/taocrypt/src/coding.cpp - ../extra/yassl/taocrypt/src/des.cpp - ../extra/yassl/taocrypt/src/dh.cpp - ../extra/yassl/taocrypt/src/dsa.cpp - ../extra/yassl/taocrypt/src/file.cpp - ../extra/yassl/taocrypt/src/hash.cpp - ../extra/yassl/taocrypt/src/integer.cpp - ../extra/yassl/taocrypt/src/md2.cpp - ../extra/yassl/taocrypt/src/md4.cpp - ../extra/yassl/taocrypt/src/md5.cpp - ../extra/yassl/taocrypt/src/misc.cpp - ../extra/yassl/taocrypt/src/random.cpp - ../extra/yassl/taocrypt/src/ripemd.cpp - ../extra/yassl/taocrypt/src/rsa.cpp - ../extra/yassl/taocrypt/src/sha.cpp) +ADD_EXECUTABLE(mysql completion_hash.cc mysql.cc readline.cc sql_string.cc ../mysys/my_conio.c) +TARGET_LINK_LIBRARIES(mysql mysqlclient_notls wsock32) - -ADD_LIBRARY(mysqlclient ../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 ../libmysql/errmsg.c ../mysys/errors.c - ../libmysql/get_password.c ../strings/int2str.c ../strings/is_prefix.c - ../libmysql/libmysql.c ../mysys/list.c ../strings/llstr.c - ../strings/longlong2str.c ../libmysql/manager.c ../mysys/mf_cache.c - ../mysys/mf_dirname.c ../mysys/mf_fn_ext.c ../mysys/mf_format.c - ../mysys/mf_iocache.c ../mysys/mf_iocache2.c ../mysys/mf_loadpath.c - ../mysys/mf_pack.c ../mysys/mf_path.c ../mysys/mf_tempfile.c ../mysys/mf_unixpath.c - ../mysys/mf_wcomp.c ../mysys/mulalloc.c ../mysys/my_access.c ../mysys/my_alloc.c - ../mysys/my_chsize.c ../mysys/my_compress.c ../mysys/my_create.c - ../mysys/my_delete.c ../mysys/my_div.c ../mysys/my_error.c ../mysys/my_file.c - ../mysys/my_fopen.c ../mysys/my_fstream.c ../mysys/my_gethostbyname.c - ../mysys/my_getopt.c ../mysys/my_getwd.c ../mysys/my_init.c ../mysys/my_lib.c - ../mysys/my_malloc.c ../mysys/my_messnc.c ../mysys/my_net.c ../mysys/my_once.c - ../mysys/my_open.c ../mysys/my_pread.c ../mysys/my_pthread.c ../mysys/my_read.c - ../mysys/my_realloc.c ../mysys/my_rename.c ../mysys/my_seek.c - ../mysys/my_static.c ../strings/my_strtoll10.c ../mysys/my_symlink.c - ../mysys/my_symlink2.c ../mysys/my_thr_init.c ../sql-common/my_time.c - ../strings/my_vsnprintf.c ../mysys/my_wincond.c ../mysys/my_winthread.c - ../mysys/my_write.c ../sql/net_serv.cc ../sql-common/pack.c ../sql/password.c - ../mysys/safemalloc.c ../mysys/sha1.c ../strings/str2int.c - ../strings/str_alloc.c ../strings/strcend.c ../strings/strcont.c ../strings/strend.c - ../strings/strfill.c ../mysys/string.c ../strings/strinstr.c ../strings/strmake.c - ../strings/strmov.c ../strings/strnlen.c ../strings/strnmov.c ../strings/strtod.c - ../strings/strtoll.c ../strings/strtoull.c ../strings/strxmov.c ../strings/strxnmov.c - ../mysys/thr_mutex.c ../mysys/typelib.c ../vio/vio.c ../vio/viosocket.c - ../vio/viossl.c ../vio/viosslfactories.c ../strings/xml.c - ${YASSL_SOURCES} ${TAOCRYPT_SOURCES} - ) - -ADD_DEPENDENCIES(mysqlclient GenError) -ADD_EXECUTABLE(mysql completion_hash.cc mysql.cc readline.cc sql_string.cc) -LINK_DIRECTORIES(${MYSQL_BINARY_DIR}/mysys ${MYSQL_BINARY_DIR}/zlib) -TARGET_LINK_LIBRARIES(mysql mysqlclient mysys zlib dbug wsock32) - -ADD_EXECUTABLE(mysqltest mysqltest.c) -TARGET_LINK_LIBRARIES(mysqltest mysqlclient mysys zlib dbug regex wsock32) +ADD_EXECUTABLE(mysqltest mysqltest.c ../mysys/my_getsystime.c ../mysys/my_copy.c) +TARGET_LINK_LIBRARIES(mysqltest mysqlclient_notls regex wsock32) ADD_EXECUTABLE(mysqlcheck mysqlcheck.c) -TARGET_LINK_LIBRARIES(mysqlcheck mysqlclient dbug zlib wsock32) +TARGET_LINK_LIBRARIES(mysqlcheck mysqlclient_notls wsock32) -ADD_EXECUTABLE(mysqldump mysqldump.c ../sql-common/my_user.c) -TARGET_LINK_LIBRARIES(mysqldump mysqlclient mysys dbug zlib wsock32) +ADD_EXECUTABLE(mysqldump mysqldump.c ../sql-common/my_user.c ../mysys/mf_getdate.c) +TARGET_LINK_LIBRARIES(mysqldump mysqlclient_notls wsock32) ADD_EXECUTABLE(mysqlimport mysqlimport.c) -TARGET_LINK_LIBRARIES(mysqlimport mysqlclient mysys dbug zlib wsock32) +TARGET_LINK_LIBRARIES(mysqlimport mysqlclient_notls wsock32) ADD_EXECUTABLE(mysql_upgrade mysql_upgrade.c ../mysys/my_getpagesize.c) -TARGET_LINK_LIBRARIES(mysql_upgrade mysqlclient dbug zlib wsock32) +TARGET_LINK_LIBRARIES(mysql_upgrade mysqlclient_notls wsock32) ADD_DEPENDENCIES(mysql_upgrade GenFixPrivs) ADD_EXECUTABLE(mysqlshow mysqlshow.c) -TARGET_LINK_LIBRARIES(mysqlshow mysqlclient mysys dbug zlib wsock32) +TARGET_LINK_LIBRARIES(mysqlshow mysqlclient_notls wsock32) -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) -TARGET_LINK_LIBRARIES(mysqlbinlog mysqlclient dbug zlib wsock32) +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) +TARGET_LINK_LIBRARIES(mysqlbinlog mysqlclient_notls wsock32) ADD_EXECUTABLE(mysqladmin mysqladmin.cc) -TARGET_LINK_LIBRARIES(mysqladmin mysqlclient mysys dbug zlib wsock32) - -ADD_EXECUTABLE(mysqlslap mysqlslap.c) -SET_SOURCE_FILES_PROPERTIES(mysqlslap.c PROPERTIES COMPILE_FLAGS "-DTHREADS") -TARGET_LINK_LIBRARIES(mysqlslap mysqlclient mysys zlib wsock32 dbug) +TARGET_LINK_LIBRARIES(mysqladmin mysqlclient_notls wsock32) ADD_EXECUTABLE(echo echo.c) @@ -153,3 +77,4 @@ IF(EMBED_MANIFESTS) MYSQL_EMBED_MANIFEST("mysqladmin" "asInvoker") MYSQL_EMBED_MANIFEST("echo" "asInvoker") ENDIF(EMBED_MANIFESTS) + diff --git a/client/mysqlbinlog.cc b/client/mysqlbinlog.cc index edade347783..3a73b424748 100644 --- a/client/mysqlbinlog.cc +++ b/client/mysqlbinlog.cc @@ -1617,17 +1617,9 @@ int main(int argc, char** argv) the server */ -#if defined(__WIN__) && !defined(USING_CMAKE) -#include "my_decimal.h" -#include "decimal.c" -#include "my_decimal.cpp" -#include "log_event.cpp" -#include "log_event_old.cpp" -#else #include "my_decimal.h" #include "decimal.c" #include "my_decimal.cc" #include "log_event.cc" #include "log_event_old.cc" -#endif diff --git a/libmysql/CMakeLists.txt b/libmysql/CMakeLists.txt index 7d4dcc1e919..c659c36117a 100644 --- a/libmysql/CMakeLists.txt +++ b/libmysql/CMakeLists.txt @@ -12,13 +12,16 @@ # 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 - -# Need to set USE_TLS, since __declspec(thread) approach to thread local -# storage does not work properly in DLLs. INCLUDE("${PROJECT_SOURCE_DIR}/win/mysql_manifest.cmake") -SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX -DUSE_TLS") -SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX -DUSE_TLS") +SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX") +SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX") + +# 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}/zlib @@ -28,8 +31,7 @@ INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/sql ${CMAKE_SOURCE_DIR}/strings) -ADD_LIBRARY(libmysql SHARED dll.c libmysql.def - ../mysys/array.c ../strings/bchange.c ../strings/bmove.c +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 @@ -38,10 +40,11 @@ ADD_LIBRARY(libmysql SHARED dll.c libmysql.def ../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 ../libmysql/errmsg.c ../mysys/errors.c - ../libmysql/get_password.c ../strings/int2str.c ../strings/is_prefix.c - ../libmysql/libmysql.c ../mysys/list.c ../strings/llstr.c - ../strings/longlong2str.c ../libmysql/manager.c ../mysys/mf_cache.c + ../mysys/default.c errmsg.c ../mysys/errors.c + ../mysys/hash.c ../mysys/my_sleep.c ../mysys/default_modify.c + get_password.c ../strings/int2str.c ../strings/is_prefix.c + libmysql.c ../mysys/list.c ../strings/llstr.c + ../strings/longlong2str.c manager.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 @@ -64,8 +67,35 @@ ADD_LIBRARY(libmysql SHARED dll.c libmysql.def ../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) -ADD_DEPENDENCIES(libmysql dbug vio mysys strings GenError zlib yassl taocrypt) -TARGET_LINK_LIBRARIES(libmysql mysys strings wsock32) + +# Need to set USE_TLS for building the DLL, since __declspec(thread) +# approach to thread local storage does not work properly in DLLs. +# +# The static library might be used to form another DLL, as is the case +# with the ODBC driver, so it has to be compiled with USE_TLS as well. +# +# We create a third library without USE_TLS for internal use. We can't +# be sure that some client application part of this build doesn't go +# beond the documented API, and try access the Thread Local Storage. +# The "_notls" means no Tls*() functions used, i.e. "static" TLS. + +ADD_LIBRARY(libmysql SHARED dll.c libmysql.def ${CLIENT_SOURCES}) +ADD_LIBRARY(mysqlclient STATIC ${CLIENT_SOURCES}) +ADD_LIBRARY(mysqlclient_notls STATIC ${CLIENT_SOURCES}) + +SET_TARGET_PROPERTIES(libmysql mysqlclient PROPERTIES COMPILE_FLAGS "-DUSE_TLS") + +SET(CLIENT_LIB_DEPS yassl taocrypt zlib dbug GenError) +SET(CLIENT_LIBS yassl taocrypt zlib debug dbug) + +ADD_DEPENDENCIES(libmysql ${CLIENT_LIB_DEPS}) +TARGET_LINK_LIBRARIES(libmysql ${CLIENT_LIBS} wsock32) + +ADD_DEPENDENCIES(mysqlclient ${CLIENT_LIB_DEPS}) +TARGET_LINK_LIBRARIES(mysqlclient ${CLIENT_LIBS}) + +ADD_DEPENDENCIES(mysqlclient_notls ${CLIENT_LIB_DEPS}) +TARGET_LINK_LIBRARIES(mysqlclient_notls ${CLIENT_LIBS}) ADD_EXECUTABLE(myTest mytest.c) TARGET_LINK_LIBRARIES(myTest libmysql) diff --git a/libmysqld/CMakeLists.txt b/libmysqld/CMakeLists.txt index dd42bafcfe0..45a298b2efe 100644 --- a/libmysqld/CMakeLists.txt +++ b/libmysqld/CMakeLists.txt @@ -20,10 +20,6 @@ SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX") # storage does not work properly in DLLs. ADD_DEFINITIONS(-DUSE_TLS -DMYSQL_SERVER) -# The old Windows build method used renamed (.cc -> .cpp) source files, fails -# in #include in lib_sql.cc. So disable that using the USING_CMAKE define. -ADD_DEFINITIONS(-DUSING_CMAKE) - INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/libmysqld ${CMAKE_SOURCE_DIR}/libmysql diff --git a/libmysqld/Makefile.am b/libmysqld/Makefile.am index 024b85eed8e..6ecce474b50 100644 --- a/libmysqld/Makefile.am +++ b/libmysqld/Makefile.am @@ -22,7 +22,7 @@ MYSQLSHAREdir = $(pkgdatadir) MYSQLBASEdir= $(prefix) MYSQLLIBdir= $(libdir) -EXTRA_DIST = libmysqld.def +EXTRA_DIST = libmysqld.def CMakeLists.txt DEFS = -DEMBEDDED_LIBRARY -DMYSQL_SERVER \ -DDEFAULT_MYSQL_HOME="\"$(MYSQLBASEdir)\"" \ -DDATADIR="\"$(MYSQLDATAdir)\"" \ diff --git a/libmysqld/examples/Makefile.am b/libmysqld/examples/Makefile.am index ec5bbbb86e5..4a91724afee 100644 --- a/libmysqld/examples/Makefile.am +++ b/libmysqld/examples/Makefile.am @@ -19,6 +19,7 @@ client_sources = $(mysqltest_embedded_SOURCES) $(mysql_SOURCES) tests_sources = $(mysql_client_test_embedded_SOURCES) BUILT_SOURCES = link_sources CLEANFILES = $(client_sources) $(tests_sources) $(BUILT_SOURCES) +EXTRA_DIST = CMakeLists.txt link_sources: for f in $(client_sources); do \ diff --git a/libmysqld/lib_sql.cc b/libmysqld/lib_sql.cc index 0ce9efca0cc..4a8387e9944 100644 --- a/libmysqld/lib_sql.cc +++ b/libmysqld/lib_sql.cc @@ -28,11 +28,7 @@ extern "C" extern unsigned long max_allowed_packet, net_buffer_length; } -#if defined(__WIN__) && !defined(USING_CMAKE) -#include "../sql/mysqld.cpp" -#else #include "../sql/mysqld.cc" -#endif C_MODE_START diff --git a/mysys/CMakeLists.txt b/mysys/CMakeLists.txt index 1ae625c4c03..08279eda00c 100644 --- a/mysys/CMakeLists.txt +++ b/mysys/CMakeLists.txt @@ -13,18 +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 -SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX") SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX") -# Need to set USE_TLS, since mysys is linked into libmysql.dll and -# libmysqld.dll, and __declspec(thread) approach to thread local storage does -# not work properly in DLLs. -# Currently, USE_TLS crashes in Debug builds, so until that is fixed Debug -# .dlls cannot be loaded at runtime. -SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DUSE_TLS") -SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -DUSE_TLS") +# 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 + +IF(EMBEDDED_ONLY) + ADD_DEFINITIONS(-DUSE_TLS) + ADD_DEFINITIONS(-DEMBEDDED_LIBRARY) +ENDIF(EMBEDDED_ONLY) INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/zlib ${CMAKE_SOURCE_DIR}/include) + ADD_LIBRARY(mysys 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 mf_format.c mf_getdate.c mf_iocache.c mf_iocache2.c mf_keycache.c diff --git a/sql/CMakeLists.txt b/sql/CMakeLists.txt index a8aa7d70586..6319ad8ac2e 100644 --- a/sql/CMakeLists.txt +++ b/sql/CMakeLists.txt @@ -91,19 +91,19 @@ IF(EMBED_MANIFESTS) MYSQL_EMBED_MANIFEST("mysqld" "asInvoker") ENDIF(EMBED_MANIFESTS) IF(WITH_ARCHIVE_STORAGE_ENGINE) - TARGET_LINK_LIBRARIES(mysqld archive) + TARGET_LINK_LIBRARIES(mysqld${MYSQLD_EXE_SUFFIX} archive) ENDIF(WITH_ARCHIVE_STORAGE_ENGINE) IF(WITH_BLACKHOLE_STORAGE_ENGINE) - TARGET_LINK_LIBRARIES(mysqld blackhole) + TARGET_LINK_LIBRARIES(mysqld${MYSQLD_EXE_SUFFIX} blackhole) ENDIF(WITH_BLACKHOLE_STORAGE_ENGINE) IF(WITH_CSV_STORAGE_ENGINE) - TARGET_LINK_LIBRARIES(mysqld csv) + TARGET_LINK_LIBRARIES(mysqld${MYSQLD_EXE_SUFFIX} csv) ENDIF(WITH_CSV_STORAGE_ENGINE) IF(WITH_EXAMPLE_STORAGE_ENGINE) TARGET_LINK_LIBRARIES(mysqld${MYSQLD_EXE_SUFFIX} example) ENDIF(WITH_EXAMPLE_STORAGE_ENGINE) IF(WITH_FEDERATED_STORAGE_ENGINE) - TARGET_LINK_LIBRARIES(mysqld federated) + TARGET_LINK_LIBRARIES(mysqld${MYSQLD_EXE_SUFFIX} federated) ENDIF(WITH_FEDERATED_STORAGE_ENGINE) IF(WITH_INNOBASE_STORAGE_ENGINE) TARGET_LINK_LIBRARIES(mysqld${MYSQLD_EXE_SUFFIX} innobase) diff --git a/zlib/CMakeLists.txt b/zlib/CMakeLists.txt index ac315b0dd85..04e33e34871 100644 --- a/zlib/CMakeLists.txt +++ b/zlib/CMakeLists.txt @@ -13,10 +13,8 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_DEBUG") SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D_DEBUG") -ADD_DEFINITIONS(-DUSE_TLS -DMYSQL_CLIENT -D__WIN32__) ADD_LIBRARY(zlib 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) From fb828592b4f6798e67f2b60f0ac56282adec5a85 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 2 Aug 2007 18:51:11 +0200 Subject: [PATCH 3/4] myisamchk.c: Fix typo in usage. myisam/myisamchk.c: Fix typo in usage. --- myisam/myisamchk.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/myisam/myisamchk.c b/myisam/myisamchk.c index 49e3ea0f142..a259fbf2c19 100644 --- a/myisam/myisamchk.c +++ b/myisam/myisamchk.c @@ -338,7 +338,7 @@ static struct my_option my_long_options[] = (gptr*) &ft_stopword_file, (gptr*) &ft_stopword_file, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, {"stats_method", OPT_STATS_METHOD, - "Specifies how index statistics collection code should threat NULLs. " + "Specifies how index statistics collection code should treat NULLs. " "Possible values of name are \"nulls_unequal\" (default behavior for 4.1/5.0), " "\"nulls_equal\" (emulate 4.0 behavior), and \"nulls_ignored\".", (gptr*) &myisam_stats_method_str, (gptr*) &myisam_stats_method_str, 0, @@ -453,7 +453,7 @@ static void usage(void) MySQL faster. You can check the calculated distribution\n\ by using '--description --verbose table_name'.\n\ --stats_method=name Specifies how index statistics collection code should\n\ - threat NULLs. Possible values of name are \"nulls_unequal\"\n\ + treat NULLs. Possible values of name are \"nulls_unequal\"\n\ (default for 4.1/5.0), \"nulls_equal\" (emulate 4.0), and \n\ \"nulls_ignored\".\n\ -d, --description Prints some information about table.\n\ From 4d2630ed467c57aac0bf96abde6d80e7ea45b247 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 2 Aug 2007 20:51:04 +0200 Subject: [PATCH 4/4] make_win_bin_dist: Simplified copying of 'mysql-test' directory scripts/make_win_bin_dist: Simplified copying of 'mysql-test' directory --- scripts/make_win_bin_dist | 81 ++++++++++++++------------------------- 1 file changed, 28 insertions(+), 53 deletions(-) diff --git a/scripts/make_win_bin_dist b/scripts/make_win_bin_dist index c14423a06c1..14ea77e3e0e 100755 --- a/scripts/make_win_bin_dist +++ b/scripts/make_win_bin_dist @@ -144,14 +144,16 @@ fi mkdir $DESTDIR mkdir $DESTDIR/bin -cp client/$TARGET/*.exe $DESTDIR/bin/ -cp extra/$TARGET/*.exe $DESTDIR/bin/ -cp myisam/$TARGET/*.exe $DESTDIR/bin/ -cp server-tools/instance-manager/$TARGET/*.exe $DESTDIR/bin/ -cp server-tools/instance-manager/$TARGET/*.pdb $DESTDIR/bin/ || true -cp server-tools/instance-manager/$TARGET/*.map $DESTDIR/bin/ || true -cp tests/$TARGET/*.exe $DESTDIR/bin/ -cp libmysql/$TARGET/libmysql.dll $DESTDIR/bin/ +cp client/$TARGET/*.exe $DESTDIR/bin/ +cp extra/$TARGET/*.exe $DESTDIR/bin/ +cp myisam/$TARGET/*.exe $DESTDIR/bin/ +cp server-tools/instance-manager/$TARGET/*.{exe,map} $DESTDIR/bin/ +if [ x"$TARGET" != x"release" ] ; then + cp server-tools/instance-manager/$TARGET/*.pdb $DESTDIR/bin/ +fi +cp tests/$TARGET/*.exe $DESTDIR/bin/ +cp libmysql/$TARGET/*.exe $DESTDIR/bin/ +cp libmysql/$TARGET/libmysql.dll $DESTDIR/bin/ # FIXME really needed?! mv $DESTDIR/bin/comp_err.exe $DESTDIR/bin/comp-err.exe @@ -164,8 +166,10 @@ fi # Depending on Visual Studio target, the optimized server has symbols cp sql/$TARGET/$BASENAME.exe $DESTDIR/bin/$BASENAME$EXE_SUFFIX.exe -cp sql/$TARGET/$BASENAME.pdb $DESTDIR/bin/$BASENAME$EXE_SUFFIX.pdb || true -cp sql/$TARGET/$BASENAME.map $DESTDIR/bin/$BASENAME$EXE_SUFFIX.map || true +cp sql/$TARGET/$BASENAME.map $DESTDIR/bin/$BASENAME$EXE_SUFFIX.map +if [ x"$TARGET" != x"release" ] ; then + cp sql/$TARGET/$BASENAME.pdb $DESTDIR/bin/$BASENAME$EXE_SUFFIX.pdb +fi if [ -f "sql/debug/mysqld-debug.exe" ] ; then BASENAME="mysqld-debug" # Old style non CMake build @@ -176,19 +180,16 @@ fi if [ x"$PACK_DEBUG" = x"" -a -f "sql/debug/$BASENAME.exe" -o \ x"$PACK_DEBUG" = x"yes" ] ; then cp sql/debug/$BASENAME.exe $DESTDIR/bin/mysqld-debug.exe - cp sql/debug/$BASENAME.pdb $DESTDIR/bin/mysqld-debug.pdb || true - cp sql/debug/$BASENAME.map $DESTDIR/bin/mysqld-debug.map || true + cp sql/debug/$BASENAME.pdb $DESTDIR/bin/mysqld-debug.pdb + cp sql/debug/$BASENAME.map $DESTDIR/bin/mysqld-debug.map fi # ---------------------------------------------------------------------- # Copy data directory, readme files etc # ---------------------------------------------------------------------- -# FIXME is there ever a data directory to copy? if [ -d win/data ] ; then cp -pR win/data $DESTDIR/ -elif [ -d data ] ; then - cp -pR data $DESTDIR/ fi # FIXME maybe a flag to define "release build", or do the @@ -288,6 +289,7 @@ mkdir -p $DESTDIR/lib/opt cp libmysql/$TARGET/libmysql.dll \ libmysql/$TARGET/libmysql.lib \ libmysql/$TARGET/mysqlclient.lib \ + mysys/$TARGET/mysys.lib \ regex/$TARGET/regex.lib \ strings/$TARGET/strings.lib \ zlib/$TARGET/zlib.lib $DESTDIR/lib/opt/ @@ -298,53 +300,24 @@ if [ x"$PACK_DEBUG" = x"" -a -f "libmysql/debug/libmysql.lib" -o \ cp libmysql/debug/libmysql.dll \ libmysql/debug/libmysql.lib \ libmysql/debug/mysqlclient.lib \ + mysys/debug/mysys.lib \ regex/debug/regex.lib \ strings/debug/strings.lib \ zlib/debug/zlib.lib $DESTDIR/lib/debug/ - - if [ -f "mysys/debug/mysys-nt.lib" ] ; then - cp mysys/debug/mysys-nt.lib $DESTDIR/lib/debug/ - else - cp mysys/debug/mysys.lib $DESTDIR/lib/debug/mysys-nt.lib - fi - -fi - -if [ -f "mysys/$TARGET/mysys-nt.lib" ] ; then - cp mysys/$TARGET/mysys-nt.lib $DESTDIR/lib/opt/ -else - cp mysys/$TARGET/mysys.lib $DESTDIR/lib/opt/mysys-nt.lib fi # ---------------------------------------------------------------------- # Copy the test directory # ---------------------------------------------------------------------- -mkdir -p $DESTDIR/mysql-test/include $DESTDIR/mysql-test/lib \ - $DESTDIR/mysql-test/r $DESTDIR/mysql-test/std_data \ - $DESTDIR/mysql-test/t +mkdir $DESTDIR/mysql-test cp mysql-test/mysql-test-run.pl $DESTDIR/mysql-test/ cp mysql-test/README $DESTDIR/mysql-test/ -cp mysql-test/install_test_db.sh $DESTDIR/mysql-test/install_test_db -cp mysql-test/include/*.inc $DESTDIR/mysql-test/include/ -cp mysql-test/include/*.test $DESTDIR/mysql-test/include/ -cp mysql-test/lib/*.pl $DESTDIR/mysql-test/lib/ -cp mysql-test/lib/*.sql $DESTDIR/mysql-test/lib/ || true -cp mysql-test/r/*.require $DESTDIR/mysql-test/r/ -# Need this trick, or we get "argument list too long". -ABS_DST=`pwd`/$DESTDIR -(cd mysql-test/r/ && cp *.result $ABS_DST/mysql-test/r/) -cp mysql-test/std_data/* $DESTDIR/mysql-test/std_data/ -cp mysql-test/t/*.opt $DESTDIR/mysql-test/t/ -cp mysql-test/t/*.sh $DESTDIR/mysql-test/t/ -cp mysql-test/t/*.slave-mi $DESTDIR/mysql-test/t/ -cp mysql-test/t/*.sql $DESTDIR/mysql-test/t/ -cp mysql-test/t/*.def $DESTDIR/mysql-test/t/ -(cd mysql-test/t/ && cp *.test $ABS_DST/mysql-test/t/) +cp -R mysql-test/{t,r,include,suite,std_data,lib} $DESTDIR/mysql-test/ # Note that this will not copy "extra" if a soft link if [ -d mysql-test/extra ] ; then - mkdir -p $DESTDIR/mysql-test/extra + mkdir $DESTDIR/mysql-test/extra cp -pR mysql-test/extra/* $DESTDIR/mysql-test/extra/ fi @@ -372,17 +345,19 @@ for i in `cd scripts && ls`; do \ fi; \ done -if [ -d "share" ] ; then - cp -pR share $DESTDIR/ -else - cp -pR sql/share $DESTDIR/ -fi +cp -pR sql/share $DESTDIR/ cp -pR sql-bench $DESTDIR/ rm -f $DESTDIR/sql-bench/*.sh $DESTDIR/sql-bench/Makefile* # The SQL initialisation code is really expected to be in "share" mv $DESTDIR/scripts/*.sql $DESTDIR/share/ || true +# ---------------------------------------------------------------------- +# Clean up from possibly copied SCCS directories +# ---------------------------------------------------------------------- + +rm -rf `find $DISTDIR -type d -name SCCS -print` + # ---------------------------------------------------------------------- # Copy other files specified on command line DEST=SOURCE # ----------------------------------------------------------------------