Skip to content

Commit

Permalink
CMake: Export and install library targets.
Browse files Browse the repository at this point in the history
The configs can be consumed by setting LibreSSL_DIR to the build
directory, or after installation using CMAKE_PREFIX_PATH/LibreSSL_DIR.

For compatibility, the EXPORT_NAME of targets and the LIBRESSL_*
variables are set to match the names used in FindLibreSSL.
  • Loading branch information
FtZPetruska committed Aug 19, 2023
1 parent 5432e22 commit a89cd65
Show file tree
Hide file tree
Showing 6 changed files with 154 additions and 11 deletions.
34 changes: 33 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ option(ENABLE_ASM "Enable assembly" ON)
option(ENABLE_EXTRATESTS "Enable extra tests that may be unreliable on some platforms" OFF)
option(ENABLE_NC "Enable installing TLS-enabled nc(1)" OFF)
set(OPENSSLDIR ${OPENSSLDIR} CACHE PATH "Set the default openssl directory" FORCE)
set(LIBRESSL_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake" CACHE STRING "Installation directory for the CMake targets")

option(USE_STATIC_MSVC_RUNTIMES "Use /MT instead of /MD in MSVC" OFF)
if(USE_STATIC_MSVC_RUNTIMES)
Expand Down Expand Up @@ -439,6 +440,38 @@ if (BUILD_APPLE_XCFRAMEWORK)
endif(ENABLE_LIBRESSL_INSTALL)
endif(BUILD_APPLE_XCFRAMEWORK)

file(STRINGS "VERSION" VERSION LIMIT_COUNT 1)
include(CMakePackageConfigHelpers)
write_basic_package_version_file(
"LibreSSLConfigVersion.cmake"
VERSION "${VERSION}"
COMPATIBILITY SameMajorVersion
)

set(INCLUDE_DIRECTORY "${CMAKE_BINARY_DIR}/include")
configure_package_config_file(
"${CMAKE_CURRENT_LIST_DIR}/LibreSSLConfig.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/LibreSSLConfig.cmake"
PATH_VARS INCLUDE_DIRECTORY
INSTALL_DESTINATION "${CMAKE_CURRENT_BINARY_DIR}"
INSTALL_PREFIX "${CMAKE_CURRENT_BINARY_DIR}"
)

if(ENABLE_LIBRESSL_INSTALL)
set(INCLUDE_DIRECTORY "${CMAKE_INSTALL_INCLUDEDIR}")
configure_package_config_file(
"${CMAKE_CURRENT_LIST_DIR}/LibreSSLConfig.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/install-config/LibreSSLConfig.cmake"
PATH_VARS INCLUDE_DIRECTORY
INSTALL_DESTINATION "${LIBRESSL_INSTALL_CMAKEDIR}/LibreSSL"
)
install(FILES
"${CMAKE_BINARY_DIR}/install-config/LibreSSLConfig.cmake"
"${CMAKE_BINARY_DIR}/LibreSSLConfigVersion.cmake"
DESTINATION "${LIBRESSL_INSTALL_CMAKEDIR}/LibreSSL"
)
endif()

if(ENABLE_LIBRESSL_INSTALL)
if(NOT MSVC)
# Create pkgconfig files.
Expand All @@ -449,7 +482,6 @@ if(ENABLE_LIBRESSL_INSTALL)
if(PLATFORM_LIBS)
string(REGEX REPLACE ";" " -l" PLATFORM_LDADD ";${PLATFORM_LIBS}")
endif()
file(STRINGS "VERSION" VERSION LIMIT_COUNT 1)
file(GLOB OPENSSL_PKGCONFIGS "*.pc.in")
foreach(file ${OPENSSL_PKGCONFIGS})
get_filename_component(filename ${file} NAME)
Expand Down
33 changes: 33 additions & 0 deletions LibreSSLConfig.cmake.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
@PACKAGE_INIT@

set(LIBRESSL_VERSION @VERSION@)
set_and_check(LIBRESSL_INCLUDE_DIR @PACKAGE_INCLUDE_DIRECTORY@)

if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/LibreSSL-Crypto.cmake")
include("${CMAKE_CURRENT_LIST_DIR}/LibreSSL-Crypto.cmake")
set(LIBRESSL_CRYPTO_LIBRARY LibreSSL::Crypto)
endif()

if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/LibreSSL-SSL.cmake")
include("${CMAKE_CURRENT_LIST_DIR}/LibreSSL-SSL.cmake")
set(LIBRESSL_SSL_LIBRARY LibreSSL::SSL)
endif()

if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/LibreSSL-TLS.cmake")
include("${CMAKE_CURRENT_LIST_DIR}/LibreSSL-TLS.cmake")
set(LIBRESSL_TLS_LIBRARY LibreSSL::TLS)
endif()

set(LIBRESSL_LIBRARIES
${LIBRESSL_CRYPTO_LIBRARY}
${LIBRESSL_SSL_LIBRARY}
${LIBRESSL_TLS_LIBRARY}
)

check_required_components(
Crypto
SSL
TLS
)

set(LIBRESSL_FOUND TRUE)
2 changes: 1 addition & 1 deletion Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ pkgconfig_DATA += libcrypto.pc libssl.pc openssl.pc
endif

EXTRA_DIST = README.md README.windows VERSION config scripts
EXTRA_DIST += CMakeLists.txt cmake_export_symbol.cmake cmake_uninstall.cmake.in FindLibreSSL.cmake
EXTRA_DIST += CMakeLists.txt cmake_export_symbol.cmake cmake_uninstall.cmake.in FindLibreSSL.cmake LibreSSLConfig.cmake.in
EXTRA_DIST += cert.pem openssl.cnf x509v3.cnf

.PHONY: install_sw
Expand Down
32 changes: 29 additions & 3 deletions crypto/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -990,9 +990,29 @@ if (WIN32)
endif()
set_target_properties(crypto PROPERTIES
OUTPUT_NAME crypto${CRYPTO_POSTFIX}
ARCHIVE_OUTPUT_NAME crypto${CRYPTO_POSTFIX})
set_target_properties(crypto PROPERTIES VERSION
${CRYPTO_VERSION} SOVERSION ${CRYPTO_MAJOR_VERSION})
ARCHIVE_OUTPUT_NAME crypto${CRYPTO_POSTFIX}
EXPORT_NAME Crypto
VERSION ${CRYPTO_VERSION}
SOVERSION ${CRYPTO_MAJOR_VERSION}
)

