List:Commits« Previous MessageNext Message »
From:Tor Didriksen Date:August 23 2012 9:28am
Subject:bzr push into mysql-5.6 branch (tor.didriksen:4153 to 4154) Bug#12762891
Bug#14167227
View as plain text  
 4154 Tor Didriksen	2012-08-23
      Bug#12762891 SSL.CMAKE FILE IS BROKEN WHEN USING CUSTOM OPENSSL BUILD
      Bug#14167227 CMAKE SHOULD REJECT -DWITH_SSL=SYSTEM IF OPENSSL IS OLDER THAN 1.0.0
      
      Added functionality to use custom installation of openssl.
      # - a custom installation of openssl can be used like this
      #     - cmake -DCMAKE_PREFIX_PATH=</path/to/custom/openssl> -DWITH_SSL="system"
      #   or
      #     - cmake -DWITH_SSL=</path/to/custom/openssl>

    modified:
      cmake/ssl.cmake
      mysys_ssl/crypt_genhash_impl.cc
      sql-common/client_authentication.cc
      storage/perfschema/unittest/CMakeLists.txt
 4153 Jon Olav Hauglid	2012-08-23
      Bug#13945257 NEW COMPILATION ERRORS/WARNINGS WITH XCODE 4.3.2
      
      Follow-up patch: Fix 3 additional warnings reported by Clang 4.0 / XCode 4.4.1

    modified:
      sql/item_subselect.cc
      sql/log_event.cc
      storage/innobase/trx/trx0trx.cc
=== modified file 'cmake/ssl.cmake'
--- a/cmake/ssl.cmake	2012-07-24 13:24:00 +0000
+++ b/cmake/ssl.cmake	2012-08-23 09:18:04 +0000
@@ -1,4 +1,4 @@
-# Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2009, 2012, 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
@@ -13,14 +13,43 @@
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA 
 
+# We support different versions of SSL:
+# - "bundled" uses source code in <source dir>/extra/yassl
+# - "system"  (typically) uses headers/libraries in /usr/lib and /usr/lib64
+# - a custom installation of openssl can be used like this
+#     - cmake -DCMAKE_PREFIX_PATH=</path/to/custom/openssl> -DWITH_SSL="system"
+#   or
+#     - cmake -DWITH_SSL=</path/to/custom/openssl>
+#
+# The default value for WITH_SSL is "bundled"
+# set in cmake/build_configurations/feature_set.cmake
+#
+# For custom build/install of openssl, see the accompanying README and
+# INSTALL* files. When building with gcc, you must build the shared libraries
+# (in addition to the static ones):
+#   ./config --prefix=</path/to/custom/openssl> --shared; make; make install
+# On some platforms (mac) you need to choose 32/64 bit architecture.
+# Build/Install of openssl on windows is slightly different: you need to run
+# perl and nmake. You might also need to
+#   'set path=</path/to/custom/openssl>\bin;%PATH%
+# in order to find the .dll files at runtime.
+
+SET(WITH_SSL_DOC "bundled (use yassl)")
+SET(WITH_SSL_DOC
+  "${WITH_SSL_DOC}, yes (prefer os library if present, otherwise use bundled)")
+SET(WITH_SSL_DOC
+  "${WITH_SSL_DOC}, system (use os library)")
+SET(WITH_SSL_DOC
+  "${WITH_SSL_DOC}, </path/to/custom/installation>")
+
 MACRO (CHANGE_SSL_SETTINGS string)
-  SET(WITH_SSL ${string} CACHE STRING "Options are : bundled, yes (prefer os library if present otherwise use bundled), system (use os library)" FORCE)
+  SET(WITH_SSL ${string} CACHE STRING ${WITH_SSL_DOC} FORCE)
 ENDMACRO()
 
 MACRO (MYSQL_USE_BUNDLED_SSL)
   SET(INC_DIRS 
-  ${CMAKE_SOURCE_DIR}/extra/yassl/include
-  ${CMAKE_SOURCE_DIR}/extra/yassl/taocrypt/include
+    ${CMAKE_SOURCE_DIR}/extra/yassl/include
+    ${CMAKE_SOURCE_DIR}/extra/yassl/taocrypt/include
   )
   SET(SSL_LIBRARIES  yassl taocrypt)
   SET(SSL_INCLUDE_DIRS ${INC_DIRS})
