diff options
author | Sergei Golubchik <sergii@pisem.net> | 2014-10-02 16:58:26 +0200 |
---|---|---|
committer | Sergei Golubchik <sergii@pisem.net> | 2014-10-02 16:58:26 +0200 |
commit | 604b6533940010e66ca1f75f23ad923632f63379 (patch) | |
tree | 9de8e1c8038f5d5a43f71a678c717a6bc0152d99 | |
parent | 11242006adf0bed6f5042b69816360593c23a13a (diff) | |
download | mariadb-git-604b6533940010e66ca1f75f23ad923632f63379.tar.gz |
MDEV-5749 Please add a .pc file to MariaDB for easy use via pkg-config
1. move cflags/libs cleanup from mysql_config.sh (runtime)
to for_client.cmake (build time). Include/library paths are
still calculated at runtime (they depend on the location of mysql_config)
2. Use cleaned-up cflags/libs to generate mariadb.pc
3. remove obsolete @expansions@ from mysql_config (for variables that are
never set in cmake files)
-rw-r--r-- | .bzrignore | 1 | ||||
-rw-r--r-- | CMakeLists.txt | 10 | ||||
-rw-r--r-- | cmake/cpack_rpm.cmake | 6 | ||||
-rw-r--r-- | cmake/for_clients.cmake | 77 | ||||
-rw-r--r-- | cmake/install_layout.cmake | 16 | ||||
-rw-r--r-- | scripts/CMakeLists.txt | 51 | ||||
-rw-r--r-- | scripts/mysql_config.sh | 55 | ||||
-rw-r--r-- | support-files/CMakeLists.txt | 3 | ||||
-rw-r--r-- | support-files/mariadb.pc.in | 23 |
9 files changed, 121 insertions, 121 deletions
diff --git a/.bzrignore b/.bzrignore index 522630264ec..0b649dc213d 100644 --- a/.bzrignore +++ b/.bzrignore @@ -1169,3 +1169,4 @@ storage/tokudb/ft-index/tools/tokudb_dump storage/tokudb/ft-index/tools/tokuftdump libmysql/libmysql_versions.ld scripts/mysql_config.pl +support-files/mariadb.pc diff --git a/CMakeLists.txt b/CMakeLists.txt index 375f6bb64bc..73db131454f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -85,6 +85,10 @@ ELSE() ENDIF() PROJECT(${MYSQL_PROJECT_NAME}) +SET(CPACK_PACKAGE_NAME "MariaDB") +SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "MariaDB: a very fast and robust SQL database server") +SET(CPACK_PACKAGE_URL "http://mariadb.org") + IF(BUILD_CONFIG) INCLUDE( ${CMAKE_SOURCE_DIR}/cmake/build_configurations/${BUILD_CONFIG}.cmake) @@ -410,9 +414,7 @@ ADD_SUBDIRECTORY(libmysql) ADD_SUBDIRECTORY(client) ADD_SUBDIRECTORY(extra) ADD_SUBDIRECTORY(libservices) -ADD_SUBDIRECTORY(scripts) ADD_SUBDIRECTORY(sql/share) -ADD_SUBDIRECTORY(support-files) IF(NOT WITHOUT_SERVER) ADD_SUBDIRECTORY(tests) @@ -446,6 +448,10 @@ IF(WIN32) ENDIF() ADD_SUBDIRECTORY(packaging/solaris) +INCLUDE(for_clients) +ADD_SUBDIRECTORY(scripts) +ADD_SUBDIRECTORY(support-files) + 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 diff --git a/cmake/cpack_rpm.cmake b/cmake/cpack_rpm.cmake index 30924120526..1d0feced561 100644 --- a/cmake/cpack_rpm.cmake +++ b/cmake/cpack_rpm.cmake @@ -27,15 +27,15 @@ SET(CPACK_COMPONENTS_ALL Server ManPagesServer IniFiles Server_Scripts ManPagesTest Readme ManPagesClient Test Common Client SharedLibraries) -SET(CPACK_RPM_PACKAGE_NAME "MariaDB") +SET(CPACK_RPM_PACKAGE_NAME ${CPACK_PACKAGE_NAME}) SET(CPACK_PACKAGE_FILE_NAME "${CPACK_RPM_PACKAGE_NAME}-${VERSION}-${RPM}-${CMAKE_SYSTEM_PROCESSOR}") SET(CPACK_RPM_PACKAGE_RELEASE "1%{?dist}") SET(CPACK_RPM_PACKAGE_LICENSE "GPL") SET(CPACK_RPM_PACKAGE_RELOCATABLE FALSE) SET(CPACK_RPM_PACKAGE_GROUP "Applications/Databases") -SET(CPACK_RPM_PACKAGE_URL "http://mariadb.org") -SET(CPACK_RPM_PACKAGE_SUMMARY "MariaDB: a very fast and robust SQL database server") +SET(CPACK_RPM_PACKAGE_SUMMARY ${CPACK_PACKAGE_SUMMARY}) +SET(CPACK_RPM_PACKAGE_URL ${CPACK_PACKAGE_URL}) SET(CPACK_RPM_PACKAGE_DESCRIPTION "${CPACK_RPM_PACKAGE_SUMMARY} It is GPL v2 licensed, which means you can use the it free of charge under the diff --git a/cmake/for_clients.cmake b/cmake/for_clients.cmake new file mode 100644 index 00000000000..7667e59e8f6 --- /dev/null +++ b/cmake/for_clients.cmake @@ -0,0 +1,77 @@ +# +# Generate LIBS and CFLAGS that third-party clients should use +# + +# 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() + +# Extract dependencies using CMake's internal ${target}_LIB_DEPENDS variable +# returned string in ${var} is can be passed to linker's command line +MACRO(EXTRACT_LINK_LIBRARIES target var) + IF(${target}_LIB_DEPENDS) + LIST(REMOVE_ITEM ${target}_LIB_DEPENDS "") + LIST(REMOVE_DUPLICATES ${target}_LIB_DEPENDS) + FOREACH(lib ${${target}_LIB_DEPENDS}) + # Filter out "general", it is not a library, just CMake hint + # Also, remove duplicates + IF(NOT lib STREQUAL "general" AND NOT ${var} MATCHES "-l${lib} ") + IF (lib MATCHES "^\\-l") + SET(${var} "${${var}} ${lib} ") + ELSEIF(lib MATCHES "^/") + IF (lib MATCHES "\\.(a|so([0-9.]*)|lib|dll|dylib)$") + # 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(${var} "${${var}}-l${lib} " ) + ENDIF() + ELSE() + SET(${var} "${${var}}-l${lib} " ) + ENDIF() + ENDIF() + ENDFOREACH() + ENDIF() + IF(MSVC) + STRING(REPLACE "-l" "" ${var} "${${var}}") + ENDIF() +ENDMACRO() + +EXTRACT_LINK_LIBRARIES(mysqlclient LIBS) +EXTRACT_LINK_LIBRARIES(mysqlserver EMB_LIBS) + +SET(LIBS "-lmysqlclient ${ZLIB_DEPS} ${LIBS} ${openssl_libs}") +SET(EMB_LIBS "-lmysqld ${ZLIB_DEPS} ${EMB_LIBS} ${openssl_libs}") + +MACRO(REPLACE_FOR_CLIENTS VAR) + SET(v " ${${VAR}} ") + FOREACH(del ${ARGN}) + STRING(REGEX REPLACE " -(${del}) " " " v ${v}) + ENDFOREACH(del) + STRING(REGEX REPLACE " +" " " v ${v}) + STRING(STRIP "${v}" ${VAR}_FOR_CLIENTS) +ENDMACRO() + +# Remove some options that a client doesn't have to care about +# FIXME until we have a --cxxflags, we need to remove -Xa +# and -xstrconst to make --cflags usable for Sun Forte C++ +# FIXME until we have a --cxxflags, we need to remove -AC99 +# to make --cflags usable for HP C++ (aCC) +REPLACE_FOR_CLIENTS(CFLAGS "[DU]DBUG_OFF" "[DU]SAFE_MUTEX" "[DU]NDEBUG" + "[DU]UNIV_MUST_NOT_INLINE" "[DU]FORCE_INIT_OF_VARS" "[DU]EXTRA_DEBUG" "[DU]HAVE_valgrind" + "O" "O[0-9]" "xO[0-9]" "W[-A-Za-z]*" "mtune=[-A-Za-z0-9]*" "g" "fPIC" + "mcpu=[-A-Za-z0-9]*" "unroll2" "ip" "mp" "march=[-A-Za-z0-9]*" "Xa" + "xstrconst" "xc99=none" "AC99" "restrict") + +# Same for --libs +REPLACE_FOR_CLIENTS(LIBS lmtmalloc static-libcxa i-static static-intel) +REPLACE_FOR_CLIENTS(EMB_LIBS lmtmalloc static-libcxa i-static static-intel) + diff --git a/cmake/install_layout.cmake b/cmake/install_layout.cmake index d5f60832884..ebf3852182c 100644 --- a/cmake/install_layout.cmake +++ b/cmake/install_layout.cmake @@ -103,16 +103,6 @@ IF(UNIX) ENDIF() # -# plugin_tests's value should not be used by imported plugins, -# just use if(INSTALL_PLUGINTESTDIR). -# The plugin must set its own install path for tests -# -FILE(GLOB plugin_tests - ${CMAKE_SOURCE_DIR}/plugin/*/tests - ${CMAKE_SOURCE_DIR}/internal/plugin/*/tests -) - -# # STANDALONE layout # SET(INSTALL_BINDIR_STANDALONE "bin") @@ -136,7 +126,6 @@ SET(INSTALL_SQLBENCHDIR_STANDALONE ".") SET(INSTALL_SUPPORTFILESDIR_STANDALONE "support-files") # SET(INSTALL_MYSQLDATADIR_STANDALONE "data") -SET(INSTALL_PLUGINTESTDIR_STANDALONE ${plugin_tests}) SET(INSTALL_UNIX_ADDRDIR_STANDALONE "/tmp/mysql.sock") # @@ -170,7 +159,6 @@ SET(INSTALL_SQLBENCHDIR_RPM "") SET(INSTALL_SUPPORTFILESDIR_RPM "share/mysql") # SET(INSTALL_MYSQLDATADIR_RPM "/var/lib/mysql") -SET(INSTALL_PLUGINTESTDIR_RPM ${plugin_tests}) SET(INSTALL_UNIX_ADDRDIR_RPM "${INSTALL_MYSQLDATADIR_RPM}/mysql.sock") @@ -199,7 +187,6 @@ SET(INSTALL_SQLBENCHDIR_DEB ".") SET(INSTALL_SUPPORTFILESDIR_DEB "share/mysql") # SET(INSTALL_MYSQLDATADIR_DEB "/var/lib/mysql") -SET(INSTALL_PLUGINTESTDIR_DEB ${plugin_tests}) SET(INSTALL_UNIX_ADDRDIR_DEB "/var/run/mysqld/mysqld.sock") # @@ -226,7 +213,6 @@ SET(INSTALL_SQLBENCHDIR_SVR4 ".") SET(INSTALL_SUPPORTFILESDIR_SVR4 "support-files") # SET(INSTALL_MYSQLDATADIR_SVR4 "/var/lib/mysql") -SET(INSTALL_PLUGINTESTDIR_SVR4 ${plugin_tests}) SET(INSTALL_UNIX_ADDRDIR_SVR "/tmp/mysql.sock") @@ -242,7 +228,7 @@ SET(OLD_INSTALL_LAYOUT ${INSTALL_LAYOUT} CACHE INTERNAL "") # will be defined as ${INSTALL_BINDIR_STANDALONE} by default if STANDALONE # layout is chosen) FOREACH(var BIN SBIN LIB MYSQLSHARE SHARE PLUGIN INCLUDE SCRIPT DOC MAN SYSCONF SYSCONF2 - INFO MYSQLTEST SQLBENCH DOCREADME SUPPORTFILES MYSQLDATA PLUGINTEST UNIX_ADDR) + INFO MYSQLTEST SQLBENCH DOCREADME SUPPORTFILES MYSQLDATA UNIX_ADDR) SET(INSTALL_${var}DIR ${INSTALL_${var}DIR_${INSTALL_LAYOUT}} CACHE STRING "${var} installation directory" ${FORCE}) MARK_AS_ADVANCED(INSTALL_${var}DIR) diff --git a/scripts/CMakeLists.txt b/scripts/CMakeLists.txt index 7fb57802685..89a9f40a356 100644 --- a/scripts/CMakeLists.txt +++ b/scripts/CMakeLists.txt @@ -245,57 +245,6 @@ ELSE() SET(TARGET_LINUX "false") 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() - -# Extract dependencies using CMake's internal ${target}_LIB_DEPENDS variable -# returned string in ${var} is can be passed to linker's command line -MACRO(EXTRACT_LINK_LIBRARIES target var) - IF(${target}_LIB_DEPENDS) - LIST(REMOVE_ITEM ${target}_LIB_DEPENDS "") - LIST(REMOVE_DUPLICATES ${target}_LIB_DEPENDS) - FOREACH(lib ${${target}_LIB_DEPENDS}) - # Filter out "general", it is not a library, just CMake hint - # Also, remove duplicates - IF(NOT lib STREQUAL "general" AND NOT ${var} MATCHES "-l${lib} ") - IF (lib MATCHES "^\\-l") - SET(${var} "${${var}} ${lib} ") - ELSEIF(lib MATCHES "^/") - IF (lib MATCHES "\\.(a|so([0-9.]*)|lib|dll|dylib)$") - # 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(${var} "${${var}}-l${lib} " ) - ENDIF() - ELSE() - SET(${var} "${${var}}-l${lib} " ) - ENDIF() - ENDIF() - ENDFOREACH() - ENDIF() - IF(MSVC) - STRING(REPLACE "-l" "" ${var} "${${var}}") - ENDIF() -ENDMACRO() - -EXTRACT_LINK_LIBRARIES(mysqlclient CLIENT_LIBS) -EXTRACT_LINK_LIBRARIES(mysqlserver LIBS) - -# mysql_config evaluates ${LIBDL}, we want to avoid it -# as our CLIENT_LIBS and LIBS are already correct -SET(LIBDL) - -SET(NON_THREADED_LIBS ${CLIENT_LIBS}) SET(mysql_config_COMPONENT COMPONENT Development) SET(msql2mysql_COMPONENT COMPONENT Client) SET(mysqlaccess_COMPONENT COMPONENT Client) diff --git a/scripts/mysql_config.sh b/scripts/mysql_config.sh index e4640961b34..b742b28484d 100644 --- a/scripts/mysql_config.sh +++ b/scripts/mysql_config.sh @@ -97,7 +97,6 @@ fix_path pkgincludedir include/mysql version='@VERSION@' socket='@MYSQL_UNIX_ADDR@' -ldflags='@LDFLAGS@' if [ @MYSQL_TCP_PORT_DEFAULT@ -eq 0 ]; then port=0 @@ -106,58 +105,14 @@ else fi # Create options -# We intentionally add a space to the beginning and end of lib strings, simplifies replace later -libs=" $ldflags -L$pkglibdir @RPATH_OPTION@ -lmysqlclient @ZLIB_DEPS@ @NON_THREADED_LIBS@" -libs="$libs @openssl_libs@ @STATIC_NSS_FLAGS@ " -libs_r=" $ldflags -L$pkglibdir @RPATH_OPTION@ -lmysqlclient_r @ZLIB_DEPS@ @CLIENT_LIBS@ @openssl_libs@ " -embedded_libs=" $ldflags -L$pkglibdir @RPATH_OPTION@ -lmysqld @LIBDL@ @ZLIB_DEPS@ @LIBS@ @WRAPLIBS@ @openssl_libs@ " - -if [ -r "$pkglibdir/libmygcc.a" ]; then - # When linking against the static library with a different version of GCC - # from what was used to compile the library, some symbols may not be defined - # automatically. We package the libmygcc.a from the build host, to provide - # definitions for those. Bugs 4921, 19561, 19817, 21158, etc. - libs="$libs -lmygcc " - libs_r="$libs_r -lmygcc " - embedded_libs="$embedded_libs -lmygcc " -fi +libs="-L$pkglibdir @RPATH_OPTION@ @LIBS_FOR_CLIENTS@" +embedded_libs="-L$pkglibdir @RPATH_OPTION@ @EMB_LIBS_FOR_CLIENTS@" include="-I$pkgincludedir" if [ "$basedir" != "/usr" ]; then include="$include -I$pkgincludedir/.." fi -cflags="$include @CFLAGS@ " #note: end space! - -# Remove some options that a client doesn't have to care about -# FIXME until we have a --cxxflags, we need to remove -Xa -# and -xstrconst to make --cflags usable for Sun Forte C++ -# FIXME until we have a --cxxflags, we need to remove -AC99 -# to make --cflags usable for HP C++ (aCC) -for remove in DDBUG_OFF DSAFE_MUTEX DUNIV_MUST_NOT_INLINE DFORCE_INIT_OF_VARS \ - DEXTRA_DEBUG DHAVE_valgrind O 'O[0-9]' 'xO[0-9]' 'W[-A-Za-z]*' \ - 'mtune=[-A-Za-z0-9]*' 'mcpu=[-A-Za-z0-9]*' 'march=[-A-Za-z0-9]*' \ - Xa xstrconst "xc99=none" AC99 \ - unroll2 ip mp restrict -do - # The first option we might strip will always have a space before it because - # we set -I$pkgincludedir as the first option - cflags=`echo "$cflags"|sed -e "s/ -$remove */ /g"` -done -cflags=`echo "$cflags"|sed -e 's/ *\$//'` - -# Same for --libs(_r) -for remove in lmtmalloc static-libcxa i-static static-intel -do - # We know the strings starts with a space - libs=`echo "$libs"|sed -e "s/ -$remove */ /g"` - libs_r=`echo "$libs_r"|sed -e "s/ -$remove */ /g"` - embedded_libs=`echo "$embedded_libs"|sed -e "s/ -$remove */ /g"` -done - -# Strip trailing and ending space if any, and '+' (FIXME why?) -libs=`echo "$libs" | sed -e 's; \+; ;g' | sed -e 's;^ *;;' | sed -e 's; *\$;;'` -libs_r=`echo "$libs_r" | sed -e 's; \+; ;g' | sed -e 's;^ *;;' | sed -e 's; *\$;;'` -embedded_libs=`echo "$embedded_libs" | sed -e 's; \+; ;g' | sed -e 's;^ *;;' | sed -e 's; *\$;;'` +cflags="$include @CFLAGS_FOR_CLIENTS@" usage () { cat <<EOF @@ -166,7 +121,7 @@ Options: --cflags [$cflags] --include [$include] --libs [$libs] - --libs_r [$libs_r] + --libs_r [$libs] --plugindir [$plugindir] --socket [$socket] --port [$port] @@ -187,7 +142,7 @@ while test $# -gt 0; do --cflags) echo "$cflags" ;; --include) echo "$include" ;; --libs) echo "$libs" ;; - --libs_r) echo "$libs_r" ;; + --libs_r) echo "$libs" ;; --plugindir) echo "$plugindir" ;; --socket) echo "$socket" ;; --port) echo "$port" ;; diff --git a/support-files/CMakeLists.txt b/support-files/CMakeLists.txt index 4677bd59415..0f1855c66ca 100644 --- a/support-files/CMakeLists.txt +++ b/support-files/CMakeLists.txt @@ -70,6 +70,9 @@ IF(UNIX) INSTALL(DIRECTORY RHEL4-SElinux/ DESTINATION ${inst_location}/SELinux/RHEL4 COMPONENT SupportFiles) ENDIF() + CONFIGURE_FILE(mariadb.pc.in ${CMAKE_CURRENT_BINARY_DIR}/mariadb.pc @ONLY) + INSTALL(FILES mariadb.pc DESTINATION ${INSTALL_SHAREDIR}/pkgconfig COMPONENT Development) + INSTALL(FILES mysql.m4 DESTINATION ${INSTALL_SHAREDIR}/aclocal COMPONENT Development) 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) diff --git a/support-files/mariadb.pc.in b/support-files/mariadb.pc.in new file mode 100644 index 00000000000..bc84a5c5c4c --- /dev/null +++ b/support-files/mariadb.pc.in @@ -0,0 +1,23 @@ +# these four variables are present in almost every .pc file +prefix=@CMAKE_INSTALL_PREFIX@ +exec_prefix=${prefix} +libdir=${prefix}/@INSTALL_LIBDIR@ +includedir=${prefix}/@INSTALL_INCLUDEDIR@ +# those are rarely present or not at all, but we export them regardless +bindir=${prefix}/@INSTALL_BINDIR@ +sbindir=${prefix}/@INSTALL_SBINDIR@ +scriptdir=${prefix}/@INSTALL_SCRIPTDIR@ +plugindir=${prefix}/@INSTALL_PLUGINDIR@ +docdir=${prefix}/@INSTALL_DOCDIR@ +mandir=${prefix}/@INSTALL_MANDIR@ +sharedir=${prefix}/@INSTALL_SHAREDIR@ +mysqlsharedir=${prefix}/@INSTALL_MYSQLSHAREDIR@ +mysqltestdir=${prefix}/@INSTALL_MYSQLTESTDIR@ +socket=@INSTALL_UNIX_ADDRDIR@ + +Name: @CPACK_PACKAGE_NAME@ +Description: @CPACK_PACKAGE_DESCRIPTION_SUMMARY@ +URL: @CPACK_PACKAGE_URL@ +Version: @VERSION@ +Libs: -L${libdir} @LIBS_FOR_CLIENTS@ +Cflags: -I${includedir} -I${includedir}/.. @CFLAGS_FOR_CLIENTS@ |