aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierre Wendling <pierre.wendling.4@gmail.com>2023-08-06 15:07:31 -0400
committerPierre Wendling <pierre.wendling.4@gmail.com>2023-08-19 12:16:15 -0400
commita89cd65980153ef60b42cb26d3bef949751f87f1 (patch)
tree15d4693562c401d0bbc0b3812d983ca1ac0391cb
parent5432e22b25026fb50b00ab5dcf894e18daa8bcb6 (diff)
downloadportable-a89cd65980153ef60b42cb26d3bef949751f87f1.tar.gz
portable-a89cd65980153ef60b42cb26d3bef949751f87f1.tar.bz2
portable-a89cd65980153ef60b42cb26d3bef949751f87f1.zip
CMake: Export and install library targets.
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.
-rw-r--r--CMakeLists.txt34
-rw-r--r--LibreSSLConfig.cmake.in33
-rw-r--r--Makefile.am2
-rw-r--r--crypto/CMakeLists.txt32
-rw-r--r--ssl/CMakeLists.txt32
-rw-r--r--tls/CMakeLists.txt32
6 files changed, 154 insertions, 11 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 991f60c..8e26e47 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -39,6 +39,7 @@ option(ENABLE_ASM "Enable assembly" ON)
39option(ENABLE_EXTRATESTS "Enable extra tests that may be unreliable on some platforms" OFF) 39option(ENABLE_EXTRATESTS "Enable extra tests that may be unreliable on some platforms" OFF)
40option(ENABLE_NC "Enable installing TLS-enabled nc(1)" OFF) 40option(ENABLE_NC "Enable installing TLS-enabled nc(1)" OFF)
41set(OPENSSLDIR ${OPENSSLDIR} CACHE PATH "Set the default openssl directory" FORCE) 41set(OPENSSLDIR ${OPENSSLDIR} CACHE PATH "Set the default openssl directory" FORCE)
42set(LIBRESSL_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake" CACHE STRING "Installation directory for the CMake targets")
42 43
43option(USE_STATIC_MSVC_RUNTIMES "Use /MT instead of /MD in MSVC" OFF) 44option(USE_STATIC_MSVC_RUNTIMES "Use /MT instead of /MD in MSVC" OFF)
44if(USE_STATIC_MSVC_RUNTIMES) 45if(USE_STATIC_MSVC_RUNTIMES)
@@ -439,6 +440,38 @@ if (BUILD_APPLE_XCFRAMEWORK)
439 endif(ENABLE_LIBRESSL_INSTALL) 440 endif(ENABLE_LIBRESSL_INSTALL)
440endif(BUILD_APPLE_XCFRAMEWORK) 441endif(BUILD_APPLE_XCFRAMEWORK)
441 442
443file(STRINGS "VERSION" VERSION LIMIT_COUNT 1)
444include(CMakePackageConfigHelpers)
445write_basic_package_version_file(
446 "LibreSSLConfigVersion.cmake"
447 VERSION "${VERSION}"
448 COMPATIBILITY SameMajorVersion
449)
450
451set(INCLUDE_DIRECTORY "${CMAKE_BINARY_DIR}/include")
452configure_package_config_file(
453 "${CMAKE_CURRENT_LIST_DIR}/LibreSSLConfig.cmake.in"
454 "${CMAKE_CURRENT_BINARY_DIR}/LibreSSLConfig.cmake"
455 PATH_VARS INCLUDE_DIRECTORY
456 INSTALL_DESTINATION "${CMAKE_CURRENT_BINARY_DIR}"
457 INSTALL_PREFIX "${CMAKE_CURRENT_BINARY_DIR}"
458)
459
460if(ENABLE_LIBRESSL_INSTALL)
461 set(INCLUDE_DIRECTORY "${CMAKE_INSTALL_INCLUDEDIR}")
462 configure_package_config_file(
463 "${CMAKE_CURRENT_LIST_DIR}/LibreSSLConfig.cmake.in"
464 "${CMAKE_CURRENT_BINARY_DIR}/install-config/LibreSSLConfig.cmake"
465 PATH_VARS INCLUDE_DIRECTORY
466 INSTALL_DESTINATION "${LIBRESSL_INSTALL_CMAKEDIR}/LibreSSL"
467 )
468 install(FILES
469 "${CMAKE_BINARY_DIR}/install-config/LibreSSLConfig.cmake"
470 "${CMAKE_BINARY_DIR}/LibreSSLConfigVersion.cmake"
471 DESTINATION "${LIBRESSL_INSTALL_CMAKEDIR}/LibreSSL"
472 )
473endif()
474
442if(ENABLE_LIBRESSL_INSTALL) 475if(ENABLE_LIBRESSL_INSTALL)
443 if(NOT MSVC) 476 if(NOT MSVC)
444 # Create pkgconfig files. 477 # Create pkgconfig files.
@@ -449,7 +482,6 @@ if(ENABLE_LIBRESSL_INSTALL)
449 if(PLATFORM_LIBS) 482 if(PLATFORM_LIBS)
450 string(REGEX REPLACE ";" " -l" PLATFORM_LDADD ";${PLATFORM_LIBS}") 483 string(REGEX REPLACE ";" " -l" PLATFORM_LDADD ";${PLATFORM_LIBS}")
451 endif() 484 endif()
452 file(STRINGS "VERSION" VERSION LIMIT_COUNT 1)
453 file(GLOB OPENSSL_PKGCONFIGS "*.pc.in") 485 file(GLOB OPENSSL_PKGCONFIGS "*.pc.in")
454 foreach(file ${OPENSSL_PKGCONFIGS}) 486 foreach(file ${OPENSSL_PKGCONFIGS})
455 get_filename_component(filename ${file} NAME) 487 get_filename_component(filename ${file} NAME)
diff --git a/LibreSSLConfig.cmake.in b/LibreSSLConfig.cmake.in
new file mode 100644
index 0000000..d6fbe3b
--- /dev/null
+++ b/LibreSSLConfig.cmake.in
@@ -0,0 +1,33 @@
1@PACKAGE_INIT@
2
3set(LIBRESSL_VERSION @VERSION@)
4set_and_check(LIBRESSL_INCLUDE_DIR @PACKAGE_INCLUDE_DIRECTORY@)
5
6if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/LibreSSL-Crypto.cmake")
7 include("${CMAKE_CURRENT_LIST_DIR}/LibreSSL-Crypto.cmake")
8 set(LIBRESSL_CRYPTO_LIBRARY LibreSSL::Crypto)
9endif()
10
11if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/LibreSSL-SSL.cmake")
12 include("${CMAKE_CURRENT_LIST_DIR}/LibreSSL-SSL.cmake")
13 set(LIBRESSL_SSL_LIBRARY LibreSSL::SSL)
14endif()
15
16if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/LibreSSL-TLS.cmake")
17 include("${CMAKE_CURRENT_LIST_DIR}/LibreSSL-TLS.cmake")
18 set(LIBRESSL_TLS_LIBRARY LibreSSL::TLS)
19endif()
20
21set(LIBRESSL_LIBRARIES
22 ${LIBRESSL_CRYPTO_LIBRARY}
23 ${LIBRESSL_SSL_LIBRARY}
24 ${LIBRESSL_TLS_LIBRARY}
25)
26
27check_required_components(
28 Crypto
29 SSL
30 TLS
31)
32
33set(LIBRESSL_FOUND TRUE)
diff --git a/Makefile.am b/Makefile.am
index d28692a..2edef0d 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -11,7 +11,7 @@ pkgconfig_DATA += libcrypto.pc libssl.pc openssl.pc
11endif 11endif
12 12
13EXTRA_DIST = README.md README.windows VERSION config scripts 13EXTRA_DIST = README.md README.windows VERSION config scripts
14EXTRA_DIST += CMakeLists.txt cmake_export_symbol.cmake cmake_uninstall.cmake.in FindLibreSSL.cmake 14EXTRA_DIST += CMakeLists.txt cmake_export_symbol.cmake cmake_uninstall.cmake.in FindLibreSSL.cmake LibreSSLConfig.cmake.in
15EXTRA_DIST += cert.pem openssl.cnf x509v3.cnf 15EXTRA_DIST += cert.pem openssl.cnf x509v3.cnf
16 16
17.PHONY: install_sw 17.PHONY: install_sw
diff --git a/crypto/CMakeLists.txt b/crypto/CMakeLists.txt
index 1e73e88..597ffef 100644
--- a/crypto/CMakeLists.txt
+++ b/crypto/CMakeLists.txt
@@ -990,9 +990,29 @@ if (WIN32)
990endif() 990endif()
991set_target_properties(crypto PROPERTIES 991set_target_properties(crypto PROPERTIES
992 OUTPUT_NAME crypto${CRYPTO_POSTFIX} 992 OUTPUT_NAME crypto${CRYPTO_POSTFIX}
993 ARCHIVE_OUTPUT_NAME crypto${CRYPTO_POSTFIX}) 993 ARCHIVE_OUTPUT_NAME crypto${CRYPTO_POSTFIX}
994set_target_properties(crypto PROPERTIES VERSION 994 EXPORT_NAME Crypto
995 ${CRYPTO_VERSION} SOVERSION ${CRYPTO_MAJOR_VERSION}) 995 VERSION ${CRYPTO_VERSION}
996 SOVERSION ${CRYPTO_MAJOR_VERSION}
997)
998
999target_include_directories(
1000 crypto
1001 PUBLIC
1002 $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/include>
1003 $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
1004)
1005
1006install(
1007 TARGETS crypto
1008 EXPORT Crypto-target
1009)
1010
1011export(
1012 EXPORT Crypto-target
1013 FILE "${LibreSSL_BINARY_DIR}/LibreSSL-Crypto.cmake"
1014 NAMESPACE LibreSSL::
1015)
996 1016
997if(ENABLE_LIBRESSL_INSTALL) 1017if(ENABLE_LIBRESSL_INSTALL)
998 install( 1018 install(
@@ -1001,6 +1021,12 @@ if(ENABLE_LIBRESSL_INSTALL)
1001 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} 1021 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
1002 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} 1022 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
1003 ) 1023 )
1024 install(
1025 EXPORT Crypto-target
1026 FILE "LibreSSL-Crypto.cmake"
1027 NAMESPACE LibreSSL::
1028 DESTINATION "${LIBRESSL_INSTALL_CMAKEDIR}/LibreSSL"
1029 )
1004endif(ENABLE_LIBRESSL_INSTALL) 1030endif(ENABLE_LIBRESSL_INSTALL)
1005 1031
1006# build static library for regression test 1032# build static library for regression test
diff --git a/ssl/CMakeLists.txt b/ssl/CMakeLists.txt
index 3d5b5df..16ef277 100644
--- a/ssl/CMakeLists.txt
+++ b/ssl/CMakeLists.txt
@@ -91,9 +91,29 @@ if (WIN32)
91endif() 91endif()
92set_target_properties(ssl PROPERTIES 92set_target_properties(ssl PROPERTIES
93 OUTPUT_NAME ssl${SSL_POSTFIX} 93 OUTPUT_NAME ssl${SSL_POSTFIX}
94 ARCHIVE_OUTPUT_NAME ssl${SSL_POSTFIX}) 94 ARCHIVE_OUTPUT_NAME ssl${SSL_POSTFIX}
95set_target_properties(ssl PROPERTIES VERSION ${SSL_VERSION} 95 EXPORT_NAME SSL
96 SOVERSION ${SSL_MAJOR_VERSION}) 96 VERSION ${SSL_VERSION}
97 SOVERSION ${SSL_MAJOR_VERSION}
98)
99
100target_include_directories(
101 ssl
102 PUBLIC
103 $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/include>
104 $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
105)
106
107install(
108 TARGETS ssl
109 EXPORT SSL-target
110)
111
112export(
113 EXPORT SSL-target
114 FILE "${LibreSSL_BINARY_DIR}/LibreSSL-SSL.cmake"
115 NAMESPACE LibreSSL::
116)
97 117
98if(ENABLE_LIBRESSL_INSTALL) 118if(ENABLE_LIBRESSL_INSTALL)
99 install( 119 install(
@@ -102,6 +122,12 @@ if(ENABLE_LIBRESSL_INSTALL)
102 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} 122 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
103 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} 123 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
104 ) 124 )
125 install(
126 EXPORT SSL-target
127 FILE "LibreSSL-SSL.cmake"
128 NAMESPACE LibreSSL::
129 DESTINATION "${LIBRESSL_INSTALL_CMAKEDIR}/LibreSSL"
130 )
105endif(ENABLE_LIBRESSL_INSTALL) 131endif(ENABLE_LIBRESSL_INSTALL)
106 132
107# build static library for regression test 133# build static library for regression test
diff --git a/tls/CMakeLists.txt b/tls/CMakeLists.txt
index 2a90192..a8f29af 100644
--- a/tls/CMakeLists.txt
+++ b/tls/CMakeLists.txt
@@ -58,9 +58,29 @@ if (WIN32)
58endif() 58endif()
59set_target_properties(tls PROPERTIES 59set_target_properties(tls PROPERTIES
60 OUTPUT_NAME tls${TLS_POSTFIX} 60 OUTPUT_NAME tls${TLS_POSTFIX}
61 ARCHIVE_OUTPUT_NAME tls${TLS_POSTFIX}) 61 ARCHIVE_OUTPUT_NAME tls${TLS_POSTFIX}
62set_target_properties(tls PROPERTIES VERSION ${TLS_VERSION} 62 EXPORT_NAME TLS
63 SOVERSION ${TLS_MAJOR_VERSION}) 63 VERSION ${TLS_VERSION}
64 SOVERSION ${TLS_MAJOR_VERSION}
65)
66
67target_include_directories(
68 tls
69 PUBLIC
70 $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/include>
71 $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
72)
73
74install(
75 TARGETS tls
76 EXPORT TLS-target
77)
78
79export(
80 EXPORT TLS-target
81 FILE "${LibreSSL_BINARY_DIR}/LibreSSL-TLS.cmake"
82 NAMESPACE LibreSSL::
83)
64 84
65if(ENABLE_LIBRESSL_INSTALL) 85if(ENABLE_LIBRESSL_INSTALL)
66 install( 86 install(
@@ -69,6 +89,12 @@ if(ENABLE_LIBRESSL_INSTALL)
69 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} 89 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
70 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} 90 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
71 ) 91 )
92 install(
93 EXPORT TLS-target
94 FILE "LibreSSL-TLS.cmake"
95 NAMESPACE LibreSSL::
96 DESTINATION "${LIBRESSL_INSTALL_CMAKEDIR}/LibreSSL"
97 )
72endif(ENABLE_LIBRESSL_INSTALL) 98endif(ENABLE_LIBRESSL_INSTALL)
73 99
74# build static library for regression test 100# build static library for regression test