@@ -35,14 +64,15 @@ MACRO (MYSQL_USE_BUNDLED_SSL)
   ENDFOREACH()
   GET_TARGET_PROPERTY(src taocrypt SOURCES)
   FOREACH(file ${src})
-    SET(SSL_SOURCES ${SSL_SOURCES} ${CMAKE_SOURCE_DIR}/extra/yassl/taocrypt/${file})
+    SET(SSL_SOURCES ${SSL_SOURCES}
+      ${CMAKE_SOURCE_DIR}/extra/yassl/taocrypt/${file})
   ENDFOREACH()
 ENDMACRO()
 
 # MYSQL_CHECK_SSL
 #
 # Provides the following configure options:
-# WITH_SSL=[yes|bundled|system]
+# WITH_SSL=[yes|bundled|system|<path/to/custom/installation>]
 MACRO (MYSQL_CHECK_SSL)
   IF(NOT WITH_SSL)
    IF(WIN32)
@@ -50,24 +80,90 @@ MACRO (MYSQL_CHECK_SSL)
    ENDIF()
   ENDIF()
 
+  # See if WITH_SSL is of the form </path/to/custom/installation>
+  FILE(GLOB WITH_SSL_HEADER ${WITH_SSL}/include/openssl/ssl.h)
+  IF (WITH_SSL_HEADER)
+    SET(WITH_SSL_PATH ${WITH_SSL} CACHE PATH "path to custom SSL installation")
+  ENDIF()
+
   IF(WITH_SSL STREQUAL "bundled")
     MYSQL_USE_BUNDLED_SSL()
-  ELSEIF(WITH_SSL STREQUAL "system" OR WITH_SSL STREQUAL "yes")
-    # Check for system library
-    SET(OPENSSL_FIND_QUIETLY TRUE)
-    INCLUDE(FindOpenSSL)
-    FIND_LIBRARY(CRYPTO_LIBRARY crypto)
-    MARK_AS_ADVANCED(CRYPTO_LIBRARY)
+  ELSEIF(WITH_SSL STREQUAL "system" OR
+         WITH_SSL STREQUAL "yes" OR
+         WITH_SSL_PATH
+         )
+    # First search in WITH_SSL_PATH.
+    FIND_PATH(OPENSSL_ROOT_DIR
+      NAMES include/openssl/ssl.h
+      NO_CMAKE_PATH
+      NO_CMAKE_ENVIRONMENT_PATH
+      HINTS ${WITH_SSL_PATH}
+    )
+    # Then search in standard places (if not found above).
+    FIND_PATH(OPENSSL_ROOT_DIR
+      NAMES include/openssl/ssl.h
+    )
+
+    FIND_PATH(OPENSSL_INCLUDE_DIR
+      NAMES openssl/ssl.h
+      HINTS ${OPENSSL_ROOT_DIR}/include
+    )
+    # On mac this list is <.dylib;.so;.a>
+    # We prefer static libraries, so we revert it here.
+    LIST(REVERSE CMAKE_FIND_LIBRARY_SUFFIXES)
+    MESSAGE(STATUS "suffixes <${CMAKE_FIND_LIBRARY_SUFFIXES}>")
+    FIND_LIBRARY(OPENSSL_LIBRARIES
+                 NAMES ssl ssleay32 ssleay32MD
+                 HINTS ${OPENSSL_ROOT_DIR}/lib)
+    FIND_LIBRARY(CRYPTO_LIBRARY
+                 NAMES crypto libeay32
+                 HINTS ${OPENSSL_ROOT_DIR}/lib)
+    LIST(REVERSE CMAKE_FIND_LIBRARY_SUFFIXES)
+
+    # Verify version number. Version information looks like:
+    #   #define OPENSSL_VERSION_NUMBER 0x1000103fL
+    # Encoded as MNNFFPPS: major minor fix patch status
+    FILE(STRINGS "${OPENSSL_INCLUDE_DIR}/openssl/opensslv.h"
+      OPENSSL_VERSION_NUMBER
+      REGEX "^#define[\t ]+OPENSSL_VERSION_NUMBER[\t ]+0x[0-9].*"
+    )
+    STRING(REGEX REPLACE
+      "^.*OPENSSL_VERSION_NUMBER[\t ]+0x([0-9]).*$" "\\1"
+      OPENSSL_MAJOR_VERSION "${OPENSSL_VERSION_NUMBER}"
+    )
+
+    IF(OPENSSL_INCLUDE_DIR AND
+       OPENSSL_LIBRARIES   AND
+       CRYPTO_LIBRARY      AND
+       OPENSSL_MAJOR_VERSION STREQUAL "1"
+      )
+      SET(OPENSSL_FOUND TRUE)
+    ELSE()
+      SET(OPENSSL_FOUND FALSE)
+    ENDIF()
+
+    MESSAGE(STATUS "OPENSSL_INCLUDE_DIR = ${OPENSSL_INCLUDE_DIR}")
+    MESSAGE(STATUS "OPENSSL_LIBRARIES = ${OPENSSL_LIBRARIES}")
+    MESSAGE(STATUS "CRYPTO_LIBRARY = ${CRYPTO_LIBRARY}")
+    MESSAGE(STATUS "OPENSSL_MAJOR_VERSION = ${OPENSSL_MAJOR_VERSION}")
+
     INCLUDE(CheckSymbolExists)
