← Back to team overview

maria-developers team mailing list archive

building MariaDB 10/trunk with external SSL generates errors/warnings. Docs are inconsistent. What's the right procedure?

 

hi,

building

	cd /usr/local/src/mariadb
	bzr log | head -n 5
		------------------------------------------------------------
		revno: 3766 [merge]
		committer: Alexander Barkov <bar@xxxxxxxxxxx>
		branch nick: maria-10.0.ms
		timestamp: Wed 2013-07-10 18:46:33 +0400

reading ./BUILD/SETUP.sh

		...
120             # SSL library to use.--with-ssl will select our bundled
yaSSL
		# implementation of SSL. To use OpenSSL you will need to
		specify
		# the location of OpenSSL headers and libs on your
		system.
		# Ex --with-ssl=/usr  
		<================================= OK, do this
		SSL_LIBRARY=--with-ssl
		...

configuring @ `cmake`

	cd /usr/local/src/mariadb
	rm -rf bld
	mkdir bld
	cd bld
	cmake .. \
	 -DWITH_SSL=/usr/local/ssl \
	 -DOPENSSL_INCLUDE_DIR=/usr/local/ssl/include \
	 -DOPENSSL_SSL_LIBRARY=/usr/local/ssl/lib64/libssl.so \
	 -DOPENSSL_CRYPTO_LIBRARY=/usr/local/ssl/lib64/libcrypto.so

fails, returning,

	...
	CMake Error at cmake/ssl.cmake:90 (MESSAGE):
	  Wrong option for WITH_SSL.  Valid values are : yes, no,
	  bundled
	Call Stack (most recent call first):
	  CMakeLists.txt:260 (MYSQL_CHECK_SSL)
	...
	-- Configuring incomplete, errors occurred!

	vi ../CmakeLists.txt
		...
		# Add bundled or system zlib.
		MYSQL_CHECK_ZLIB_WITH_COMPRESS()
		# Optionally add bundled yassl/taocrypt or system
		openssl.
260             MYSQL_CHECK_SSL()
		# Add readline or libedit.
		MYSQL_CHECK_READLINE()

checking

	vi cmake/ssl.cmake
		...
		# MYSQL_CHECK_SSL
		#
		# Provides the following configure options:
		# WITH_SSL=[yes|no|bundled]
		MACRO (MYSQL_CHECK_SSL)
		  IF(NOT WITH_SSL)
		   IF(WIN32)
		     CHANGE_SSL_SETTINGS("bundled")
		   ELSE()
		     CHANGE_SSL_SETTINGS("no")
		   ENDIF()
		  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)
		    INCLUDE(CheckSymbolExists)
		    SET(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR})
		    CHECK_SYMBOL_EXISTS(SHA512_DIGEST_LENGTH
		    "openssl/sha.h"
		                        HAVE_SHA512_DIGEST_LENGTH)
		    SET(CMAKE_REQUIRED_INCLUDES)
		    IF(OPENSSL_FOUND AND CRYPTO_LIBRARY AND
		    HAVE_SHA512_DIGEST_LENGTH)
		      SET(SSL_SOURCES "")
		      SET(SSL_LIBRARIES ${OPENSSL_LIBRARIES}
		      ${CRYPTO_LIBRARY})
		      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 su
		      ENDIF()
		      MYSQL_USE_BUNDLED_SSL()
		    ENDIF()
		  ELSEIF(NOT WITH_SSL STREQUAL "no")
		    MESSAGE(SEND_ERROR "Wrong option for WITH_SSL. Valid
		    values are : yes, no, bundled")
		  ENDIF() 
		ENDMACRO()

there's no accommodation for "--with-ssl=/path/to/ssl/install".

If I instead

cmake .. \
 -DWITH_SSL=yes \
 -DOPENSSL_INCLUDE_DIR=/usr/local/ssl/include \
 -DOPENSSL_SSL_LIBRARY=/usr/local/ssl/lib64/libssl.so \
 -DOPENSSL_CRYPTO_LIBRARY=/usr/local/ssl/lib64/libcrypto.so

it returns,

	...
	-- Running cmake version 2.8.11.1
	-- MariaDB 10.0.3
	-- Packaging as: mariadb-10.0.3-Linux-x86_64
	-- Found OpenSSL:
	/usr/local/ssl/lib64/libssl.so;/usr/local/ssl/lib64/libcrypto.so
	(found version "1.0.1e") 
	...
	-- Configuring done

then a bunch of these messages:

	...
	CMake Warning at cmake/plugin.cmake:184 (ADD_LIBRARY):
	  Cannot generate a safe runtime search path for target feedback
	  because
	  files in some directories may conflict with libraries in
	  implicit
	  directories:

	    runtime library [libcrypto.so.1.0.0] in /usr/lib64 may be
	    hidden by files in:
	      /usr/local/ssl/lib64

	  Some of these libraries may not be found correctly.
	Call Stack (most recent call first):
	  plugin/feedback/CMakeLists.txt:20 (MYSQL_ADD_PLUGIN)


	CMake Warning at cmake/libutils.cmake:259 (ADD_LIBRARY):
	  Cannot generate a safe runtime search path for target libmysql
	  because
	  files in some directories may conflict with libraries in
	  implicit
	  directories:

	    runtime library [libcrypto.so.1.0.0] in /usr/lib64 may be
	    hidden by files in:
	      /usr/local/ssl/lib64

	  Some of these libraries may not be found correctly.
	Call Stack (most recent call first):
	  libmysql/CMakeLists.txt:374 (MERGE_LIBRARIES)


	CMake Warning at client/CMakeLists.txt:78 (ADD_EXECUTABLE):
	  Cannot generate a safe runtime search path for target
	  async_example because
	  files in some directories may conflict with libraries in
	  implicit
	  directories:

	    runtime library [libcrypto.so.1.0.0] in /usr/lib64 may be
	    hidden by files in:
	      /usr/local/ssl/lib64

	  Some of these libraries may not be found correctly.
	...


What's the right method to find/use external SSL libs/headers in a
MariaDB build without errors or warnings?

--darx


Follow ups