summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergei Golubchik <sergii@pisem.net>2014-10-02 16:58:26 +0200
committerSergei Golubchik <sergii@pisem.net>2014-10-02 16:58:26 +0200
commit604b6533940010e66ca1f75f23ad923632f63379 (patch)
tree9de8e1c8038f5d5a43f71a678c717a6bc0152d99
parent11242006adf0bed6f5042b69816360593c23a13a (diff)
downloadmariadb-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--.bzrignore1
-rw-r--r--CMakeLists.txt10
-rw-r--r--cmake/cpack_rpm.cmake6
-rw-r--r--cmake/for_clients.cmake77
-rw-r--r--cmake/install_layout.cmake16
-rw-r--r--scripts/CMakeLists.txt51
-rw-r--r--scripts/mysql_config.sh55
-rw-r--r--support-files/CMakeLists.txt3
-rw-r--r--support-files/mariadb.pc.in23
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@