mysql_config and mysqlclient.pc pick up compile flags from the build
environment. We have a fix for this upstream, and I've backported it to
5.7.16 (see attachment).
I haven't tested it with sbuild/dpkg, so when applying this, please
verify that mysql_config and mysqlclient.pc don't pick up any flags
they shouldn't.
Regards,
Norvald
diff -rup a/scripts/CMakeLists.txt b/scripts/CMakeLists.txt
--- a/scripts/CMakeLists.txt 2016-09-28 19:02:44.000000000 +0200
+++ b/scripts/CMakeLists.txt 2016-11-23 10:35:45.547116146 +0100
@@ -170,78 +170,42 @@ IF(MALLOC_LIB)
INSTALL(FILES ${MALLOC_LIB} DESTINATION ${INSTALL_LIBDIR} OPTIONAL)
ENDIF()
-IF(CMAKE_GENERATOR MATCHES "Makefiles")
- # Strip maintainer mode options if necessary
- STRING(REPLACE "${MY_C_WARNING_FLAGS}" "" CFLAGS
- "${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_RELWITHDEBINFO}")
- STRING(REPLACE "${MY_CXX_WARNING_FLAGS}" "" CXXFLAGS
- "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
- FOREACH(ARCH ${CMAKE_OSX_ARCHITECTURES})
- SET(CFLAGS "${CFLAGS} -arch ${ARCH}")
- SET(CXXFLAGS "${CXXFLAGS} -arch ${ARCH}")
- ENDFOREACH()
-ELSE()
- # Strip maintainer mode options if necessary
- STRING(REPLACE "${MY_C_WARNING_FLAGS}" "" CFLAGS
- "${CMAKE_C_FLAGS_RELWITHDEBINFO}")
- STRING(REPLACE "${MY_CXX_WARNING_FLAGS}" "" CXXFLAGS
- "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
-ENDIF()
-
-# Add trailing whitespace, before substitution below.
-SET(CFLAGS "${CFLAGS} ")
-SET(CXXFLAGS "${CXXFLAGS} ")
-
-SET(REPLACE_OPTIONS
- "-DDBUG_OFF "
- "-DEXTRA_DEBUG "
- "-DHAVE_VALGRIND "
- "-DSAFE_MUTEX "
- "-fPIC "
- "-fno-inline "
- "-fno-strict-aliasing "
- "-fstack-protector-strong "
- "-g "
- "-grecord-gcc-switches "
- "-ip "
- "-mp "
- "-pipe "
- "-restrict "
- "-unroll2 "
+SET(COMPILE_DEFINITIONS_WHITELIST
)
-# Note sequence of -W options here, most specific first.
-SET(REPLACE_REGEX_OPTIONS
- "-Wp,[-=_A-Za-z0-9]*"
- "-Werror=[-A-Za-z]*"
- "-W[-A-Za-z]*"
- "--param=[-=a-z0-9]*"
- "-O[0-9]"
- "-march=[-A-Za-z0-9]*"
- "-mcpu=[-A-Za-z0-9]*"
- "-mtune=[-A-Za-z0-9]*"
- "-specs=[-A-Za-z0-9/]*"
- "-xO[0-9]"
+# In practice: only in use on Solaris
+SET(CMAKE_C_FLAGS_WHITELIST
+ "-m32"
+ "-m64"
)
-FOREACH(option ${REPLACE_REGEX_OPTIONS})
- STRING(REGEX REPLACE "${option}" "" CFLAGS "${CFLAGS}")
- STRING(REGEX REPLACE "${option}" "" CXXFLAGS "${CXXFLAGS}")
-ENDFOREACH()
+SET(CFLAGS "")
+SET(CXXFLAGS "")
-FOREACH(option ${REPLACE_OPTIONS})
- STRING(REPLACE "${option}" " " CFLAGS "${CFLAGS}")
- STRING(REPLACE "${option}" " " CXXFLAGS "${CXXFLAGS}")
+GET_PROPERTY(cwd_definitions DIRECTORY PROPERTY COMPILE_DEFINITIONS)
+FOREACH(white_flag ${COMPILE_DEFINITIONS_WHITELIST})
+ FOREACH(flag ${cwd_definitions})
+ IF (${flag} MATCHES ${white_flag})
+ SET(CFLAGS "-D${white_flag} ${CFLAGS}")
+ SET(CXXFLAGS "-D${white_flag} ${CXXFLAGS}")
+ ENDIF()
+ ENDFOREACH()
ENDFOREACH()
-STRING(REPLACE "-fexceptions " " " CFLAGS "${CFLAGS}")
-# Finally: strip away whitespace.
-STRING(REGEX REPLACE "[ ]+" " " CFLAGS "${CFLAGS}")
-STRING(REGEX REPLACE "[ ]+" " " CXXFLAGS "${CXXFLAGS}")
-STRING(REGEX REPLACE "^[ ]+" "" CFLAGS "${CFLAGS}")
-STRING(REGEX REPLACE "^[ ]+" "" CXXFLAGS "${CXXFLAGS}")
-STRING(REGEX REPLACE "[ ]+$" "" CFLAGS "${CFLAGS}")
-STRING(REGEX REPLACE "[ ]+$" "" CXXFLAGS "${CXXFLAGS}")
+IF(CMAKE_BUILD_TYPE AND CMAKE_GENERATOR MATCHES "Makefiles")
+ STRING(TOUPPER "${CMAKE_BUILD_TYPE}" CMAKEBT)
+ SET(CMAKEBT_FLAGS "${CMAKE_C_FLAGS_${CMAKEBT}} ${CMAKE_C_FLAGS}")
+ SEPARATE_ARGUMENTS(CMAKEBT_FLAGS)
+ENDIF()
+
+FOREACH(white_flag ${CMAKE_C_FLAGS_WHITELIST})
+ FOREACH(flag ${CMAKEBT_FLAGS})
+ IF (${flag} STREQUAL ${white_flag})
+ SET(CFLAGS "${white_flag} ${CFLAGS}")
+ SET(CXXFLAGS "${white_flag} ${CXXFLAGS}")
+ ENDIF()
+ ENDFOREACH()
+ENDFOREACH()
IF(UNIX)
# FIND_PROC and CHECK_PID are used by mysqld_safe
@@ -387,6 +351,16 @@ IF(QUOTED_CMAKE_CXX_LINK_FLAGS)
SET(CONFIG_EMBEDD_LIBS "${CONFIG_EMBEDD_LIBS} ${QUOTED_CMAKE_CXX_LINK_FLAGS}")
ENDIF()
+SET(CONFIG_LIBS_PRIVATE "${CLIENT_LIBS}")
+SET(CONFIG_REQUIRES_PRIVATE "")
+# ssl.cmake should have used pkg-config rather than cmake to locate ssl
+IF (WITH_SSL STREQUAL "system")
+ SET(CONFIG_REQUIRES_PRIVATE "openssl")
+ STRING(REPLACE "-lssl" "" CONFIG_LIBS_PRIVATE "${CONFIG_LIBS_PRIVATE}")
+ STRING(REPLACE "-lcrypto" "" CONFIG_LIBS_PRIVATE "${CONFIG_LIBS_PRIVATE}")
+ STRING(REGEX REPLACE "[ ]+" " " CONFIG_LIBS_PRIVATE "${CONFIG_LIBS_PRIVATE}")
+ENDIF()
+
SET(LIBMYSQLD_LIBS_USAGE "
--libmysqld-libs [$embedded_libs]")
SET(DISABLE_EMBEDDED_SH "")
diff -rup a/scripts/mysqlclient.pc.in b/scripts/mysqlclient.pc.in
--- a/scripts/mysqlclient.pc.in 2016-09-28 19:02:44.000000000 +0200
+++ b/scripts/mysqlclient.pc.in 2016-11-23 10:29:27.372897342 +0100
@@ -1,4 +1,4 @@
-# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
#
# 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
@@ -22,4 +22,5 @@ Description: MySQL client library
Version: @LIBMYSQL_OS_SHLIB_VERSION@
Cflags: -I${includedir} @CFLAGS@
Libs: -L${libdir} -l@LIBMYSQL_OS_OUTPUT_NAME@
-Libs.private: @CONFIG_CLIENT_LIBS@
+Libs.private: @QUOTED_CMAKE_CXX_LINK_FLAGS@ @CONFIG_LIBS_PRIVATE@
+Requires.private: @CONFIG_REQUIRES_PRIVATE@