components/mysql-5-6/patches/bug21185883.patch
author Murthy Narkedimilli <murthy.narkedimilli@oracle.com>
Fri, 31 Jul 2015 05:46:44 -0700
changeset 4725 b637001b5b2d
permissions -rw-r--r--
21164142 Upgrade the version of MySQL 5.6 to 5.6.25 on Solaris 21451804 problem in DATABASE/MYSQL 21487074 problem in DATABASE/MYSQL

Developed in-house, not fed back.
Solaris-specific: SolarisStudio Customization.
=== modified file 'CMakeLists.txt'
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (c) 2006, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2006, 2015, 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
@@ -19,6 +19,11 @@ if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" GREATER 2.6)
  CMAKE_POLICY(VERSION 2.8)
 endif()
 
+# We use CMAKE_SHARED_LIBRARY_<Lang>_FLAGS. See cmake --help-policy CMP0018
+IF(CMAKE_VERSION VERSION_GREATER "2.8.8")
+  CMAKE_POLICY(SET CMP0018 OLD)
+ENDIF()
+
 # We use PROPERTIES LINK_INTERFACE_LIBRARIES. See cmake --help-policy CMP0022
 IF(CMAKE_VERSION VERSION_EQUAL "2.8.12" OR
    CMAKE_VERSION VERSION_GREATER "2.8.12")
=== modified file 'cmake/plugin.cmake'
--- a/cmake/plugin.cmake
+++ b/cmake/plugin.cmake
@@ -1,4 +1,4 @@
-# Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2009, 2015, 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
@@ -175,6 +175,15 @@ MACRO(MYSQL_ADD_PLUGIN)
       COMPILE_DEFINITIONS "MYSQL_DYNAMIC_PLUGIN")
     TARGET_LINK_LIBRARIES (${target} mysqlservices)
 
+    GET_TARGET_PROPERTY(LINK_FLAGS ${target} LINK_FLAGS)
+    IF(NOT LINK_FLAGS)
+      # Avoid LINK_FLAGS-NOTFOUND
+      SET(LINK_FLAGS)
+    ENDIF()
+    SET_TARGET_PROPERTIES(${target} PROPERTIES
+      LINK_FLAGS "${CMAKE_SHARED_LIBRARY_C_FLAGS} ${LINK_FLAGS} "
+    )
+
     # Plugin uses symbols defined in mysqld executable.
     # Some operating systems like Windows and OSX and are pretty strict about 
     # unresolved symbols. Others are less strict and allow unresolved symbols
=== modified file 'configure.cmake'
--- a/configure.cmake
+++ b/configure.cmake
@@ -1,4 +1,4 @@
-# Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2009, 2015, 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
@@ -43,6 +43,13 @@ IF(UNIX)
 ENDIF()
 
 
+IF(CMAKE_SYSTEM_NAME MATCHES "SunOS" AND CMAKE_COMPILER_IS_GNUCXX)
+  ## We will be using gcc to generate .so files
+  ## Add C flags (e.g. -m64) to CMAKE_SHARED_LIBRARY_C_FLAGS
+  SET(CMAKE_SHARED_LIBRARY_C_FLAGS
+    "${CMAKE_SHARED_LIBRARY_C_FLAGS} ${CMAKE_C_FLAGS}")
+ENDIF()
+
 
 # System type affects version_compile_os variable 
 IF(NOT SYSTEM_TYPE)
@@ -65,6 +72,10 @@ IF(CMAKE_SYSTEM_NAME MATCHES "SunOS")
   IF(CMAKE_CXX_COMPILER_ID MATCHES "SunPro")
     IF(SUNPRO_CXX_LIBRARY)
       SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -library=${SUNPRO_CXX_LIBRARY}")
+      IF(SUNPRO_CXX_LIBRARY STREQUAL "stdcxx4")
+        ADD_DEFINITIONS(-D__MATHERR_RENAME_EXCEPTION)
+        SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -template=extdef")
+      ENDIF()
     ELSE()
       SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -library=stlport4")
     ENDIF()
@@ -88,45 +99,109 @@ MACRO(DIRNAME IN OUT)
   GET_FILENAME_COMPONENT(${OUT} ${IN} PATH)
 ENDMACRO()
 
