Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 1 Mar 2012 18:55:01 -0600
From:      "RandomUser" <rannumgen@globaleyes.net>
To:        "FreeBSD gnats submit" <FreeBSD-gnats-submit@FreeBSD.org>
Cc:        rannumgen@globaleyes.net
Subject:   ports/165604: databases/mysql55-server cmake patches to properly use OpenSSL
Message-ID:  <1330649701.11562@freebsd1.localnet>
Resent-Message-ID: <201203020120.q221K8Hb007494@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         165604
>Category:       ports
>Synopsis:       databases/mysql55-server cmake patches to properly use OpenSSL
>Confidential:   no
>Severity:       non-critical
>Priority:       high
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Fri Mar 02 01:20:08 UTC 2012
>Closed-Date:
>Last-Modified:
>Originator:     RandomUser
>Release:        7.4-STABLE
>Organization:
>Environment:



7.4-STABLE FreeBSD 7.4-STABLE #2: Tue Dec 20 10:55:34 CST 2011

openssl-1.0.0_9 (userland)
openSSL 0.9.8q (base)


>Description:


Without several patches to MySQL cmake files/environment, none of the OpenSSL libraries are used (base or userland). Even with the "-DWITH_SSL" flag, the bundled "yassl" doesn't get used. Hence - MySQL55 does NOT get compiled with ANY SSL capability.

The cmake patches are not OS specific (had to use them in Solaris 10 as well).

NOTE: a new Makefile variable "WITH_USR_LOCAL" was used to distinguish between "base" OpenSSL and "userland" OpenSSL. There probably is a better method for achieving this distinction.

P.S. cmake patch was derived from an Internet post about MySQL + CMAKE + OpenSSL compile problems, but I have lost the reference.


Make output validation of cmake infernal process for finding (base) OpenSSL:

-- Found OpenSSL: /usr/lib/libssl.so;/usr/lib/libcrypto.so 
-- OPENSSL_INCLUDE_DIR = /usr/include
-- OPENSSL_LIBRARIES = /usr/lib/libssl.so;/usr/lib/libcrypto.so
-- Looking for SHA512_DIGEST_LENGTH
-- Looking for SHA512_DIGEST_LENGTH - found

Results are similar for (userland) OpenSSL (with "/usr/local/...").

LDD vaLidation of OpenSSL inclusion:

ldd `which mysql`
/usr/local/bin/mysql:
	libreadline.so.7 => /lib/libreadline.so.7 (0x282c6000)
	libz.so.4 => /lib/libz.so.4 (0x282f8000)
	libssl.so.7 => /usr/local/lib/libssl.so.7 (0x2830a000)
	libcrypto.so.7 => /usr/local/lib/libcrypto.so.7 (0x28358000)
	libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x284bb000)
	libm.so.5 => /lib/libm.so.5 (0x285af000)
	libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x285c5000)
	libthr.so.3 => /lib/libthr.so.3 (0x285d0000)
	libc.so.7 => /lib/libc.so.7 (0x285e5000)
	libncurses.so.7 => /lib/libncurses.so.7 (0x286eb000)


ldd /usr/local/libexec/mysqld
/usr/local/libexec/mysqld:
	libz.so.4 => /lib/libz.so.4 (0x287e0000)
	libwrap.so.5 => /usr/lib/libwrap.so.5 (0x287f2000)
	libcrypt.so.4 => /lib/libcrypt.so.4 (0x287f9000)
	libssl.so.7 => /usr/local/lib/libssl.so.7 (0x28812000)
	libcrypto.so.7 => /usr/local/lib/libcrypto.so.7 (0x28860000)
	libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x289c3000)
	libm.so.5 => /lib/libm.so.5 (0x28ab7000)
	libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x28acd000)
	libthr.so.3 => /lib/libthr.so.3 (0x28ad8000)
	libc.so.7 => /lib/libc.so.7 (0x28aed000


>How-To-Repeat:





>Fix:


Makefile.diffs
================
--- Makefile.orig	2012-02-29 14:14:17.000000000 -0600
+++ Makefile	2012-02-29 14:41:14.000000000 -0600
@@ -48,7 +48,12 @@
 .include <bsd.port.options.mk>
 
 .if !defined(WITHOUT_OPENSSL)
-CMAKE_ARGS+=	-DWITH_SSL=bundled
+CMAKE_ARGS+=	-DWITH_SSL=system
+.if defined(WITH_USR_LOCAL_SSL)
+CMAKE_ARGS+=	-DCMAKE_INCLUDE_PATH=/usr/local/include \
+		-DCMAKE_LIBRARY_PATH=/usr/local/lib
+MAKE_ENV+=	PKG_CONFIG_PATH=/usr/local/libdata/pkgconfig
+.endif
 .endif
 .if defined(WITH_FASTMTX)
 CMAKE_ARGS+=	-DWITH_FAST_MUTEXES=1
======================

files/patch-cmake_ssl.cmake
======================
--- cmake/ssl.cmake.orig	2011-12-16 13:52:07.000000000 -0600
+++ cmake/ssl.cmake	2012-02-29 11:36:24.000000000 -0600
@@ -64,11 +64,14 @@
     MYSQL_USE_BUNDLED_SSL()
   ELSEIF(WITH_SSL STREQUAL "system" OR WITH_SSL STREQUAL "yes")
     # Check for system library
-    SET(OPENSSL_FIND_QUIETLY TRUE)
+#    SET(OPENSSL_FIND_QUIETLY TRUE)
     INCLUDE(FindOpenSSL)
+    MESSAGE(STATUS "OPENSSL_INCLUDE_DIR = ${OPENSSL_INCLUDE_DIR}")
+    MESSAGE(STATUS "OPENSSL_LIBRARIES = ${OPENSSL_LIBRARIES}")
     FIND_LIBRARY(CRYPTO_LIBRARY crypto)
     MARK_AS_ADVANCED(CRYPTO_LIBRARY)
     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)
========================


>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1330649701.11562>