From 82b09f9b3aae97f641fbcc2d746d2a6383abe857 Mon Sep 17 00:00:00 2001 From: Jiwoo Park Date: Fri, 29 Mar 2024 07:30:20 +0900 Subject: [PATCH] cmake: use the imported target of FindOpenSSL module (#1322) * Use the imported target of FindOpenSSL module * Build libssh2 before test runner * Use find_package() in the CMake config file * Use find_dependency() rather than find_package() * Install CMake module files and use them in the config file * Use elseif() to choose the crypto backend --- CMakeLists.txt | 2 +- cmake/libssh2-config.cmake.in | 17 +++++++++++++++++ src/CMakeLists.txt | 8 ++++++-- tests/CMakeLists.txt | 1 + 4 files changed, 25 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4ac44a0a..aa2535cf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -303,7 +303,7 @@ if(CRYPTO_BACKEND STREQUAL "OpenSSL" OR NOT CRYPTO_BACKEND) set(CRYPTO_BACKEND "OpenSSL") set(CRYPTO_BACKEND_DEFINE "LIBSSH2_OPENSSL") set(CRYPTO_BACKEND_INCLUDE_DIR ${OPENSSL_INCLUDE_DIR}) - list(APPEND LIBRARIES ${OPENSSL_LIBRARIES}) + list(APPEND LIBRARIES OpenSSL::SSL) list(APPEND LIBSSH2_PC_LIBS_PRIVATE "-lcrypto") list(APPEND LIBSSH2_PC_REQUIRES_PRIVATE "libcrypto") diff --git a/cmake/libssh2-config.cmake.in b/cmake/libssh2-config.cmake.in index 27ef5ec3..3cd37dfb 100644 --- a/cmake/libssh2-config.cmake.in +++ b/cmake/libssh2-config.cmake.in @@ -1,6 +1,23 @@ # Copyright (C) The libssh2 project and its contributors. # SPDX-License-Identifier: BSD-3-Clause +include(CMakeFindDependencyMacro) +list(PREPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}) + +if("@CRYPTO_BACKEND@" STREQUAL "OpenSSL") + find_dependency(OpenSSL) +elseif("@CRYPTO_BACKEND@" STREQUAL "wolfSSL") + find_package(wolfssl) +elseif("@CRYPTO_BACKEND@" STREQUAL "Libgcrypt") + find_package(Libgcrypt) +elseif("@CRYPTO_BACKEND@" STREQUAL "mbedTLS") + find_package(mbedTLS) +endif() + +if(@ZLIB_FOUND@) + find_dependency(ZLIB) +endif() + include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@-targets.cmake") # Alias for either shared or static library diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index bca1b23d..483ac3e0 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -185,10 +185,14 @@ install(EXPORT "${PROJECT_NAME}-targets" export(TARGETS ${libssh2_export} NAMESPACE "${PROJECT_NAME}::" FILE "${PROJECT_NAME}-targets.cmake") export(PACKAGE ${PROJECT_NAME}) # register it -# Generate libssh2-config.cmake into build tree and install it +# Generate libssh2-config.cmake into build tree and install it with dependencies configure_file("${PROJECT_SOURCE_DIR}/cmake/libssh2-config.cmake.in" "${PROJECT_NAME}-config.cmake" @ONLY) install( - FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake" + FILES + "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake" + "${PROJECT_SOURCE_DIR}/cmake/FindLibgcrypt.cmake" + "${PROJECT_SOURCE_DIR}/cmake/FindmbedTLS.cmake" + "${PROJECT_SOURCE_DIR}/cmake/Findwolfssl.cmake" DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}") ## Export a .pc file for client projects not using CMaek diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 41500045..84e57f0f 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -73,6 +73,7 @@ endif() add_library(runner STATIC ${librunner_la_SOURCES}) target_compile_definitions(runner PRIVATE "${CRYPTO_BACKEND_DEFINE}") target_include_directories(runner PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/../src" "../src" "../include" "${CRYPTO_BACKEND_INCLUDE_DIR}") +target_link_libraries(runner PRIVATE libssh2) foreach(test IN LISTS DOCKER_TESTS STANDALONE_TESTS SSHD_TESTS) if(NOT ";${DOCKER_TESTS_STATIC};${STANDALONE_TESTS_STATIC};" MATCHES ";${test};")