Description:
We are packaging mysql for a Linux distribution that gives users the choice between libressl and openssl, since they are for most everyone drop-in replacements. We have some unexpected difficulties with mysql. First, cmake does not by default even detect libressl, and you need a patch such as the one attached to get that far. Next, at link-time you encounter errors like:
Linking CXX shared library libmysqlclient.so
cd /var/tmp/paludis/build/dev-db-mysql-5.6.25-r2/work/build/libmysql && /usr/x86_64-pc-linux-gnu/bin/cmake -E cmake_link_script CMakeFiles/libmysql.dir/link.txt --verbose=1
make[2]: Leaving directory '/var/tmp/paludis/build/dev-db-mysql-5.6.25-r2/work/build'
/usr/x86_64-pc-linux-gnu/bin/cmake -E cmake_progress_report /var/tmp/paludis/build/dev-db-mysql-5.6.25-r2/work/build/CMakeFiles
/usr/bin/x86_64-pc-linux-gnu-g++ -fPIC -march=native -pipe -O2 -fPIC -Wall -Wextra -Wformat-security -Wvla -Woverloaded-virtual -Wno-unused-parameter -O3 -DNDEBUG -DDBUG_OFF -DMY_PTHREAD_FASTMUTEX=1 -Wl,--no-undefined -Wl,--version-script=libmysql.ver -shared -Wl,-soname,libmysqlclient.so.18 -o libmysqlclient.so.18.1.0 CMakeFiles/libmysql.dir/libmysql_exports_file.cc.o -lpthread libclientlib.a ../dbug/libdbug.a ../strings/libstrings.a ../vio/libvio.a ../mysys/libmysys.a ../mysys_ssl/libmysys_ssl.a /usr/x86_64-pc-linux-gnu/lib64/libz.so /usr/x86_64-pc-linux-gnu/lib64/libssl.a /usr/x86_64-pc-linux-gnu/lib64/libcrypto.a -ldl -ldl ../dbug/libdbug.a ../mysys/libmysys.a ../dbug/libdbug.a ../mysys/libmysys.a -lm ../strings/libstrings.a -lpthread /usr/x86_64-pc-linux-gnu/lib64/libz.so -Wl,-rpath,/usr/x86_64-pc-linux-gnu/lib64:
[ 66%] Built target pfs_user-oom-t
make -f libmysql/CMakeFiles/mysqlclient.dir/build.make libmysql/CMakeFiles/mysqlclient.dir/depend
make[2]: Entering directory '/var/tmp/paludis/build/dev-db-mysql-5.6.25-r2/work/build'
/usr/x86_64-pc-linux-gnu/bin/cmake -E cmake_progress_report /var/tmp/paludis/build/dev-db-mysql-5.6.25-r2/work/build/CMakeFiles
libmysql/CMakeFiles/libmysql.dir/build.make:103: recipe for target 'libmysql/libmysqlclient.so.18.1.0' failed
make[2]: Leaving directory '/var/tmp/paludis/build/dev-db-mysql-5.6.25-r2/work/build'
CMakeFiles/Makefile2:2683: recipe for target 'libmysql/CMakeFiles/libmysql.dir/all' failed
/usr/x86_64-pc-linux-gnu/bin/cmake -E cmake_progress_report /var/tmp/paludis/build/dev-db-mysql-5.6.25-r2/work/build/CMakeFiles 64
/usr/x86_64-pc-linux-gnu/bin/cmake -E cmake_progress_report /var/tmp/paludis/build/dev-db-mysql-5.6.25-r2/work/build/CMakeFiles
[ 67%] [ 67%] Generating mysqlclient_depends.c
cd /var/tmp/paludis/build/dev-db-mysql-5.6.25-r2/work/build/libmysql && /usr/x86_64-pc-linux-gnu/bin/cmake -E touch /var/tmp/paludis/build/dev-db-mysql-5.6.25-r2/work/build/libmysql/mysqlclient_depends.c
/usr/x86_64-pc-linux-gnu/bin/x86_64-pc-linux-gnu-ld: /usr/x86_64-pc-linux-gnu/lib64/libssl.a(ssl_algs.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC
/usr/x86_64-pc-linux-gnu/lib64/libssl.a: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
make[2]: *** [libmysql/libmysqlclient.so.18.1.0] Error 1
make[1]: *** [libmysql/CMakeFiles/libmysql.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
How to repeat:
* Install libressl as your libssl provider
* Try to install mysql
Suggested fix:
--- mysql-orig/cmake/ssl.cmake
+++ mysql/cmake/ssl.cmake
@@ -175,8 +175,7 @@
IF(OPENSSL_INCLUDE_DIR AND
OPENSSL_LIBRARY AND
- CRYPTO_LIBRARY AND
- OPENSSL_MAJOR_VERSION STREQUAL "1"
+ CRYPTO_LIBRARY
)
SET(OPENSSL_FOUND TRUE)
ELSE()