diff --git a/exporters/CMakeLists.txt b/exporters/CMakeLists.txt index b81ff69..f5c3ee6 100644 --- a/exporters/CMakeLists.txt +++ b/exporters/CMakeLists.txt @@ -15,3 +15,33 @@ configure_file(pkg-config/openssl.pc.cmake.in openssl.pc @ONLY) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/openssl.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig ) + +get_target_property(OPENSSL_EXTERNALCMAKE_CRYPTO_ARCHIVE_OUTPUT_NAME crypto ARCHIVE_OUTPUT_NAME) +if (NOT OPENSSL_EXTERNALCMAKE_CRYPTO_ARCHIVE_OUTPUT_NAME) + set(OPENSSL_EXTERNALCMAKE_CRYPTO_ARCHIVE_OUTPUT_NAME crypto) +endif() + +get_target_property(OPENSSL_EXTERNALCMAKE_CRYPTO_LIBRARY_OUTPUT_NAME crypto LIBRARY_OUTPUT_NAME) +if (NOT OPENSSL_EXTERNALCMAKE_CRYPTO_LIBRARY_OUTPUT_NAME) + set(OPENSSL_EXTERNALCMAKE_CRYPTO_LIBRARY_OUTPUT_NAME crypto) +endif() + +get_target_property(OPENSSL_EXTERNALCMAKE_SSL_ARCHIVE_OUTPUT_NAME ssl ARCHIVE_OUTPUT_NAME) +if (NOT OPENSSL_EXTERNALCMAKE_SSL_ARCHIVE_OUTPUT_NAME) + set(OPENSSL_EXTERNALCMAKE_SSL_ARCHIVE_OUTPUT_NAME ssl) +endif() + +get_target_property(OPENSSL_EXTERNALCMAKE_SSL_LIBRARY_OUTPUT_NAME ssl LIBRARY_OUTPUT_NAME) +if (NOT OPENSSL_EXTERNALCMAKE_SSL_LIBRARY_OUTPUT_NAME) + set(OPENSSL_EXTERNALCMAKE_SSL_LIBRARY_OUTPUT_NAME ssl) +endif() + +configure_file(cmake/OpenSSLConfig.cmake.in OpenSSLConfig.cmake @ONLY) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/OpenSSLConfig.cmake + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/OpenSSL +) + +configure_file(cmake/OpenSSLConfigVersion.cmake.in OpenSSLConfigVersion.cmake @ONLY) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/OpenSSLConfigVersion.cmake + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/OpenSSL +) diff --git a/exporters/cmake/OpenSSLConfig.cmake.in b/exporters/cmake/OpenSSLConfig.cmake.in new file mode 100644 index 0000000..9aeef89 --- /dev/null +++ b/exporters/cmake/OpenSSLConfig.cmake.in @@ -0,0 +1,188 @@ +# Generated by Fsu0413/openssl-externalCMake +# Most of original file copied from OpenSSL + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Avoid duplicate find_package() +set(_ossl_expected_targets OpenSSL::Crypto OpenSSL::SSL + ) +set(_ossl_defined_targets) +set(_ossl_undefined_targets) +foreach(t IN LISTS _ossl_expected_targets) + if(TARGET "${t}") + LIST(APPEND _ossl_defined_targets "${t}") + else() + LIST(APPEND _ossl_undefined_targets "${t}") + endif() +endforeach() +message(DEBUG "_ossl_expected_targets = ${_ossl_expected_targets}") +message(DEBUG "_ossl_defined_targets = ${_ossl_defined_targets}") +message(DEBUG "_ossl_undefined_targets = ${_ossl_undefined_targets}") +if(NOT _ossl_undefined_targets) + # All targets are defined, we're good, just undo everything and return + unset(_ossl_expected_targets) + unset(_ossl_defined_targets) + unset(_ossl_undefined_targets) + unset(CMAKE_IMPORT_FILE_VERSION) + return() +endif() +if(_ossl_defined_targets) + # We have a mix of defined and undefined targets. This is hard to reconcile, + # and probably the result of another config, or FindOpenSSL.cmake having been + # called, or whatever. Therefore, the best course of action is to quit with a + # hard error. + message(FATAL_ERROR "Some targets defined, others not:\nNot defined: ${_ossl_undefined_targets}\nDefined: ${_ossl_defined_targets}") +endif() +unset(_ossl_expected_targets) +unset(_ossl_defined_targets) +unset(_ossl_undefined_targets) + +# Set up the import path, so all other import paths are made relative this file +get_filename_component(_ossl_prefix "${CMAKE_CURRENT_LIST_FILE}" PATH) +get_filename_component(_ossl_prefix "${_ossl_prefix}" PATH) +get_filename_component(_ossl_prefix "${_ossl_prefix}" PATH) +get_filename_component(_ossl_prefix "${_ossl_prefix}" PATH) + +if(_ossl_prefix STREQUAL "/") + set(_ossl_prefix "") +endif() + +# Fsu0413/openssl-externalCMake modification start: +# Original logic of OpenSSL judges here using OPENSSL_USE_STATIC_LIBS +# Since our CMake project builds only either of shared and static library, we should judge OPENSSL_USE_STATIC_LIBS with the built version +# So the logic here should be modified + +set (OPENSSL_EXTERNALCMAKE_BUILD_SHARED_LIBS @BUILD_SHARED_LIBS@) +if (OPENSSL_EXTERNALCMAKE_BUILD_SHARED_LIBS) + set(_ossl_use_static_libs false) +else() + set(_ossl_use_static_libs True) +endif() +unset(OPENSSL_EXTERNALCMAKE_BUILD_SHARED_LIBS) + +if (DEFINED OPENSSL_USE_STATIC_LIBS) + if ( ( OPENSSL_USE_STATIC_LIBS ) AND ( _ossl_use_static_libs ) ) + elseif ( ( NOT OPENSSL_USE_STATIC_LIBS ) AND ( NOT _ossl_use_static_libs ) ) + else() + # OPENSSL_USE_STATIC_LIBS is explicitly different than _ossl_use_static_libs, indicating + # the required library variant is not available. The best course of action is to simply + # return and leave it to CMake to use another OpenSSL config. + unset(_ossl_use_static_libs) + unset(CMAKE_IMPORT_FILE_VERSION) + return() + endif() +endif() +# Fsu0413/openssl-externalCMake modification end + +# Version, copied from what find_package() gives, for compatibility with FindOpenSSL.cmake +set(OPENSSL_VERSION "${OpenSSL_VERSION}") +set(OPENSSL_VERSION_MAJOR "${OpenSSL_VERSION_MAJOR}") +set(OPENSSL_VERSION_MINOR "${OpenSSL_VERSION_MINOR}") +set(OPENSSL_VERSION_FIX "${OpenSSL_VERSION_PATCH}") +set(OPENSSL_FOUND YES) + +# Directories and names +set(OPENSSL_INCLUDE_DIR "${_ossl_prefix}/@CMAKE_INSTALL_INCLUDEDIR@") +set(OPENSSL_LIBRARY_DIR "${_ossl_prefix}/@CMAKE_INSTALL_LIBDIR@") +set(OPENSSL_ENGINES_DIR "${_ossl_prefix}/@CMAKE_INSTALL_LIBDIR@/engines-3") +set(OPENSSL_MODULES_DIR "${_ossl_prefix}/@CMAKE_INSTALL_LIBDIR@/ossl-modules") +set(OPENSSL_RUNTIME_DIR "${_ossl_prefix}/@CMAKE_INSTALL_BINDIR@") + +set(OPENSSL_PROGRAM "${OPENSSL_RUNTIME_DIR}/openssl") + +# Set up the imported targets +# Fsu0413/openssl-externalCMake notes: Way for disabling outputs during configure is nonexistant. +# So instead of disabling output using the following "if" (which exists on original OpenSSL project) only for judging if static library is used seems enough +if(_ossl_use_static_libs) + + add_library(OpenSSL::Crypto STATIC IMPORTED) + add_library(OpenSSL::SSL STATIC IMPORTED) + + set(OPENSSL_LIBCRYPTO_STATIC "${OPENSSL_LIBRARY_DIR}/@CMAKE_STATIC_LIBRARY_PREFIX@@OPENSSL_EXTERNALCMAKE_CRYPTO_ARCHIVE_OUTPUT_NAME@@CMAKE_STATIC_LIBRARY_SUFFIX@") + set(OPENSSL_LIBCRYPTO_DEPENDENCIES ) + set_target_properties(OpenSSL::Crypto PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + IMPORTED_LOCATION ${OPENSSL_LIBCRYPTO_STATIC}) + set_property(TARGET OpenSSL::Crypto + PROPERTY INTERFACE_LINK_LIBRARIES ${OPENSSL_LIBCRYPTO_DEPENDENCIES}) + + set(OPENSSL_LIBSSL_STATIC "${OPENSSL_LIBRARY_DIR}/@CMAKE_STATIC_LIBRARY_PREFIX@@OPENSSL_EXTERNALCMAKE_SSL_ARCHIVE_OUTPUT_NAME@@CMAKE_STATIC_LIBRARY_SUFFIX@") + set(OPENSSL_LIBSSL_DEPENDENCIES OpenSSL::Crypto) + set_target_properties(OpenSSL::SSL PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + IMPORTED_LOCATION ${OPENSSL_LIBSSL_STATIC}) + set_property(TARGET OpenSSL::SSL + PROPERTY INTERFACE_LINK_LIBRARIES ${OPENSSL_LIBSSL_DEPENDENCIES}) + + # Directories and names compatible with CMake's FindOpenSSL.cmake + set(OPENSSL_CRYPTO_LIBRARY ${OPENSSL_LIBCRYPTO_STATIC}) + set(OPENSSL_CRYPTO_LIBRARIES ${OPENSSL_CRYPTO_LIBRARY} ${OPENSSL_LIBCRYPTO_DEPENDENCIES}) + set(OPENSSL_SSL_LIBRARY ${OPENSSL_LIBSSL_STATIC}) + set(OPENSSL_SSL_LIBRARIES ${OPENSSL_SSL_LIBRARY} ${OPENSSL_LIBSSL_DEPENDENCIES}) + set(OPENSSL_LIBRARIES ${OPENSSL_SSL_LIBRARY} ${OPENSSL_LIBSSL_DEPENDENCIES} ${OPENSSL_LIBCRYPTO_DEPENDENCIES}) + +else() + + add_library(OpenSSL::Crypto SHARED IMPORTED) + add_library(OpenSSL::SSL SHARED IMPORTED) + + # Fsu0413/openssl-externalCMake modification: judging if export library needed by querying the target platform + if (WIN32 OR CYGWIN) + set(OPENSSL_LIBCRYPTO_SHARED "${OPENSSL_RUNTIME_DIR}/@CMAKE_SHARED_LIBRARY_PREFIX@@OPENSSL_EXTERNALCMAKE_CRYPTO_LIBRARY_OUTPUT_NAME@@CMAKE_SHARED_LIBRARY_SUFFIX@") + set(OPENSSL_LIBCRYPTO_IMPORT "${OPENSSL_LIBRARY_DIR}/@CMAKE_IMPORT_LIBRARY_PREFIX@@OPENSSL_EXTERNALCMAKE_CRYPTO_ARCHIVE_OUTPUT_NAME@@CMAKE_IMPORT_LIBRARY_SUFFIX@") + set(OPENSSL_LIBCRYPTO_DEPENDENCIES ) + set_target_properties(OpenSSL::Crypto PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + IMPORTED_IMPLIB ${OPENSSL_LIBCRYPTO_IMPORT} + IMPORTED_LOCATION ${OPENSSL_LIBCRYPTO_SHARED}) + set_property(TARGET OpenSSL::Crypto + PROPERTY INTERFACE_LINK_LIBRARIES ${OPENSSL_LIBCRYPTO_DEPENDENCIES}) + + set(OPENSSL_LIBSSL_SHARED "${OPENSSL_RUNTIME_DIR}/@CMAKE_SHARED_LIBRARY_PREFIX@@OPENSSL_EXTERNALCMAKE_SSL_LIBRARY_OUTPUT_NAME@@CMAKE_SHARED_LIBRARY_SUFFIX@") + set(OPENSSL_LIBSSL_IMPORT "${OPENSSL_LIBRARY_DIR}/@CMAKE_IMPORT_LIBRARY_PREFIX@@OPENSSL_EXTERNALCMAKE_SSL_ARCHIVE_OUTPUT_NAME@@CMAKE_IMPORT_LIBRARY_SUFFIX@") + set(OPENSSL_LIBSSL_DEPENDENCIES OpenSSL::Crypto ) + set_target_properties(OpenSSL::SSL PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + IMPORTED_IMPLIB ${OPENSSL_LIBSSL_IMPORT} + IMPORTED_LOCATION ${OPENSSL_LIBSSL_SHARED}) + set_property(TARGET OpenSSL::SSL + PROPERTY INTERFACE_LINK_LIBRARIES ${OPENSSL_LIBSSL_DEPENDENCIES}) + + # Directories and names compatible with CMake's FindOpenSSL.cmake + set(OPENSSL_CRYPTO_LIBRARY ${OPENSSL_LIBCRYPTO_IMPORT}) + set(OPENSSL_CRYPTO_LIBRARIES ${OPENSSL_CRYPTO_LIBRARY} ${OPENSSL_LIBCRYPTO_DEPENDENCIES}) + set(OPENSSL_SSL_LIBRARY ${OPENSSL_LIBSSL_IMPORT}) + set(OPENSSL_SSL_LIBRARIES ${OPENSSL_SSL_LIBRARY} ${OPENSSL_LIBSSL_DEPENDENCIES}) + set(OPENSSL_LIBRARIES ${OPENSSL_SSL_LIBRARY} ${OPENSSL_LIBSSL_DEPENDENCIES} ${OPENSSL_LIBCRYPTO_DEPENDENCIES}) + else() + # Dependencies are assumed to be implied in the shared libraries + set(OPENSSL_LIBCRYPTO_SHARED "${OPENSSL_LIBRARY_DIR}/@CMAKE_SHARED_LIBRARY_PREFIX@@OPENSSL_EXTERNALCMAKE_CRYPTO_LIBRARY_OUTPUT_NAME@@CMAKE_SHARED_LIBRARY_SUFFIX@") + set_target_properties(OpenSSL::Crypto PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + IMPORTED_LOCATION ${OPENSSL_LIBCRYPTO_SHARED}) + + set(OPENSSL_LIBSSL_SHARED "${OPENSSL_LIBRARY_DIR}/@CMAKE_SHARED_LIBRARY_PREFIX@@OPENSSL_EXTERNALCMAKE_SSL_LIBRARY_OUTPUT_NAME@@CMAKE_SHARED_LIBRARY_SUFFIX@") + set_target_properties(OpenSSL::SSL PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + IMPORTED_LOCATION ${OPENSSL_LIBSSL_SHARED}) + + # Directories and names compatible with CMake's FindOpenSSL.cmake + set(OPENSSL_CRYPTO_LIBRARY ${OPENSSL_LIBCRYPTO_SHARED}) + set(OPENSSL_CRYPTO_LIBRARIES ${OPENSSL_CRYPTO_LIBRARY}) + set(OPENSSL_SSL_LIBRARY ${OPENSSL_LIBSSL_SHARED}) + set(OPENSSL_SSL_LIBRARIES ${OPENSSL_SSL_LIBRARY}) + set(OPENSSL_LIBRARIES ${OPENSSL_SSL_LIBRARIES}) + endif() + +endif() + +set_target_properties(OpenSSL::Crypto PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${OPENSSL_INCLUDE_DIR}") +set_target_properties(OpenSSL::SSL PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${OPENSSL_INCLUDE_DIR}") + + + +unset(_ossl_prefix) +unset(_ossl_use_static_libs) diff --git a/exporters/cmake/OpenSSLConfigVersion.cmake.in b/exporters/cmake/OpenSSLConfigVersion.cmake.in new file mode 100644 index 0000000..7bd13e7 --- /dev/null +++ b/exporters/cmake/OpenSSLConfigVersion.cmake.in @@ -0,0 +1,17 @@ +# Generated by OpenSSL + +set(PACKAGE_VERSION @OpenSSL_VERSION@) + +if(NOT PACKAGE_FIND_VERSION) + # find_package() was called without any version information. This is assumed to + # mean that the caller accepts whatever they get. + set(PACKAGE_VERSION_COMPATIBLE 1) +elseif(PACKAGE_FIND_VERSION_MAJOR LESS @OpenSSL_VERSION_MAJOR@ + OR PACKAGE_FIND_VERSION VERSION_GREATER @OpenSSL_VERSION@) + set(PACKAGE_VERSION_UNSUITABLE 1) +else() + set(PACKAGE_VERSION_COMPATIBLE 1) + if(PACKAGE_FIND_VERSION VERSION_EQUAL @OpenSSL_VERSION@) + set(PACKAGE_VERSION_EXACT 1) + endif() +endif()