1#*************************************************************************** 2# _ _ ____ _ 3# Project ___| | | | _ \| | 4# / __| | | | |_) | | 5# | (__| |_| | _ <| |___ 6# \___|\___/|_| \_\_____| 7# 8# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al. 9# 10# This software is licensed as described in the file COPYING, which 11# you should have received as part of this distribution. The terms 12# are also available at https://curl.se/docs/copyright.html. 13# 14# You may opt to use, copy, modify, merge, publish, distribute and/or sell 15# copies of the Software, and permit persons to whom the Software is 16# furnished to do so, under the terms of the COPYING file. 17# 18# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY 19# KIND, either express or implied. 20# 21# SPDX-License-Identifier: curl 22# 23########################################################################### 24option(CURL_TEST_BUNDLES "Bundle libtest and unittest tests into single binaries" OFF) 25 26find_program(TEST_NGHTTPX "nghttpx") 27if(NOT TEST_NGHTTPX) 28 set(TEST_NGHTTPX "nghttpx") 29endif() 30mark_as_advanced(TEST_NGHTTPX) 31# Consumed variables: TEST_NGHTTPX 32configure_file("config.in" "${CMAKE_CURRENT_BINARY_DIR}/config" @ONLY) 33 34add_custom_target(testdeps) 35add_subdirectory(http) 36add_subdirectory(http/clients) 37add_subdirectory(server) 38add_subdirectory(libtest) 39add_subdirectory(unit) 40add_subdirectory(certs EXCLUDE_FROM_ALL) 41 42function(curl_add_runtests _targetname _test_flags) 43 if(CURL_TEST_BUNDLES) 44 set(_test_flags "${_test_flags} -bundle") 45 endif() 46 if(NOT BUILD_LIBCURL_DOCS) 47 set(_test_flags "${_test_flags} !documentation") 48 endif() 49 # Skip walking through dependent targets before running tests in CI. 50 # This avoids: GNU Make doing a slow re-evaluation of all targets and 51 # skipping them, MSBuild doing a re-evaluation, and actually rebuilding them. 52 set(_depends "") 53 if(NOT _targetname STREQUAL "test-ci") 54 set(_depends "testdeps") 55 endif() 56 # Use a special '$TFLAGS' placeholder as last argument which will be 57 # replaced by the contents of the environment variable in runtests.pl. 58 # This is a workaround for CMake's limitation where commands executed by 59 # 'make' or 'ninja' cannot portably reference environment variables. 60 string(REPLACE " " ";" _test_flags_list "${_test_flags}") 61 add_custom_target(${_targetname} 62 COMMAND 63 "${PERL_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/runtests.pl" 64 ${_test_flags_list} 65 "\$TFLAGS" 66 DEPENDS "${_depends}" 67 VERBATIM USES_TERMINAL 68 ) 69endfunction() 70 71function(curl_add_pytests _targetname _test_flags) 72 set(_depends "") 73 if(NOT _targetname STREQUAL "pytest-ci") 74 set(_depends "test-http-clients") 75 endif() 76 string(REPLACE " " ";" _test_flags_list "${_test_flags}") 77 add_custom_target(${_targetname} 78 COMMAND pytest ${_test_flags_list} "${CMAKE_CURRENT_SOURCE_DIR}/http" 79 DEPENDS "${_depends}" 80 VERBATIM USES_TERMINAL 81 ) 82endfunction() 83 84# Create configurehelp.pm, used by tests needing to run the C preprocessor. 85if(MSVC OR CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang") 86 set(CURL_CPP "\"${CMAKE_C_COMPILER}\" -E") 87 if(APPLE AND CMAKE_OSX_SYSROOT) 88 set(CURL_CPP "${CURL_CPP} -isysroot ${CMAKE_OSX_SYSROOT}") 89 endif() 90 # Add header directories, like autotools builds do. 91 get_property(_include_dirs TARGET ${LIB_SELECTED} PROPERTY INCLUDE_DIRECTORIES) 92 foreach(_include_dir IN LISTS _include_dirs) 93 set(CURL_CPP "${CURL_CPP} -I${_include_dir}") 94 endforeach() 95else() 96 set(CURL_CPP "cpp") 97endif() 98# Generate version script for the linker, for versioned symbols. 99# Consumed variable: 100# CURL_CPP 101configure_file( 102 "${CMAKE_CURRENT_SOURCE_DIR}/configurehelp.pm.in" 103 "${CMAKE_CURRENT_BINARY_DIR}/configurehelp.pm" @ONLY) 104 105curl_add_runtests(test-quiet "-a -s") 106curl_add_runtests(test-am "-a -am") 107curl_add_runtests(test-full "-a -p -r") 108# ~flaky means that it ignores results of tests using the flaky keyword 109curl_add_runtests(test-nonflaky "-a -p ~flaky ~timing-dependent") 110curl_add_runtests(test-ci "-a -p ~flaky ~timing-dependent -r -rm -j20") 111curl_add_runtests(test-torture "-a -t -j20") 112curl_add_runtests(test-event "-a -e") 113 114curl_add_pytests(curl-pytest "") 115curl_add_pytests(curl-pytest-ci "-v") 116