|
| 1 | +include_guard(GLOBAL) |
| 2 | + |
| 3 | +option(USERVER_DOWNLOAD_PACKAGE_OPENSSL "Download and setup OpenSSL if no library of matching version was found" |
| 4 | + ${USERVER_DOWNLOAD_PACKAGES} |
| 5 | +) |
| 6 | +option(USERVER_FORCE_DOWNLOAD_OPENSSL "Download OpenSSL even if there is an installed system package" |
| 7 | + ${USERVER_FORCE_DOWNLOAD_PACKAGES} |
| 8 | +) |
| 9 | + |
| 10 | +if(NOT USERVER_FORCE_DOWNLOAD_OPENSSL AND NOT OpenSSL_CPM) |
| 11 | + if(USERVER_DOWNLOAD_PACKAGE_OPENSSL) |
| 12 | + find_package(OpenSSL) |
| 13 | + else() |
| 14 | + find_package(OpenSSL REQUIRED) |
| 15 | + endif() |
| 16 | + |
| 17 | + if(OpenSSL_FOUND) |
| 18 | + return() |
| 19 | + endif() |
| 20 | +endif() |
| 21 | +set(OpenSSL_CPM TRUE CACHE BOOL "") |
| 22 | + |
| 23 | +include(DownloadUsingCPM) |
| 24 | + |
| 25 | +set(OPENSSL_INSTALL_DIR ${CMAKE_BINARY_DIR}/openssl) |
| 26 | +execute_process(COMMAND mkdir -p ${OPENSSL_INSTALL_DIR}/usr/local/include) |
| 27 | + |
| 28 | +# Flags are copied from Ubuntu's debian/rules |
| 29 | +set(CONFIGURE_FLAGS no-idea no-mdc2 no-rc5 no-zlib no-ssl3 enable-unit-test no-ssl3-method enable-rfc3779 enable-cms no-capieng) |
| 30 | +set(OPENSSL_VERSION 3.5.2) |
| 31 | + |
| 32 | +cpmaddpackage( |
| 33 | + NAME OpenSSL |
| 34 | + URL https://github.com/openssl/openssl/releases/download/openssl-${OPENSSL_VERSION}/openssl-${OPENSSL_VERSION}.tar.gz |
| 35 | + URL_HASH SHA512=db2c7a88bea432f96d867a98af15f850f371d4136c657338de93cb88a39a3578c025b5df7310e195a02fc715ad5a2422a319a44f0247c6a7e2ba8b36aad77651 |
| 36 | +) |
| 37 | + |
| 38 | +# We use custom target to be able to set build dependency |
| 39 | +# for *external* libcurl from CPM |
| 40 | +add_custom_target( |
| 41 | + OpenSSL |
| 42 | + test -e ${OPENSSL_INSTALL_DIR}/.installed || CFLAGS=${CMAKE_C_FLAGS} ./config --libdir=/usr/local/lib ${CONFIGURE_FLAGS} |
| 43 | + COMMAND |
| 44 | + test -e ${OPENSSL_INSTALL_DIR}/.installed || make -j8 |
| 45 | + COMMAND |
| 46 | + test -e ${OPENSSL_INSTALL_DIR}/.installed || make DESTDIR=${OPENSSL_INSTALL_DIR} install_sw |
| 47 | + COMMAND |
| 48 | + touch ${OPENSSL_INSTALL_DIR}/.installed |
| 49 | + WORKING_DIRECTORY ${OpenSSL_SOURCE_DIR} |
| 50 | + COMMENT "Compiling OpenSSL library" |
| 51 | +) |
| 52 | + |
| 53 | + |
| 54 | +add_library(Crypto STATIC IMPORTED GLOBAL) |
| 55 | +add_dependencies(Crypto OpenSSL) |
| 56 | +set_property(TARGET Crypto PROPERTY IMPORTED_LOCATION ${OPENSSL_INSTALL_DIR}/usr/local/lib/libcrypto.a) |
| 57 | +target_include_directories(Crypto INTERFACE ${OPENSSL_INSTALL_DIR}/usr/local/include) |
| 58 | + |
| 59 | + |
| 60 | +add_library(SSL STATIC IMPORTED GLOBAL) |
| 61 | +add_dependencies(SSL OpenSSL) |
| 62 | +set_property(TARGET SSL PROPERTY IMPORTED_LOCATION ${OPENSSL_INSTALL_DIR}/usr/local/lib/libssl.a) |
| 63 | +target_include_directories(SSL INTERFACE ${OPENSSL_INSTALL_DIR}/usr/local/include) |
| 64 | + |
| 65 | +add_library(OpenSSL::Crypto ALIAS Crypto) |
| 66 | +add_library(OpenSSL::SSL ALIAS SSL) |
| 67 | + |
| 68 | +# Light emulation of find_package(OpenSSL) for libcurl |
| 69 | +set(OpenSSL_FOUND TRUE CACHE BOOL "" FORCE) |
| 70 | +set(OPENSSL_FOUND TRUE CACHE BOOL "" FORCE) |
| 71 | +set(OPENSSL_CRYPTO_LIBRARY OpenSSL::Crypto CACHE STRING "" FORCE) |
| 72 | +set(OPENSSL_INCLUDE_DIR ${OPENSSL_INSTALL_DIR}/usr/local/include CACHE FILEPATH "" FORCE) |
0 commit comments