target_include_directories(
crypto
PUBLIC
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/include>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)

install(
TARGETS crypto
EXPORT Crypto-target
)

export(
EXPORT Crypto-target
FILE "${LibreSSL_BINARY_DIR}/LibreSSL-Crypto.cmake"
NAMESPACE LibreSSL::
)

if(ENABLE_LIBRESSL_INSTALL)
install(
Expand All @@ -1001,6 +1021,12 @@ if(ENABLE_LIBRESSL_INSTALL)
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
install(
EXPORT Crypto-target
FILE "LibreSSL-Crypto.cmake"
NAMESPACE LibreSSL::
DESTINATION "${LIBRESSL_INSTALL_CMAKEDIR}/LibreSSL"
)
endif(ENABLE_LIBRESSL_INSTALL)

# build static library for regression test
Expand Down
32 changes: 29 additions & 3 deletions ssl/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -91,9 +91,29 @@ if (WIN32)
endif()
set_target_properties(ssl PROPERTIES
OUTPUT_NAME ssl${SSL_POSTFIX}
ARCHIVE_OUTPUT_NAME ssl${SSL_POSTFIX})
set_target_properties(ssl PROPERTIES VERSION ${SSL_VERSION}
SOVERSION ${SSL_MAJOR_VERSION})
ARCHIVE_OUTPUT_NAME ssl${SSL_POSTFIX}
EXPORT_NAME SSL
VERSION ${SSL_VERSION}
SOVERSION ${SSL_MAJOR_VERSION}
)

target_include_directories(
ssl
PUBLIC
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/include>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)

install(
TARGETS ssl
EXPORT SSL-target
)

export(
EXPORT SSL-target
FILE "${LibreSSL_BINARY_DIR}/LibreSSL-SSL.cmake"
NAMESPACE LibreSSL::
)

if(ENABLE_LIBRESSL_INSTALL)
install(
Expand All @@ -102,6 +122,12 @@ if(ENABLE_LIBRESSL_INSTALL)
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
install(
EXPORT SSL-target
FILE "LibreSSL-SSL.cmake"
NAMESPACE LibreSSL::
DESTINATION "${LIBRESSL_INSTALL_CMAKEDIR}/LibreSSL"
)
endif(ENABLE_LIBRESSL_INSTALL)

# build static library for regression test
Expand Down
32 changes: 29 additions & 3 deletions tls/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -58,9 +58,29 @@ if (WIN32)
endif()
set_target_properties(tls PROPERTIES
OUTPUT_NAME tls${TLS_POSTFIX}
ARCHIVE_OUTPUT_NAME tls${TLS_POSTFIX})
set_target_properties(tls PROPERTIES VERSION ${TLS_VERSION}
SOVERSION ${TLS_MAJOR_VERSION})
ARCHIVE_OUTPUT_NAME tls${TLS_POSTFIX}
EXPORT_NAME TLS
VERSION ${TLS_VERSION}
SOVERSION ${TLS_MAJOR_VERSION}
)

target_include_directories(
tls
PUBLIC
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/include>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)

install(
TARGETS tls
EXPORT TLS-target
)

export(
EXPORT TLS-target
FILE "${LibreSSL_BINARY_DIR}/LibreSSL-TLS.cmake"
NAMESPACE LibreSSL::
)

if(ENABLE_LIBRESSL_INSTALL)
install(
Expand All @@ -69,6 +89,12 @@ if(ENABLE_LIBRESSL_INSTALL)
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
install(
EXPORT TLS-target
FILE "LibreSSL-TLS.cmake"
NAMESPACE LibreSSL::
DESTINATION "${LIBRESSL_INSTALL_CMAKEDIR}/LibreSSL"
)
endif(ENABLE_LIBRESSL_INSTALL)

# build static library for regression test
Expand Down

0 comments on commit a89cd65

Please sign in to comment.