+    SET(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR})
     CHECK_SYMBOL_EXISTS(SHA512_DIGEST_LENGTH "openssl/sha.h" 
                         HAVE_SHA512_DIGEST_LENGTH)
-    IF(OPENSSL_FOUND AND CRYPTO_LIBRARY AND HAVE_SHA512_DIGEST_LENGTH)
+    IF(OPENSSL_FOUND AND HAVE_SHA512_DIGEST_LENGTH)
       SET(SSL_SOURCES "")
       SET(SSL_LIBRARIES ${OPENSSL_LIBRARIES} ${CRYPTO_LIBRARY})
+      IF(CMAKE_SYSTEM_NAME MATCHES "SunOS")
+        SET(SSL_LIBRARIES ${SSL_LIBRARIES} ${LIBSOCKET})
+      ENDIF()
+      IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
+        SET(SSL_LIBRARIES ${SSL_LIBRARIES} ${LIBDL})
+      ENDIF()
+      MESSAGE(STATUS "SSL_LIBRARIES = ${SSL_LIBRARIES}")
       SET(SSL_INCLUDE_DIRS ${OPENSSL_INCLUDE_DIR})
       SET(SSL_INTERNAL_INCLUDE_DIRS "")
       SET(SSL_DEFINES "-DHAVE_OPENSSL")
-      CHANGE_SSL_SETTINGS("system")
     ELSE()
       IF(WITH_SSL STREQUAL "system")
         MESSAGE(SEND_ERROR "Cannot find appropriate system libraries for SSL. Use  WITH_SSL=bundled to enable SSL support")
@@ -75,6 +171,7 @@ MACRO (MYSQL_CHECK_SSL)
       MYSQL_USE_BUNDLED_SSL()
     ENDIF()
   ELSE()
-    MESSAGE(SEND_ERROR "Wrong option for WITH_SSL. Valid values are : yes, bundled, system")
+    MESSAGE(SEND_ERROR
+      "Wrong option for WITH_SSL. Valid values are : "${WITH_SSL_DOC})
   ENDIF()
 ENDMACRO()

