1*62c56f98SSadaf Ebrahimiset(libs 2*62c56f98SSadaf Ebrahimi ${mbedtls_target} 3*62c56f98SSadaf Ebrahimi) 4*62c56f98SSadaf Ebrahimi 5*62c56f98SSadaf Ebrahimi# Set the project root directory if it's not already defined, as may happen if 6*62c56f98SSadaf Ebrahimi# the tests folder is included directly by a parent project, without including 7*62c56f98SSadaf Ebrahimi# the top level CMakeLists.txt. 8*62c56f98SSadaf Ebrahimiif(NOT DEFINED MBEDTLS_DIR) 9*62c56f98SSadaf Ebrahimi set(MBEDTLS_DIR ${CMAKE_SOURCE_DIR}) 10*62c56f98SSadaf Ebrahimiendif() 11*62c56f98SSadaf Ebrahimi 12*62c56f98SSadaf Ebrahimiif(NOT MBEDTLS_PYTHON_EXECUTABLE) 13*62c56f98SSadaf Ebrahimi message(FATAL_ERROR "Cannot build test suites without Python 3") 14*62c56f98SSadaf Ebrahimiendif() 15*62c56f98SSadaf Ebrahimi 16*62c56f98SSadaf Ebrahimi# generated .data files will go there 17*62c56f98SSadaf Ebrahimifile(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/suites) 18*62c56f98SSadaf Ebrahimi 19*62c56f98SSadaf Ebrahimi# Get base names for generated files 20*62c56f98SSadaf Ebrahimiexecute_process( 21*62c56f98SSadaf Ebrahimi COMMAND 22*62c56f98SSadaf Ebrahimi ${MBEDTLS_PYTHON_EXECUTABLE} 23*62c56f98SSadaf Ebrahimi ${CMAKE_CURRENT_SOURCE_DIR}/../tests/scripts/generate_bignum_tests.py 24*62c56f98SSadaf Ebrahimi --list-for-cmake 25*62c56f98SSadaf Ebrahimi WORKING_DIRECTORY 26*62c56f98SSadaf Ebrahimi ${CMAKE_CURRENT_SOURCE_DIR}/.. 27*62c56f98SSadaf Ebrahimi OUTPUT_VARIABLE 28*62c56f98SSadaf Ebrahimi base_bignum_generated_data_files) 29*62c56f98SSadaf Ebrahimistring(REGEX REPLACE "[^;]*/" "" 30*62c56f98SSadaf Ebrahimi base_bignum_generated_data_files "${base_bignum_generated_data_files}") 31*62c56f98SSadaf Ebrahimi 32*62c56f98SSadaf Ebrahimiexecute_process( 33*62c56f98SSadaf Ebrahimi COMMAND 34*62c56f98SSadaf Ebrahimi ${MBEDTLS_PYTHON_EXECUTABLE} 35*62c56f98SSadaf Ebrahimi ${CMAKE_CURRENT_SOURCE_DIR}/../tests/scripts/generate_ecp_tests.py 36*62c56f98SSadaf Ebrahimi --list-for-cmake 37*62c56f98SSadaf Ebrahimi WORKING_DIRECTORY 38*62c56f98SSadaf Ebrahimi ${CMAKE_CURRENT_SOURCE_DIR}/.. 39*62c56f98SSadaf Ebrahimi OUTPUT_VARIABLE 40*62c56f98SSadaf Ebrahimi base_ecp_generated_data_files) 41*62c56f98SSadaf Ebrahimistring(REGEX REPLACE "[^;]*/" "" 42*62c56f98SSadaf Ebrahimi base_ecp_generated_data_files "${base_ecp_generated_data_files}") 43*62c56f98SSadaf Ebrahimi 44*62c56f98SSadaf Ebrahimiexecute_process( 45*62c56f98SSadaf Ebrahimi COMMAND 46*62c56f98SSadaf Ebrahimi ${MBEDTLS_PYTHON_EXECUTABLE} 47*62c56f98SSadaf Ebrahimi ${CMAKE_CURRENT_SOURCE_DIR}/../tests/scripts/generate_psa_tests.py 48*62c56f98SSadaf Ebrahimi --list-for-cmake 49*62c56f98SSadaf Ebrahimi WORKING_DIRECTORY 50*62c56f98SSadaf Ebrahimi ${CMAKE_CURRENT_SOURCE_DIR}/.. 51*62c56f98SSadaf Ebrahimi OUTPUT_VARIABLE 52*62c56f98SSadaf Ebrahimi base_psa_generated_data_files) 53*62c56f98SSadaf Ebrahimistring(REGEX REPLACE "[^;]*/" "" 54*62c56f98SSadaf Ebrahimi base_psa_generated_data_files "${base_psa_generated_data_files}") 55*62c56f98SSadaf Ebrahimi 56*62c56f98SSadaf Ebrahimi# Derive generated file paths in the build directory. The generated data 57*62c56f98SSadaf Ebrahimi# files go into the suites/ subdirectory. 58*62c56f98SSadaf Ebrahimiset(base_generated_data_files 59*62c56f98SSadaf Ebrahimi ${base_bignum_generated_data_files} ${base_ecp_generated_data_files} ${base_psa_generated_data_files}) 60*62c56f98SSadaf Ebrahimistring(REGEX REPLACE "([^;]+)" "suites/\\1" 61*62c56f98SSadaf Ebrahimi all_generated_data_files "${base_generated_data_files}") 62*62c56f98SSadaf Ebrahimiset(bignum_generated_data_files "") 63*62c56f98SSadaf Ebrahimiset(ecp_generated_data_files "") 64*62c56f98SSadaf Ebrahimiset(psa_generated_data_files "") 65*62c56f98SSadaf Ebrahimiforeach(file ${base_bignum_generated_data_files}) 66*62c56f98SSadaf Ebrahimi list(APPEND bignum_generated_data_files ${CMAKE_CURRENT_BINARY_DIR}/suites/${file}) 67*62c56f98SSadaf Ebrahimiendforeach() 68*62c56f98SSadaf Ebrahimiforeach(file ${base_ecp_generated_data_files}) 69*62c56f98SSadaf Ebrahimi list(APPEND ecp_generated_data_files ${CMAKE_CURRENT_BINARY_DIR}/suites/${file}) 70*62c56f98SSadaf Ebrahimiendforeach() 71*62c56f98SSadaf Ebrahimiforeach(file ${base_psa_generated_data_files}) 72*62c56f98SSadaf Ebrahimi list(APPEND psa_generated_data_files ${CMAKE_CURRENT_BINARY_DIR}/suites/${file}) 73*62c56f98SSadaf Ebrahimiendforeach() 74*62c56f98SSadaf Ebrahimi 75*62c56f98SSadaf Ebrahimiif(GEN_FILES) 76*62c56f98SSadaf Ebrahimi add_custom_command( 77*62c56f98SSadaf Ebrahimi OUTPUT 78*62c56f98SSadaf Ebrahimi ${bignum_generated_data_files} 79*62c56f98SSadaf Ebrahimi WORKING_DIRECTORY 80*62c56f98SSadaf Ebrahimi ${CMAKE_CURRENT_SOURCE_DIR}/.. 81*62c56f98SSadaf Ebrahimi COMMAND 82*62c56f98SSadaf Ebrahimi ${MBEDTLS_PYTHON_EXECUTABLE} 83*62c56f98SSadaf Ebrahimi ${CMAKE_CURRENT_SOURCE_DIR}/../tests/scripts/generate_bignum_tests.py 84*62c56f98SSadaf Ebrahimi --directory ${CMAKE_CURRENT_BINARY_DIR}/suites 85*62c56f98SSadaf Ebrahimi DEPENDS 86*62c56f98SSadaf Ebrahimi ${CMAKE_CURRENT_SOURCE_DIR}/../tests/scripts/generate_bignum_tests.py 87*62c56f98SSadaf Ebrahimi ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/mbedtls_dev/bignum_common.py 88*62c56f98SSadaf Ebrahimi ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/mbedtls_dev/bignum_core.py 89*62c56f98SSadaf Ebrahimi ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/mbedtls_dev/bignum_mod_raw.py 90*62c56f98SSadaf Ebrahimi ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/mbedtls_dev/bignum_mod.py 91*62c56f98SSadaf Ebrahimi ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/mbedtls_dev/test_case.py 92*62c56f98SSadaf Ebrahimi ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/mbedtls_dev/test_data_generation.py 93*62c56f98SSadaf Ebrahimi ) 94*62c56f98SSadaf Ebrahimi add_custom_command( 95*62c56f98SSadaf Ebrahimi OUTPUT 96*62c56f98SSadaf Ebrahimi ${ecp_generated_data_files} 97*62c56f98SSadaf Ebrahimi WORKING_DIRECTORY 98*62c56f98SSadaf Ebrahimi ${CMAKE_CURRENT_SOURCE_DIR}/.. 99*62c56f98SSadaf Ebrahimi COMMAND 100*62c56f98SSadaf Ebrahimi ${MBEDTLS_PYTHON_EXECUTABLE} 101*62c56f98SSadaf Ebrahimi ${CMAKE_CURRENT_SOURCE_DIR}/../tests/scripts/generate_ecp_tests.py 102*62c56f98SSadaf Ebrahimi --directory ${CMAKE_CURRENT_BINARY_DIR}/suites 103*62c56f98SSadaf Ebrahimi DEPENDS 104*62c56f98SSadaf Ebrahimi ${CMAKE_CURRENT_SOURCE_DIR}/../tests/scripts/generate_ecp_tests.py 105*62c56f98SSadaf Ebrahimi ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/mbedtls_dev/bignum_common.py 106*62c56f98SSadaf Ebrahimi ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/mbedtls_dev/ecp.py 107*62c56f98SSadaf Ebrahimi ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/mbedtls_dev/test_case.py 108*62c56f98SSadaf Ebrahimi ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/mbedtls_dev/test_data_generation.py 109*62c56f98SSadaf Ebrahimi ) 110*62c56f98SSadaf Ebrahimi add_custom_command( 111*62c56f98SSadaf Ebrahimi OUTPUT 112*62c56f98SSadaf Ebrahimi ${psa_generated_data_files} 113*62c56f98SSadaf Ebrahimi WORKING_DIRECTORY 114*62c56f98SSadaf Ebrahimi ${CMAKE_CURRENT_SOURCE_DIR}/.. 115*62c56f98SSadaf Ebrahimi COMMAND 116*62c56f98SSadaf Ebrahimi ${MBEDTLS_PYTHON_EXECUTABLE} 117*62c56f98SSadaf Ebrahimi ${CMAKE_CURRENT_SOURCE_DIR}/../tests/scripts/generate_psa_tests.py 118*62c56f98SSadaf Ebrahimi --directory ${CMAKE_CURRENT_BINARY_DIR}/suites 119*62c56f98SSadaf Ebrahimi DEPENDS 120*62c56f98SSadaf Ebrahimi ${CMAKE_CURRENT_SOURCE_DIR}/../tests/scripts/generate_psa_tests.py 121*62c56f98SSadaf Ebrahimi ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/mbedtls_dev/crypto_data_tests.py 122*62c56f98SSadaf Ebrahimi ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/mbedtls_dev/crypto_knowledge.py 123*62c56f98SSadaf Ebrahimi ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/mbedtls_dev/macro_collector.py 124*62c56f98SSadaf Ebrahimi ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/mbedtls_dev/psa_information.py 125*62c56f98SSadaf Ebrahimi ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/mbedtls_dev/psa_storage.py 126*62c56f98SSadaf Ebrahimi ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/mbedtls_dev/test_case.py 127*62c56f98SSadaf Ebrahimi ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/mbedtls_dev/test_data_generation.py 128*62c56f98SSadaf Ebrahimi ${CMAKE_CURRENT_SOURCE_DIR}/../include/psa/crypto_config.h 129*62c56f98SSadaf Ebrahimi ${CMAKE_CURRENT_SOURCE_DIR}/../include/psa/crypto_values.h 130*62c56f98SSadaf Ebrahimi ${CMAKE_CURRENT_SOURCE_DIR}/../include/psa/crypto_extra.h 131*62c56f98SSadaf Ebrahimi ) 132*62c56f98SSadaf Ebrahimi 133*62c56f98SSadaf Ebrahimielse() 134*62c56f98SSadaf Ebrahimi foreach(file ${all_generated_data_files}) 135*62c56f98SSadaf Ebrahimi link_to_source(${file}) 136*62c56f98SSadaf Ebrahimi endforeach() 137*62c56f98SSadaf Ebrahimiendif() 138*62c56f98SSadaf Ebrahimi# CMake generates sub-makefiles for each target and calls them in subprocesses. 139*62c56f98SSadaf Ebrahimi# Without this command, cmake will generate rules in each sub-makefile. As a result, 140*62c56f98SSadaf Ebrahimi# they can cause race conditions in parallel builds. 141*62c56f98SSadaf Ebrahimi# With this line, only 4 sub-makefiles include the above command, that reduces 142*62c56f98SSadaf Ebrahimi# the risk of a race. 143*62c56f98SSadaf Ebrahimiadd_custom_target(test_suite_bignum_generated_data DEPENDS ${bignum_generated_data_files}) 144*62c56f98SSadaf Ebrahimiadd_custom_target(test_suite_ecp_generated_data DEPENDS ${ecp_generated_data_files}) 145*62c56f98SSadaf Ebrahimiadd_custom_target(test_suite_psa_generated_data DEPENDS ${psa_generated_data_files}) 146*62c56f98SSadaf Ebrahimi# If SKIP_TEST_SUITES is not defined with -D, get it from the environment. 147*62c56f98SSadaf Ebrahimiif((NOT DEFINED SKIP_TEST_SUITES) AND (DEFINED ENV{SKIP_TEST_SUITES})) 148*62c56f98SSadaf Ebrahimi set(SKIP_TEST_SUITES $ENV{SKIP_TEST_SUITES}) 149*62c56f98SSadaf Ebrahimiendif() 150*62c56f98SSadaf Ebrahimi# Test suites caught by SKIP_TEST_SUITES are built but not executed. 151*62c56f98SSadaf Ebrahimi# "foo" as a skip pattern skips "test_suite_foo" and "test_suite_foo.bar" 152*62c56f98SSadaf Ebrahimi# but not "test_suite_foobar". 153*62c56f98SSadaf Ebrahimistring(REGEX REPLACE "[ ,;]" "|" SKIP_TEST_SUITES_REGEX "${SKIP_TEST_SUITES}") 154*62c56f98SSadaf Ebrahimistring(REPLACE "." "\\." SKIP_TEST_SUITES_REGEX "${SKIP_TEST_SUITES_REGEX}") 155*62c56f98SSadaf Ebrahimiset(SKIP_TEST_SUITES_REGEX "^(${SKIP_TEST_SUITES_REGEX})(\$|\\.)") 156*62c56f98SSadaf Ebrahimi 157*62c56f98SSadaf Ebrahimifunction(add_test_suite suite_name) 158*62c56f98SSadaf Ebrahimi if(ARGV1) 159*62c56f98SSadaf Ebrahimi set(data_name ${ARGV1}) 160*62c56f98SSadaf Ebrahimi else() 161*62c56f98SSadaf Ebrahimi set(data_name ${suite_name}) 162*62c56f98SSadaf Ebrahimi endif() 163*62c56f98SSadaf Ebrahimi 164*62c56f98SSadaf Ebrahimi # Get the test names of the tests with generated .data files 165*62c56f98SSadaf Ebrahimi # from the generated_data_files list in parent scope. 166*62c56f98SSadaf Ebrahimi set(bignum_generated_data_names "") 167*62c56f98SSadaf Ebrahimi set(ecp_generated_data_names "") 168*62c56f98SSadaf Ebrahimi set(psa_generated_data_names "") 169*62c56f98SSadaf Ebrahimi foreach(generated_data_file ${bignum_generated_data_files}) 170*62c56f98SSadaf Ebrahimi # Get the plain filename 171*62c56f98SSadaf Ebrahimi get_filename_component(generated_data_name ${generated_data_file} NAME) 172*62c56f98SSadaf Ebrahimi # Remove the ".data" extension 173*62c56f98SSadaf Ebrahimi get_name_without_last_ext(generated_data_name ${generated_data_name}) 174*62c56f98SSadaf Ebrahimi # Remove leading "test_suite_" 175*62c56f98SSadaf Ebrahimi string(SUBSTRING ${generated_data_name} 11 -1 generated_data_name) 176*62c56f98SSadaf Ebrahimi list(APPEND bignum_generated_data_names ${generated_data_name}) 177*62c56f98SSadaf Ebrahimi endforeach() 178*62c56f98SSadaf Ebrahimi foreach(generated_data_file ${ecp_generated_data_files}) 179*62c56f98SSadaf Ebrahimi # Get the plain filename 180*62c56f98SSadaf Ebrahimi get_filename_component(generated_data_name ${generated_data_file} NAME) 181*62c56f98SSadaf Ebrahimi # Remove the ".data" extension 182*62c56f98SSadaf Ebrahimi get_name_without_last_ext(generated_data_name ${generated_data_name}) 183*62c56f98SSadaf Ebrahimi # Remove leading "test_suite_" 184*62c56f98SSadaf Ebrahimi string(SUBSTRING ${generated_data_name} 11 -1 generated_data_name) 185*62c56f98SSadaf Ebrahimi list(APPEND ecp_generated_data_names ${generated_data_name}) 186*62c56f98SSadaf Ebrahimi endforeach() 187*62c56f98SSadaf Ebrahimi foreach(generated_data_file ${psa_generated_data_files}) 188*62c56f98SSadaf Ebrahimi # Get the plain filename 189*62c56f98SSadaf Ebrahimi get_filename_component(generated_data_name ${generated_data_file} NAME) 190*62c56f98SSadaf Ebrahimi # Remove the ".data" extension 191*62c56f98SSadaf Ebrahimi get_name_without_last_ext(generated_data_name ${generated_data_name}) 192*62c56f98SSadaf Ebrahimi # Remove leading "test_suite_" 193*62c56f98SSadaf Ebrahimi string(SUBSTRING ${generated_data_name} 11 -1 generated_data_name) 194*62c56f98SSadaf Ebrahimi list(APPEND psa_generated_data_names ${generated_data_name}) 195*62c56f98SSadaf Ebrahimi endforeach() 196*62c56f98SSadaf Ebrahimi 197*62c56f98SSadaf Ebrahimi if(";${bignum_generated_data_names};" MATCHES ";${data_name};") 198*62c56f98SSadaf Ebrahimi set(data_file 199*62c56f98SSadaf Ebrahimi ${CMAKE_CURRENT_BINARY_DIR}/suites/test_suite_${data_name}.data) 200*62c56f98SSadaf Ebrahimi set(dependency test_suite_bignum_generated_data) 201*62c56f98SSadaf Ebrahimi elseif(";${ecp_generated_data_names};" MATCHES ";${data_name};") 202*62c56f98SSadaf Ebrahimi set(data_file 203*62c56f98SSadaf Ebrahimi ${CMAKE_CURRENT_BINARY_DIR}/suites/test_suite_${data_name}.data) 204*62c56f98SSadaf Ebrahimi set(dependency test_suite_ecp_generated_data) 205*62c56f98SSadaf Ebrahimi elseif(";${psa_generated_data_names};" MATCHES ";${data_name};") 206*62c56f98SSadaf Ebrahimi set(data_file 207*62c56f98SSadaf Ebrahimi ${CMAKE_CURRENT_BINARY_DIR}/suites/test_suite_${data_name}.data) 208*62c56f98SSadaf Ebrahimi set(dependency test_suite_psa_generated_data) 209*62c56f98SSadaf Ebrahimi else() 210*62c56f98SSadaf Ebrahimi set(data_file 211*62c56f98SSadaf Ebrahimi ${CMAKE_CURRENT_SOURCE_DIR}/suites/test_suite_${data_name}.data) 212*62c56f98SSadaf Ebrahimi set(dependency test_suite_bignum_generated_data test_suite_ecp_generated_data test_suite_psa_generated_data) 213*62c56f98SSadaf Ebrahimi endif() 214*62c56f98SSadaf Ebrahimi 215*62c56f98SSadaf Ebrahimi add_custom_command( 216*62c56f98SSadaf Ebrahimi OUTPUT 217*62c56f98SSadaf Ebrahimi # The output filename of generate_test_code.py is derived from the -d 218*62c56f98SSadaf Ebrahimi # input argument. 219*62c56f98SSadaf Ebrahimi test_suite_${data_name}.c 220*62c56f98SSadaf Ebrahimi COMMAND 221*62c56f98SSadaf Ebrahimi ${MBEDTLS_PYTHON_EXECUTABLE} 222*62c56f98SSadaf Ebrahimi ${CMAKE_CURRENT_SOURCE_DIR}/scripts/generate_test_code.py 223*62c56f98SSadaf Ebrahimi -f ${CMAKE_CURRENT_SOURCE_DIR}/suites/test_suite_${suite_name}.function 224*62c56f98SSadaf Ebrahimi -d ${data_file} 225*62c56f98SSadaf Ebrahimi -t ${CMAKE_CURRENT_SOURCE_DIR}/suites/main_test.function 226*62c56f98SSadaf Ebrahimi -p ${CMAKE_CURRENT_SOURCE_DIR}/suites/host_test.function 227*62c56f98SSadaf Ebrahimi -s ${CMAKE_CURRENT_SOURCE_DIR}/suites 228*62c56f98SSadaf Ebrahimi --helpers-file ${CMAKE_CURRENT_SOURCE_DIR}/suites/helpers.function 229*62c56f98SSadaf Ebrahimi -o . 230*62c56f98SSadaf Ebrahimi DEPENDS 231*62c56f98SSadaf Ebrahimi ${CMAKE_CURRENT_SOURCE_DIR}/scripts/generate_test_code.py 232*62c56f98SSadaf Ebrahimi ${CMAKE_CURRENT_SOURCE_DIR}/suites/test_suite_${suite_name}.function 233*62c56f98SSadaf Ebrahimi ${data_file} 234*62c56f98SSadaf Ebrahimi ${CMAKE_CURRENT_SOURCE_DIR}/suites/main_test.function 235*62c56f98SSadaf Ebrahimi ${CMAKE_CURRENT_SOURCE_DIR}/suites/host_test.function 236*62c56f98SSadaf Ebrahimi ${CMAKE_CURRENT_SOURCE_DIR}/suites/helpers.function 237*62c56f98SSadaf Ebrahimi ${mbedtls_target} 238*62c56f98SSadaf Ebrahimi BYPRODUCTS 239*62c56f98SSadaf Ebrahimi test_suite_${data_name}.datax 240*62c56f98SSadaf Ebrahimi ) 241*62c56f98SSadaf Ebrahimi 242*62c56f98SSadaf Ebrahimi add_executable(test_suite_${data_name} test_suite_${data_name}.c 243*62c56f98SSadaf Ebrahimi $<TARGET_OBJECTS:mbedtls_test> 244*62c56f98SSadaf Ebrahimi $<TARGET_OBJECTS:mbedtls_test_helpers>) 245*62c56f98SSadaf Ebrahimi add_dependencies(test_suite_${data_name} ${dependency}) 246*62c56f98SSadaf Ebrahimi target_link_libraries(test_suite_${data_name} ${libs}) 247*62c56f98SSadaf Ebrahimi # Include test-specific header files from ./include and private header 248*62c56f98SSadaf Ebrahimi # files (used by some invasive tests) from ../library. Public header 249*62c56f98SSadaf Ebrahimi # files are automatically included because the library targets declare 250*62c56f98SSadaf Ebrahimi # them as PUBLIC. 251*62c56f98SSadaf Ebrahimi target_include_directories(test_suite_${data_name} 252*62c56f98SSadaf Ebrahimi PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include 253*62c56f98SSadaf Ebrahimi PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../library) 254*62c56f98SSadaf Ebrahimi 255*62c56f98SSadaf Ebrahimi if(${data_name} MATCHES ${SKIP_TEST_SUITES_REGEX}) 256*62c56f98SSadaf Ebrahimi message(STATUS "The test suite ${data_name} will not be executed.") 257*62c56f98SSadaf Ebrahimi else() 258*62c56f98SSadaf Ebrahimi add_test(${data_name}-suite test_suite_${data_name} --verbose) 259*62c56f98SSadaf Ebrahimi endif() 260*62c56f98SSadaf Ebrahimiendfunction(add_test_suite) 261*62c56f98SSadaf Ebrahimi 262*62c56f98SSadaf Ebrahimi# Enable definition of various functions used throughout the testsuite 263*62c56f98SSadaf Ebrahimi# (gethostname, strdup, fileno...) even when compiling with -std=c99. Harmless 264*62c56f98SSadaf Ebrahimi# on non-POSIX platforms. 265*62c56f98SSadaf Ebrahimiadd_definitions("-D_POSIX_C_SOURCE=200809L") 266*62c56f98SSadaf Ebrahimi 267*62c56f98SSadaf Ebrahimiif(CMAKE_COMPILER_IS_CLANG) 268*62c56f98SSadaf Ebrahimi set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wdocumentation -Wno-documentation-deprecated-sync -Wunreachable-code") 269*62c56f98SSadaf Ebrahimiendif(CMAKE_COMPILER_IS_CLANG) 270*62c56f98SSadaf Ebrahimi 271*62c56f98SSadaf Ebrahimiif(MSVC) 272*62c56f98SSadaf Ebrahimi # If a warning level has been defined, suppress all warnings for test code 273*62c56f98SSadaf Ebrahimi set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W0") 274*62c56f98SSadaf Ebrahimi set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /WX-") 275*62c56f98SSadaf Ebrahimiendif(MSVC) 276*62c56f98SSadaf Ebrahimi 277*62c56f98SSadaf Ebrahimifile(GLOB test_suites RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" suites/*.data) 278*62c56f98SSadaf Ebrahimilist(APPEND test_suites ${all_generated_data_files}) 279*62c56f98SSadaf Ebrahimi# If the generated .data files are present in the source tree, we just added 280*62c56f98SSadaf Ebrahimi# them twice, both through GLOB and through ${all_generated_data_files}. 281*62c56f98SSadaf Ebrahimilist(REMOVE_DUPLICATES test_suites) 282*62c56f98SSadaf Ebrahimilist(SORT test_suites) 283*62c56f98SSadaf Ebrahimiforeach(test_suite ${test_suites}) 284*62c56f98SSadaf Ebrahimi get_filename_component(data_name ${test_suite} NAME) 285*62c56f98SSadaf Ebrahimi string(REGEX REPLACE "\\.data\$" "" data_name "${data_name}") 286*62c56f98SSadaf Ebrahimi string(REPLACE "test_suite_" "" data_name "${data_name}") 287*62c56f98SSadaf Ebrahimi string(REGEX MATCH "[^.]*" function_name "${data_name}") 288*62c56f98SSadaf Ebrahimi add_test_suite(${function_name} ${data_name}) 289*62c56f98SSadaf Ebrahimiendforeach(test_suite) 290*62c56f98SSadaf Ebrahimi 291*62c56f98SSadaf Ebrahimi# Make scripts and data files needed for testing available in an 292*62c56f98SSadaf Ebrahimi# out-of-source build. 293*62c56f98SSadaf Ebrahimiif (NOT ${CMAKE_CURRENT_BINARY_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}) 294*62c56f98SSadaf Ebrahimi if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/seedfile") 295*62c56f98SSadaf Ebrahimi link_to_source(seedfile) 296*62c56f98SSadaf Ebrahimi endif() 297*62c56f98SSadaf Ebrahimi link_to_source(Descriptions.txt) 298*62c56f98SSadaf Ebrahimi link_to_source(compat.sh) 299*62c56f98SSadaf Ebrahimi link_to_source(context-info.sh) 300*62c56f98SSadaf Ebrahimi link_to_source(data_files) 301*62c56f98SSadaf Ebrahimi link_to_source(scripts) 302*62c56f98SSadaf Ebrahimi link_to_source(ssl-opt.sh) 303*62c56f98SSadaf Ebrahimi link_to_source(opt-testcases) 304*62c56f98SSadaf Ebrahimiendif() 305