[tarantool-patches] Re: [PATCH v4] Tarantool static build ability
Kirill Yukhin
kyukhin at tarantool.org
Thu Sep 6 20:59:07 MSK 2018
Hello,
On 29 авг 09:08, Georgy Kirichenko wrote:
> A possibility to build tarantool with included library dependencies.
> Use the flag -DBUILD_STATIC=ON to build statically against curl, readline,
> ncurses, icu and z.
> Use the flag -DOPENSSL_USE_STATIC_LIBS=ON to build with static
> openssl
>
> Changes:
> * Add FindOpenSSL.cmake because some distributions do not support the use of
> openssl static libraries.
> * Find libssl before curl because of build dependency.
> * Catch all bundled libraries API and export then it in case of static
> build.
> * Rename crc32 internal functions to avoid a name clash with linked libraries.
>
> Notes:
> * Bundled libyaml is not properly exported, use the system one.
> * Dockerfile to build static with docker is included
>
> Fixes #3445
> ---
> Changes in v4:
> - Add Z library to an openssl libraries list because of dependencies
> - Update FinxOpenSSL module
> - Minor fixes as per review by Alexander Turenko
>
> Changes in v3:
> - Fixed comments as per review by Alexander Turenko
>
> Changes in v2:
> - Fixed comments as per review by Alexander Turenko
I've fixed an issue w/ checking if readline is GNU-ish and improved
checking for libz (kudos to @totktonada). Also I've picked fresh
version of Cmake's openssl checker and cut WIN32 crap.
Updated patch checked into 1.10 branch.
Diff below.
--
Regards, Kirill Yukhin
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 71c395eb2..bf68d1875 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -312,14 +312,14 @@ else()
endif()
#
-# OpenSSL requires Z library, so add it to libraries list
+# OpenSSL can require Z library (depending on build time options), so we add
+# it to libraries list in case of static build.
#
if(BUILD_STATIC)
find_library(Z_LIBRARY libz.a)
-else()
- find_library(Z_LIBRARY z)
+ set(OPENSSL_LIBRARIES ${OPENSSL_LIBRARIES} ${Z_LIBRARY})
endif()
-set(OPENSSL_LIBRARIES ${OPENSSL_LIBRARIES} ${Z_LIBRARY})
+
#
# Curl
#
diff --git a/cmake/FindOpenSSL.cmake b/cmake/FindOpenSSL.cmake
index 5d97f8a52..8cd22cc8d 100644
--- a/cmake/FindOpenSSL.cmake
+++ b/cmake/FindOpenSSL.cmake
@@ -57,37 +57,13 @@ endif ()
# Support preference of static libs by adjusting CMAKE_FIND_LIBRARY_SUFFIXES
if(OPENSSL_USE_STATIC_LIBS)
set(_openssl_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
- if(WIN32)
- set(CMAKE_FIND_LIBRARY_SUFFIXES .lib .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
- else()
- set(CMAKE_FIND_LIBRARY_SUFFIXES .a )
- endif()
+ set(CMAKE_FIND_LIBRARY_SUFFIXES .a )
endif()
-if (WIN32)
- # http://www.slproweb.com/products/Win32OpenSSL.html
- set(_OPENSSL_ROOT_HINTS
- ${OPENSSL_ROOT_DIR}
- "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (32-bit)_is1;Inno Setup: App Path]"
- "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (64-bit)_is1;Inno Setup: App Path]"
- ENV OPENSSL_ROOT_DIR
- )
- file(TO_CMAKE_PATH "$ENV{PROGRAMFILES}" _programfiles)
- set(_OPENSSL_ROOT_PATHS
- "${_programfiles}/OpenSSL"
- "${_programfiles}/OpenSSL-Win32"
- "${_programfiles}/OpenSSL-Win64"
- "C:/OpenSSL/"
- "C:/OpenSSL-Win32/"
- "C:/OpenSSL-Win64/"
- )
- unset(_programfiles)
-else ()
- set(_OPENSSL_ROOT_HINTS
- ${OPENSSL_ROOT_DIR}
- ENV OPENSSL_ROOT_DIR
- )
-endif ()
+set(_OPENSSL_ROOT_HINTS
+ ${OPENSSL_ROOT_DIR}
+ ENV OPENSSL_ROOT_DIR
+ )
set(_OPENSSL_ROOT_HINTS_AND_PATHS
HINTS ${_OPENSSL_ROOT_HINTS}
@@ -104,212 +80,35 @@ find_path(OPENSSL_INCLUDE_DIR
include
)
-if(WIN32 AND NOT CYGWIN)
- if(MSVC)
- # /MD and /MDd are the standard values - if someone wants to use
- # others, the libnames have to change here too
- # use also ssl and ssleay32 in debug as fallback for openssl < 0.9.8b
- # enable OPENSSL_MSVC_STATIC_RT to get the libs build /MT (Multithreaded no-DLL)
- # In Visual C++ naming convention each of these four kinds of Windows libraries has it's standard suffix:
- # * MD for dynamic-release
- # * MDd for dynamic-debug
- # * MT for static-release
- # * MTd for static-debug
-
- # Implementation details:
- # We are using the libraries located in the VC subdir instead of the parent directory even though :
- # libeay32MD.lib is identical to ../libeay32.lib, and
- # ssleay32MD.lib is identical to ../ssleay32.lib
- # enable OPENSSL_USE_STATIC_LIBS to use the static libs located in lib/VC/static
-
- if (OPENSSL_MSVC_STATIC_RT)
- set(_OPENSSL_MSVC_RT_MODE "MT")
- else ()
- set(_OPENSSL_MSVC_RT_MODE "MD")
- endif ()
-
- # Since OpenSSL 1.1, lib names are like libcrypto32MTd.lib and libssl32MTd.lib
- if( "${CMAKE_SIZEOF_VOID_P}" STREQUAL "8" )
- set(_OPENSSL_MSVC_ARCH_SUFFIX "64")
- else()
- set(_OPENSSL_MSVC_ARCH_SUFFIX "32")
- endif()
-
- if(OPENSSL_USE_STATIC_LIBS)
- set(_OPENSSL_PATH_SUFFIXES
- "lib/VC/static"
- "VC/static"
- "lib"
- )
- else()
- set(_OPENSSL_PATH_SUFFIXES
- "lib/VC"
- "VC"
- "lib"
- )
- endif ()
-
- find_library(LIB_EAY_DEBUG
- NAMES
- libcrypto${_OPENSSL_MSVC_ARCH_SUFFIX}${_OPENSSL_MSVC_RT_MODE}d
- libcrypto${_OPENSSL_MSVC_RT_MODE}d
- libcryptod
- libeay32${_OPENSSL_MSVC_RT_MODE}d
- libeay32d
- cryptod
- NAMES_PER_DIR
- ${_OPENSSL_ROOT_HINTS_AND_PATHS}
- PATH_SUFFIXES
- ${_OPENSSL_PATH_SUFFIXES}
- )
-
- find_library(LIB_EAY_RELEASE
- NAMES
- libcrypto${_OPENSSL_MSVC_ARCH_SUFFIX}${_OPENSSL_MSVC_RT_MODE}
- libcrypto${_OPENSSL_MSVC_RT_MODE}
- libcrypto
- libeay32${_OPENSSL_MSVC_RT_MODE}
- libeay32
- crypto
- NAMES_PER_DIR
- ${_OPENSSL_ROOT_HINTS_AND_PATHS}
- PATH_SUFFIXES
- find_library(SSL_EAY_DEBUG
- NAMES
- libssl${_OPENSSL_MSVC_ARCH_SUFFIX}${_OPENSSL_MSVC_RT_MODE}d
- libssl${_OPENSSL_MSVC_RT_MODE}d
- libssld
- ssleay32${_OPENSSL_MSVC_RT_MODE}d
- ssleay32d
- ssld
- NAMES_PER_DIR
- ${_OPENSSL_ROOT_HINTS_AND_PATHS}
- PATH_SUFFIXES
- ${_OPENSSL_PATH_SUFFIXES}
- )
-
- find_library(SSL_EAY_RELEASE
- NAMES
- libssl${_OPENSSL_MSVC_ARCH_SUFFIX}${_OPENSSL_MSVC_RT_MODE}
- libssl${_OPENSSL_MSVC_RT_MODE}
- libssl
- ssleay32${_OPENSSL_MSVC_RT_MODE}
- ssleay32
- ssl
- NAMES_PER_DIR
- ${_OPENSSL_ROOT_HINTS_AND_PATHS}
- PATH_SUFFIXES
- ${_OPENSSL_PATH_SUFFIXES}
- )
-
- set(LIB_EAY_LIBRARY_DEBUG "${LIB_EAY_DEBUG}")
- set(LIB_EAY_LIBRARY_RELEASE "${LIB_EAY_RELEASE}")
- set(SSL_EAY_LIBRARY_DEBUG "${SSL_EAY_DEBUG}")
- set(SSL_EAY_LIBRARY_RELEASE "${SSL_EAY_RELEASE}")
-
- include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
- select_library_configurations(LIB_EAY)
- select_library_configurations(SSL_EAY)
-
- mark_as_advanced(LIB_EAY_LIBRARY_DEBUG LIB_EAY_LIBRARY_RELEASE
- SSL_EAY_LIBRARY_DEBUG SSL_EAY_LIBRARY_RELEASE)
- set(OPENSSL_SSL_LIBRARY ${SSL_EAY_LIBRARY} )
- set(OPENSSL_CRYPTO_LIBRARY ${LIB_EAY_LIBRARY} )
- elseif(MINGW)
- # same player, for MinGW
- set(LIB_EAY_NAMES crypto libeay32)
- set(SSL_EAY_NAMES ssl ssleay32)
- find_library(LIB_EAY
- NAMES
- ${LIB_EAY_NAMES}
- NAMES_PER_DIR
- ${_OPENSSL_ROOT_HINTS_AND_PATHS}
- PATH_SUFFIXES
- "lib/MinGW"
- "lib"
- )
-
- find_library(SSL_EAY
- NAMES
- ${SSL_EAY_NAMES}
- NAMES_PER_DIR
- ${_OPENSSL_ROOT_HINTS_AND_PATHS}
- PATH_SUFFIXES
- "lib/MinGW"
- "lib"
- )
-
- mark_as_advanced(SSL_EAY LIB_EAY)
- set(OPENSSL_SSL_LIBRARY ${SSL_EAY} )
- set(OPENSSL_CRYPTO_LIBRARY ${LIB_EAY} )
- unset(LIB_EAY_NAMES)
- unset(SSL_EAY_NAMES)
- else()
- # Not sure what to pick for -say- intel, let's use the toplevel ones and hope someone report issues:
- find_library(LIB_EAY
- NAMES
- libcrypto
- libeay32
- NAMES_PER_DIR
- ${_OPENSSL_ROOT_HINTS_AND_PATHS}
- HINTS
- ${_OPENSSL_LIBDIR}
- PATH_SUFFIXES
- lib
- )
-
- find_library(SSL_EAY
- NAMES
- libssl
- ssleay32
- NAMES_PER_DIR
- ${_OPENSSL_ROOT_HINTS_AND_PATHS}
- HINTS
- ${_OPENSSL_LIBDIR}
- PATH_SUFFIXES
- lib
- )
-
- mark_as_advanced(SSL_EAY LIB_EAY)
- set(OPENSSL_SSL_LIBRARY ${SSL_EAY} )
- set(OPENSSL_CRYPTO_LIBRARY ${LIB_EAY} )
- endif()
-else()
-
- find_library(OPENSSL_SSL_LIBRARY
- NAMES
- ssl
- ssleay32
- ssleay32MD
- NAMES_PER_DIR
- ${_OPENSSL_ROOT_HINTS_AND_PATHS}
- HINTS
- ${_OPENSSL_LIBDIR}
- PATH_SUFFIXES
- lib
- )
-
- find_library(OPENSSL_CRYPTO_LIBRARY
- NAMES
- crypto
- NAMES_PER_DIR
- ${_OPENSSL_ROOT_HINTS_AND_PATHS}
- HINTS
- ${_OPENSSL_LIBDIR}
- PATH_SUFFIXES
- lib
- )
+find_library(OPENSSL_SSL_LIBRARY
+ NAMES
+ ssl
+ ssleay32
+ ssleay32MD
+ NAMES_PER_DIR
+ ${_OPENSSL_ROOT_HINTS_AND_PATHS}
+ HINTS
+ ${_OPENSSL_LIBDIR}
+ PATH_SUFFIXES
+ lib
+)
- mark_as_advanced(OPENSSL_CRYPTO_LIBRARY OPENSSL_SSL_LIBRARY)
+find_library(OPENSSL_CRYPTO_LIBRARY
+ NAMES
+ crypto
+ NAMES_PER_DIR
+ ${_OPENSSL_ROOT_HINTS_AND_PATHS}
+ HINTS
+ ${_OPENSSL_LIBDIR}
+ PATH_SUFFIXES
+ lib
+)
- # compat defines
- set(OPENSSL_SSL_LIBRARIES ${OPENSSL_SSL_LIBRARY})
- set(OPENSSL_CRYPTO_LIBRARIES ${OPENSSL_CRYPTO_LIBRARY})
+mark_as_advanced(OPENSSL_CRYPTO_LIBRARY OPENSSL_SSL_LIBRARY)
-endif()
+# compat defines
+set(OPENSSL_SSL_LIBRARIES ${OPENSSL_SSL_LIBRARY})
+set(OPENSSL_CRYPTO_LIBRARIES ${OPENSSL_CRYPTO_LIBRARY})
function(from_hex HEX DEC)
string(TOUPPER "${HEX}" HEX)
diff --git a/cmake/FindReadline.cmake b/cmake/FindReadline.cmake
index c12fdc718..c48bdcb3e 100644
--- a/cmake/FindReadline.cmake
+++ b/cmake/FindReadline.cmake
@@ -47,7 +47,15 @@ set(READLINE_INCLUDE_DIRS ${READLINE_INCLUDE_DIR})
set(READLINE_LIBRARIES ${READLINE_LIBRARY})
if(READLINE_FOUND)
+ if(CURSES_FOUND)
+ set(READLINE_LIBRARIES ${READLINE_LIBRARIES} ${CURSES_LIBRARIES} ${CURSES_INFO_LIBRARY})
+ set(READLINE_INCLUDE_DIRS ${READLINE_INCLUDE_DIRS} ${CURSES_INCLUDE_DIRS})
+ elseif(TERMCAP_FOUND)
+ set(READLINE_LIBRARIES ${READLINE_LIBRARIES} ${TERMCAP_LIBRARIES} ${CURSES_INFO_LIBRARY})
+ set(READLINE_INCLUDE_DIRS ${READLINE_INCLUDE_DIRS} ${TERMCAP_INCLUDE_DIRS})
+ endif()
if(EXISTS ${READLINE_INCLUDE_DIR}/readline/rlconf.h)
+ set(CMAKE_REQUIRED_LIBRARIES ${READLINE_LIBRARIES})
check_library_exists(${READLINE_LIBRARY} rl_catch_sigwinch ""
HAVE_GNU_READLINE)
if(HAVE_GNU_READLINE)
@@ -55,13 +63,6 @@ if(READLINE_FOUND)
"${HAVE_GNU_READLINE}")
endif()
endif()
- if(CURSES_FOUND)
- set(READLINE_LIBRARIES ${READLINE_LIBRARIES} ${CURSES_LIBRARIES} ${CURSES_INFO_LIBRARY})
- set(READLINE_INCLUDE_DIRS ${READLINE_INCLUDE_DIRS} ${CURSES_INCLUDE_DIRS})
- elseif(TERMCAP_FOUND)
- set(READLINE_LIBRARIES ${READLINE_LIBRARIES} ${TERMCAP_LIBRARIES} ${CURSES_INFO_LIBRARY})
- set(READLINE_INCLUDE_DIRS ${READLINE_INCLUDE_DIRS} ${TERMCAP_INCLUDE_DIRS})
- endif()
endif(READLINE_FOUND)
mark_as_advanced(READLINE_INCLUDE_DIRS READLINE_LIBRARIES)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 432214ea1..ebda09832 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -229,7 +229,6 @@ set (common_libraries
${CURL_LIBRARIES}
${ICONV_LIBRARIES}
${OPENSSL_LIBRARIES}
- ${Z_LIBRARY}
)
More information about the Tarantool-patches
mailing list