From 771dc30f790c4dba6a549c2d5b075684f081c3cc Mon Sep 17 00:00:00 2001 From: Davidwed Date: Tue, 3 Sep 2024 11:43:32 +0200 Subject: [PATCH] cmake: Fixed compatibility issues with "CPM.cmake" in combination with the libraries MBedTLS and libgcrypt. Signed-off-by: Davidwed Reviewed-by: Jakub Jelen (cherry picked from commit 7712c7d0f97241c68e520d600b5857ebfcfd7439) --- cmake/Modules/FindGCrypt.cmake | 37 ++++++++++++++++++++++++++++++--- cmake/Modules/FindMbedTLS.cmake | 29 ++++++++++++++++++++++++++ src/CMakeLists.txt | 27 +++++++----------------- 3 files changed, 70 insertions(+), 23 deletions(-) diff --git a/cmake/Modules/FindGCrypt.cmake b/cmake/Modules/FindGCrypt.cmake index b1f73d81..e28cb846 100644 --- a/cmake/Modules/FindGCrypt.cmake +++ b/cmake/Modules/FindGCrypt.cmake @@ -39,6 +39,15 @@ find_path(GCRYPT_INCLUDE_DIR include ) +find_path(GCRYPT_ERROR_INCLUDE_DIR + NAMES + gpg-error.h + HINTS + ${_GCRYPT_ROOT_HINTS_AND_PATHS} + PATH_SUFFIXES + include +) + find_library(GCRYPT_LIBRARY NAMES gcrypt @@ -56,8 +65,10 @@ find_library(GCRYPT_ERROR_LIBRARY libgpg-error6-0 HINTS ${_GCRYPT_ROOT_HINTS_AND_PATHS} + PATH_SUFFIXES + lib ) -set(GCRYPT_LIBRARIES ${GCRYPT_LIBRARY} ${GCRYPT_ERROR_LIBRARY}) +set(GCRYPT_LIBRARIES ${GCRYPT_ERROR_LIBRARY} ${GCRYPT_LIBRARY}) if (GCRYPT_INCLUDE_DIR) file(STRINGS "${GCRYPT_INCLUDE_DIR}/gcrypt.h" _gcrypt_version_str REGEX "^#define GCRYPT_VERSION \"[0-9]+\\.[0-9]+\\.[0-9]") @@ -83,5 +94,25 @@ else (GCRYPT_VERSION) GCRYPT_LIBRARIES) endif (GCRYPT_VERSION) -# show the GCRYPT_INCLUDE_DIRS and GCRYPT_LIBRARIES variables only in the advanced view -mark_as_advanced(GCRYPT_INCLUDE_DIR GCRYPT_LIBRARIES) +# show the GCRYPT_INCLUDE_DIRS, GCRYPT_LIBRARIES and GCRYPT_ERROR_INCLUDE_DIR variables only in the advanced view +mark_as_advanced(GCRYPT_INCLUDE_DIR GCRYPT_ERROR_INCLUDE_DIR GCRYPT_LIBRARIES) + +if(GCRYPT_FOUND) + if(NOT TARGET libgcrypt::libgcrypt) + add_library(libgcrypt::libgcrypt UNKNOWN IMPORTED) + set_target_properties(libgcrypt::libgcrypt PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${GCRYPT_INCLUDE_DIR}" + INTERFACE_LINK_LIBRARIES libgcrypt::libgcrypt + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + IMPORTED_LOCATION "${GCRYPT_LIBRARY}") + endif() + + if(NOT TARGET libgpg-error::libgpg-error) + add_library(libgpg-error::libgpg-error UNKNOWN IMPORTED) + set_target_properties(libgpg-error::libgpg-error PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${GCRYPT_ERROR_INCLUDE_DIR}" + INTERFACE_LINK_LIBRARIES libgpg-error::libgpg-error + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + IMPORTED_LOCATION "${GCRYPT_ERROR_LIBRARY}") + endif() +endif() diff --git a/cmake/Modules/FindMbedTLS.cmake b/cmake/Modules/FindMbedTLS.cmake index 9f647028..67119ab8 100644 --- a/cmake/Modules/FindMbedTLS.cmake +++ b/cmake/Modules/FindMbedTLS.cmake @@ -110,3 +110,32 @@ endif (MBEDTLS_VERSION) # show the MBEDTLS_INCLUDE_DIRS and MBEDTLS_LIBRARIES variables only in the advanced view mark_as_advanced(MBEDTLS_INCLUDE_DIR MBEDTLS_LIBRARIES) + +if(MBEDTLS_FOUND) + if(NOT TARGET MbedTLS::mbedcrypto) + add_library(MbedTLS::mbedcrypto UNKNOWN IMPORTED) + set_target_properties(MbedTLS::mbedcrypto PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${MBEDTLS_INCLUDE_DIR}" + INTERFACE_LINK_LIBRARIES MbedTLS::mbedcrypto + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + IMPORTED_LOCATION "${MBEDTLS_CRYPTO_LIBRARY}") + endif() + + if(NOT TARGET MbedTLS::mbedx509) + add_library(MbedTLS::mbedx509 UNKNOWN IMPORTED) + set_target_properties(MbedTLS::mbedx509 PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${MBEDTLS_INCLUDE_DIR}" + INTERFACE_LINK_LIBRARIES MbedTLS::mbedx509 + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + IMPORTED_LOCATION "${MBEDTLS_X509_LIBRARY}") + endif() + + if(NOT TARGET MbedTLS::mbedtls) + add_library(MbedTLS::mbedtls UNKNOWN IMPORTED) + set_target_properties(MbedTLS::mbedtls PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${MBEDTLS_INCLUDE_DIR}" + INTERFACE_LINK_LIBRARIES MbedTLS::mbedtls + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + IMPORTED_LOCATION "${MBEDTLS_LIBRARY}") + endif() +endif() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 199acbd9..9096cbce 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,6 +1,7 @@ set(LIBSSH_PUBLIC_INCLUDE_DIRS ${libssh_SOURCE_DIR}/include) set(LIBSSH_PRIVATE_INCLUDE_DIRS + ${libssh_BINARY_DIR}/include ${libssh_BINARY_DIR} ) @@ -12,27 +13,13 @@ if (TARGET OpenSSL::Crypto) list(APPEND LIBSSH_LINK_LIBRARIES OpenSSL::Crypto) endif () -if (MBEDTLS_CRYPTO_LIBRARY) - set(LIBSSH_PRIVATE_INCLUDE_DIRS - ${LIBSSH_PRIVATE_INCLUDE_DIRS} - ${MBEDTLS_INCLUDE_DIR} - ) - set(LIBSSH_LINK_LIBRARIES - ${LIBSSH_LINK_LIBRARIES} - ${MBEDTLS_CRYPTO_LIBRARY} - ) -endif (MBEDTLS_CRYPTO_LIBRARY) +if (TARGET MbedTLS::mbedcrypto) + list(APPEND LIBSSH_LINK_LIBRARIES MbedTLS::mbedcrypto) +endif () -if (GCRYPT_LIBRARIES) - set(LIBSSH_PRIVATE_INCLUDE_DIRS - ${LIBSSH_PRIVATE_INCLUDE_DIRS} - ${GCRYPT_INCLUDE_DIR} - ) - - set(LIBSSH_LINK_LIBRARIES - ${LIBSSH_LINK_LIBRARIES} - ${GCRYPT_LIBRARIES}) -endif() +if (TARGET libgcrypt::libgcrypt) + list(APPEND LIBSSH_LINK_LIBRARIES ${GCRYPT_LIBRARIES}) +endif () if (WITH_ZLIB) list(APPEND LIBSSH_LINK_LIBRARIES ZLIB::ZLIB)