=== modified file 'mysys_ssl/crypt_genhash_impl.cc'
--- a/mysys_ssl/crypt_genhash_impl.cc	2012-08-07 05:14:58 +0000
+++ b/mysys_ssl/crypt_genhash_impl.cc	2012-08-23 09:18:04 +0000
@@ -1,6 +1,23 @@
+/* Copyright (c) 2012, 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
+   the Free Software Foundation; version 2 of the License.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA */
+
+
+// First include (the generated) my_config.h, to get correct platform defines.
+#include "my_config.h"
+
 #ifdef HAVE_OPENSSL
-#include <stdlib.h>
-#include <stdio.h>
 
 #ifdef HAVE_YASSL
 #include <sha.hpp>

=== modified file 'sql-common/client_authentication.cc'
--- a/sql-common/client_authentication.cc	2012-05-31 11:48:21 +0000
+++ b/sql-common/client_authentication.cc	2012-08-23 09:18:04 +0000
@@ -1,3 +1,21 @@
+/* Copyright (c) 2012, 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
+   the Free Software Foundation; version 2 of the License.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA */
+
+// First include (the generated) my_config.h, to get correct platform defines.
+#include "my_config.h"
+
 #if defined(HAVE_OPENSSL)
 #include "crypt_genhash_impl.h"
 #include "mysql/client_authentication.h"

=== modified file 'storage/perfschema/unittest/CMakeLists.txt'
--- a/storage/perfschema/unittest/CMakeLists.txt	2012-04-02 14:48:44 +0000
+++ b/storage/perfschema/unittest/CMakeLists.txt	2012-08-23 09:18:04 +0000
@@ -1,5 +1,4 @@
-# Copyright (c) 2009, 2010 Sun Microsystems, Inc.
-# Use is subject to license terms.
+# Copyright (c) 2009, 2012, 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
@@ -11,18 +10,18 @@
 # GNU General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA
 
 INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include
                     ${CMAKE_SOURCE_DIR}/include/mysql
                     ${CMAKE_SOURCE_DIR}/regex
                     ${CMAKE_SOURCE_DIR}/sql
-                    ${CMAKE_SOURCE_DIR}/extra/yassl/include
+                    ${SSL_INCLUDE_DIRS}
                     ${CMAKE_SOURCE_DIR}/unittest/mytap
                     ${CMAKE_SOURCE_DIR}/storage/perfschema)
 
-ADD_DEFINITIONS(-DMYSQL_SERVER)
+ADD_DEFINITIONS(-DMYSQL_SERVER ${SSL_DEFINES})
 
 MACRO (PFS_ADD_TEST name)
   ADD_EXECUTABLE(${name}-t ${name}-t.cc)
@@ -45,10 +44,13 @@ FOREACH(testname ${tests})
 ENDFOREACH()
 
 IF(WIN32)
-  SET(MYSQLD_EXTRA_SOURCES ${CMAKE_SOURCE_DIR}/sql/nt_servc.cc ${CMAKE_SOURCE_DIR}/sql/nt_servc.h)
+  SET(MYSQLD_EXTRA_SOURCES ${CMAKE_SOURCE_DIR}/sql/nt_servc.cc)
 ENDIF()
 
 # we need the server libs to test the blob parser
 ADD_EXECUTABLE(pfs_connect_attr-t pfs_connect_attr-t.cc ${MYSQLD_EXTRA_SOURCES})
-TARGET_LINK_LIBRARIES(pfs_connect_attr-t mytap perfschema sql binlog rpl master slave sql mysys ${SSL_LIBRARIES})
+TARGET_LINK_LIBRARIES(pfs_connect_attr-t
+  mytap perfschema sql binlog rpl master slave sql
+  mysys mysys_ssl)
+TARGET_LINK_LIBRARIES(pfs_connect_attr-t vio ${SSL_LIBRARIES})
 ADD_TEST(pfs_connect_attr pfs_connect_attr-t)

No bundle (reason: useless for push emails).
Thread
bzr push into mysql-5.6 branch (tor.didriksen:4153 to 4154) Bug#12762891Bug#14167227Tor Didriksen23 Aug