+MACRO(FIND_REAL_LIBRARY SOFTLINK_NAME REALNAME)
+  # We re-distribute libstlport.so/libstdc++.so which are both symlinks.
+  # There is no 'readlink' on solaris, so we use perl to follow links:
+  SET(PERLSCRIPT
+    "my $link= $ARGV[0]; use Cwd qw(abs_path); my $file = abs_path($link); print $file;")
+  EXECUTE_PROCESS(
+    COMMAND perl -e "${PERLSCRIPT}" ${SOFTLINK_NAME}
+    RESULT_VARIABLE result
+    OUTPUT_VARIABLE real_library
+    )
+  SET(REALNAME ${real_library})
+ENDMACRO()
+
+MACRO(EXTEND_CXX_LINK_FLAGS LIBRARY_PATH)
+  # Using the $ORIGIN token with the -R option to locate the libraries
+  # on a path relative to the executable:
+  # We need an extra backslash to pass $ORIGIN to the mysql_config script...
+  SET(QUOTED_CMAKE_CXX_LINK_FLAGS
+    "${CMAKE_CXX_LINK_FLAGS} -R'\\$ORIGIN/../lib' -R${LIBRARY_PATH}")
+  SET(CMAKE_CXX_LINK_FLAGS
+    "${CMAKE_CXX_LINK_FLAGS} -R'\$ORIGIN/../lib' -R${LIBRARY_PATH}")
+  MESSAGE(STATUS "CMAKE_CXX_LINK_FLAGS ${CMAKE_CXX_LINK_FLAGS}")
+ENDMACRO()
+
+MACRO(EXTEND_C_LINK_FLAGS LIBRARY_PATH)
+  SET(QUOTED_CMAKE_C_LINK_FLAGS
+    "${CMAKE_C_LINK_FLAGS} -R'\\$ORIGIN/../lib' -R${LIBRARY_PATH}")
+  SET(CMAKE_C_LINK_FLAGS
+    "${CMAKE_C_LINK_FLAGS} -R'\$ORIGIN/../lib' -R${LIBRARY_PATH}")
+  MESSAGE(STATUS "CMAKE_C_LINK_FLAGS ${CMAKE_C_LINK_FLAGS}")
+  SET(CMAKE_SHARED_LIBRARY_C_FLAGS
+    "${CMAKE_SHARED_LIBRARY_C_FLAGS} -R'\$ORIGIN/..' -R'\$ORIGIN/../lib' -R${LIBRARY_PATH}")
+ENDMACRO()
+
 IF(CMAKE_SYSTEM_NAME MATCHES "SunOS" AND
    CMAKE_C_COMPILER_ID MATCHES "SunPro" AND
    CMAKE_CXX_FLAGS MATCHES "stlport4")
   DIRNAME(${CMAKE_CXX_COMPILER} CXX_PATH)
-  SET(STLPORT_SUFFIX "lib/stlport4")
-  IF(CMAKE_SIZEOF_VOID_P EQUAL 8 AND CMAKE_SYSTEM_PROCESSOR MATCHES "sparc")
-    SET(STLPORT_SUFFIX "lib/stlport4/v9")
+  # Also extract real path to the compiler(which is normally
+  # in <install_path>/prod/bin) and try to find the
+  # stlport libs relative to that location as well.
+  GET_FILENAME_COMPONENT(CXX_REALPATH ${CMAKE_CXX_COMPILER} REALPATH)
+
+  # CC -V yields
+  # CC: Sun C++ 5.13 SunOS_sparc Beta 2014/03/11
+  # CC: Sun C++ 5.11 SunOS_sparc 2010/08/13
+
+  EXECUTE_PROCESS(
+    COMMAND ${CMAKE_CXX_COMPILER} "-V"
+    OUTPUT_VARIABLE stdout
+    ERROR_VARIABLE  stderr
+    RESULT_VARIABLE result
+  )
+  IF(result)
+    MESSAGE(FATAL_ERROR "Failed to execute ${CMAKE_CXX_COMPILER} -V")
   ENDIF()
