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@

Reply via email to