From bc2445e56e79137d42d8d173eaac650dbed5cddd Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Sun, 7 May 2023 23:34:22 +0000 Subject: [PATCH] cmake: allow tests with `BUILD_STATIC_LIBS=OFF` Before this patch, the CMake build did not allow to disable static libssh2 library while also building tests. This patch removes this constraint, and makes this combination possible. In this case the 3 (at the moment) tests that require a static libssh2 library, are skipped from the build and test runs. Cherry-picked from #1036 --- CMakeLists.txt | 2 +- tests/CMakeLists.txt | 44 ++++++++++++++++++++++++++++++-------------- 2 files changed, 31 insertions(+), 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a5803e59..f561828f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -112,7 +112,7 @@ endif() option(BUILD_EXAMPLES "Build libssh2 examples" ON) option(BUILD_TESTING "Build libssh2 test suite" ON) -if(NOT BUILD_STATIC_LIBS AND (NOT BUILD_SHARED_LIBS OR BUILD_TESTING)) +if(NOT BUILD_STATIC_LIBS AND NOT BUILD_SHARED_LIBS) set(BUILD_STATIC_LIBS ON) endif() diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 8c7dec3c..ea9e6856 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -77,21 +77,29 @@ set(TESTS_WITH_LIB_STATIC ) foreach(test ${DOCKER_TESTS} ${STANDALONE_TESTS} ${SSHD_TESTS}) + if(NOT ";${TESTS_WITH_LIB_STATIC};" MATCHES ";${test};") + set(LIB_FOR_TESTS ${LIB_SELECTED}) + elseif(TARGET ${LIB_STATIC}) + set(LIB_FOR_TESTS ${LIB_STATIC}) + else() + unset(LIB_FOR_TESTS) + message(STATUS "Skip test requiring static libssh2 lib: ${test}") + endif() + # We support the same target as both Docker and SSHD test. Build those just once. - if(NOT TARGET ${test}) + # Skip building tests that require the static lib when the static lib is disabled. + if(NOT TARGET ${test} AND LIB_FOR_TESTS) add_executable(${test} ${test}.c) target_compile_definitions(${test} PRIVATE "${CRYPTO_BACKEND_DEFINE}") target_include_directories(${test} PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/../src" ../src ../include "${CRYPTO_BACKEND_INCLUDE_DIR}") set_target_properties(${test} PROPERTIES UNITY_BUILD false) # build a single test with gcov - if(GCOV_PATH AND test STREQUAL test_auth_keyboard_info_request) + if(GCOV_PATH AND test STREQUAL test_auth_keyboard_info_request AND TARGET ${LIB_STATIC}) target_compile_options(${test} BEFORE PRIVATE ${GCOV_OPTIONS}) - target_link_libraries(${test} runner ${LIB_STATIC} ${LIBRARIES} gcov) - elseif(";${TESTS_WITH_LIB_STATIC};" MATCHES ";${test};") - target_link_libraries(${test} runner ${LIB_STATIC} ${LIBRARIES}) + target_link_libraries(${test} runner ${LIB_FOR_TESTS} ${LIBRARIES} gcov) else() - target_link_libraries(${test} runner ${LIB_SELECTED} ${LIBRARIES}) + target_link_libraries(${test} runner ${LIB_FOR_TESTS} ${LIBRARIES}) endif() list(APPEND TEST_TARGETS ${test}) @@ -102,25 +110,33 @@ option(RUN_DOCKER_TESTS "Run tests requiring Docker" ON) if(RUN_DOCKER_TESTS) foreach(test ${DOCKER_TESTS}) - add_test(NAME ${test} COMMAND $) - set_property(TEST ${test} APPEND PROPERTY ENVIRONMENT "srcdir=${CMAKE_CURRENT_SOURCE_DIR}") + if(TARGET ${test}) + add_test(NAME ${test} COMMAND $) + set_property(TEST ${test} APPEND PROPERTY ENVIRONMENT "srcdir=${CMAKE_CURRENT_SOURCE_DIR}") + endif() endforeach() endif() foreach(test ${STANDALONE_TESTS}) - add_test(NAME ${test} COMMAND $) - set_property(TEST ${test} APPEND PROPERTY ENVIRONMENT "srcdir=${CMAKE_CURRENT_SOURCE_DIR}") + if(TARGET ${test}) + add_test(NAME ${test} COMMAND $) + set_property(TEST ${test} APPEND PROPERTY ENVIRONMENT "srcdir=${CMAKE_CURRENT_SOURCE_DIR}") + endif() endforeach() if(RUN_SSHD_TESTS AND SSHD_EXECUTABLE) unset(sshd_test_targets) foreach(test ${SSHD_TESTS}) - set(sshd_test_targets "${sshd_test_targets} $") + if(TARGET ${test}) + set(sshd_test_targets "${sshd_test_targets} $") + endif() endforeach() - add_test(NAME test_sshd COMMAND ${SH_EXECUTABLE} -c "${CMAKE_CURRENT_SOURCE_DIR}/test_sshd.test ${sshd_test_targets}") - set_property(TEST test_sshd APPEND PROPERTY ENVIRONMENT "srcdir=${CMAKE_CURRENT_SOURCE_DIR}") - set_property(TEST test_sshd APPEND PROPERTY ENVIRONMENT "SSHD=${SSHD_EXECUTABLE}") + if(sshd_test_targets) + add_test(NAME test_sshd COMMAND ${SH_EXECUTABLE} -c "${CMAKE_CURRENT_SOURCE_DIR}/test_sshd.test ${sshd_test_targets}") + set_property(TEST test_sshd APPEND PROPERTY ENVIRONMENT "srcdir=${CMAKE_CURRENT_SOURCE_DIR}") + set_property(TEST test_sshd APPEND PROPERTY ENVIRONMENT "SSHD=${SSHD_EXECUTABLE}") + endif() endif() if(RUN_DOCKER_TESTS)