-  IF(CMAKE_SIZEOF_VOID_P EQUAL 8 AND CMAKE_SYSTEM_PROCESSOR MATCHES "i386")
-    SET(STLPORT_SUFFIX "lib/stlport4/amd64")
+
+  STRING(REGEX MATCH "CC: Sun C\\+\\+ 5\\.([0-9]+)" VERSION_STRING ${stderr})
+  SET(CC_MINOR_VERSION ${CMAKE_MATCH_1})
+
+  IF(${CC_MINOR_VERSION} EQUAL 13)
+    SET(STLPORT_SUFFIX "lib/compilers/stlport4")
+    IF(SIZEOF_VOIDP EQUAL 8 AND CMAKE_SYSTEM_PROCESSOR MATCHES "sparc")
+      SET(STLPORT_SUFFIX "lib/compilers/stlport4/sparcv9")
+    ENDIF()
+    IF(SIZEOF_VOIDP EQUAL 8 AND CMAKE_SYSTEM_PROCESSOR MATCHES "i386")
+      SET(STLPORT_SUFFIX "lib/compilers/stlport4/amd64")
+    ENDIF()
+  ELSE()
+    SET(STLPORT_SUFFIX "lib/stlport4")
+    IF(SIZEOF_VOIDP EQUAL 8 AND CMAKE_SYSTEM_PROCESSOR MATCHES "sparc")
+      SET(STLPORT_SUFFIX "lib/stlport4/v9")
+    ENDIF()
+    IF(SIZEOF_VOIDP EQUAL 8 AND CMAKE_SYSTEM_PROCESSOR MATCHES "i386")
+      SET(STLPORT_SUFFIX "lib/stlport4/amd64")
+    ENDIF()
   ENDIF()
 
   FIND_LIBRARY(STL_LIBRARY_NAME
     NAMES "stlport"
     PATHS ${CXX_PATH}/../${STLPORT_SUFFIX}
+          ${CXX_REALPATH}/../../${STLPORT_SUFFIX}
   )
   MESSAGE(STATUS "STL_LIBRARY_NAME ${STL_LIBRARY_NAME}")
   IF(STL_LIBRARY_NAME)
     DIRNAME(${STL_LIBRARY_NAME} STLPORT_PATH)
-    # We re-distribute libstlport.so which is a symlink to libstlport.so.1
-    # There is no 'readlink' on solaris, so we use perl to follow links:
-    SET(PERLSCRIPT
-      "my $link= $ARGV[0]; use Cwd qw(abs_path); my $file = abs_path($link); print $file;")
-    EXECUTE_PROCESS(
-      COMMAND perl -e "${PERLSCRIPT}" ${STL_LIBRARY_NAME}
-      RESULT_VARIABLE result
-      OUTPUT_VARIABLE real_library
-    )
+    FIND_REAL_LIBRARY(${STL_LIBRARY_NAME} real_library)
     MESSAGE(STATUS "INSTALL ${STL_LIBRARY_NAME} ${real_library}")
     INSTALL(FILES ${STL_LIBRARY_NAME} ${real_library}
-            DESTINATION ${INSTALL_LIBDIR} COMPONENT Development)
-    # Using the $ORIGIN token with the -R option to locate the libraries
-    # on a path relative to the executable:
-    # We need an extra backslash to pass $ORIGIN to the mysql_config script...
-    SET(QUOTED_CMAKE_CXX_LINK_FLAGS
-      "${CMAKE_CXX_LINK_FLAGS} -R'\\$ORIGIN/../lib' -R${STLPORT_PATH}")
-    SET(CMAKE_CXX_LINK_FLAGS
-      "${CMAKE_CXX_LINK_FLAGS} -R'\$ORIGIN/../lib' -R${STLPORT_PATH}")
-    MESSAGE(STATUS "CMAKE_CXX_LINK_FLAGS ${CMAKE_CXX_LINK_FLAGS}")
+            DESTINATION ${INSTALL_LIBDIR} COMPONENT SharedLibraries)
+    EXTEND_C_LINK_FLAGS(${STLPORT_PATH})
+    EXTEND_CXX_LINK_FLAGS(${STLPORT_PATH})
+  ELSE()
+    MESSAGE(STATUS "Failed to find the required stlport library, print some"
+                   "variables to help debugging and bail out")
+    MESSAGE(STATUS "CMAKE_CXX_COMPILER ${CMAKE_CXX_COMPILER}")
+    MESSAGE(STATUS "CXX_PATH ${CXX_PATH}")
+    MESSAGE(STATUS "CXX_REALPATH ${CXX_REALPATH}")
+    MESSAGE(STATUS "STLPORT_SUFFIX ${STLPORT_SUFFIX}")
+    MESSAGE(STATUS "PATH: ${CXX_PATH}/../${STLPORT_SUFFIX}")
+    MESSAGE(STATUS "PATH: ${CXX_REALPATH}/../../${STLPORT_SUFFIX}")
+    MESSAGE(FATAL_ERROR
+      "Could not find the required stlport library.")
   ENDIF()
 ENDIF()
=== modified file 'plugin/password_validation/validate_password.cc'
--- a/plugin/password_validation/validate_password.cc
+++ b/plugin/password_validation/validate_password.cc
@@ -17,6 +17,7 @@
 #include <string>
 #include <mysql/plugin_validate_password.h>
 #include <set>
+#include <ios>       // std::streamoff
 #include <iostream>
 #include <fstream>
 
=== modified file 'unittest/gunit/CMakeLists.txt'
--- a/unittest/gunit/CMakeLists.txt
+++ b/unittest/gunit/CMakeLists.txt
@@ -255,7 +255,6 @@ SET(TESTS
   sql_list
   sql_plist
   sql_string
-  stdcxx
   strtoll
   thread_utils
   )