12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- #
- # Public Domain.
- #
- cmake_minimum_required(VERSION 2.4)
- function(dependenciesForFile file operations output)
- # If it's not in the top of the file, we'll just miss it.
- file(STRINGS "${file}" lines LIMIT_COUNT 16)
- foreach(line ${lines})
- if("${line}" MATCHES "#include ")
- foreach(op ${operations})
- if("${line}" MATCHES "${op}.h")
- list(APPEND outList "${op}")
- endif()
- endforeach()
- endif()
- endforeach()
- set(${output} "${outList}" PARENT_SCOPE)
- endfunction()
- include_directories(
- "${CMAKE_BINARY_DIR}/include/"
- "${CMAKE_BINARY_DIR}/include_internal/"
- )
- string(REGEX REPLACE "^.*/" "" main_dir_name ${CMAKE_SOURCE_DIR})
- string(REPLACE ${CMAKE_SOURCE_DIR} ${main_dir_name} this_dir ${CMAKE_CURRENT_SOURCE_DIR})
- message("-- Tests to run for " ${this_dir})
- add_definitions(-g)
- include("${CMAKE_SOURCE_DIR}/cmake/Primitives.cmake")
- file(STRINGS "${CMAKE_SOURCE_DIR}/OPERATIONS" OPERATIONS)
- Primitives_get("${OPERATIONS}" opPrimitives)
- # Anything in this dir which ends with ".c" is considered a test.
- file(GLOB tests "*.c")
- foreach(test_source_fullpath ${tests})
- string(REGEX REPLACE "^.*/" "" test_source ${test_source_fullpath})
- string(REPLACE ".c" "_test" test_bin ${test_source})
- set(allTests "")
- dependenciesForFile(${test_source_fullpath} "${OPERATIONS}" depends)
- foreach(op ${depends})
- foreach(opPrim ${opPrimitives})
- if(${opPrim} MATCHES "^${op}_.*")
- string(REPLACE "${op}_" "" primitive "${opPrim}")
- set(testPrimBin ${test_bin}_${primitive})
- add_executable(${testPrimBin} ${test_source})
- # Replace with target_include_directories when that branch is merged.
- set_property(TARGET ${testPrimBin} APPEND PROPERTY COMPILE_FLAGS
- "-I${CMAKE_BINARY_DIR}/${op}/${primitive}")
- target_link_libraries(${testPrimBin} randombytes nacl)
- add_test(${testPrimBin} ${testPrimBin})
- list(APPEND allTests ${testPrimBin})
- endif()
- endforeach()
- endforeach()
- if("${depends}" STREQUAL "")
- add_executable(${test_bin} ${test_source})
- target_link_libraries(${test_bin} nacl randombytes)
- add_test(${test_bin} ${test_bin})
- list(APPEND allTests ${test_bin})
- endif()
- # Get expected output.
- foreach(test ${allTests})
- string(REPLACE "_test" "" testOut "${test}")
- if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${testOut}.out")
- set(outFile "${CMAKE_CURRENT_SOURCE_DIR}/${testOut}.out")
- else()
- string(REPLACE "_test" ".out" outFile "${CMAKE_CURRENT_SOURCE_DIR}/${test_bin}")
- endif()
- file(READ ${outFile} test_output)
- set_tests_properties(${test} PROPERTIES PASS_REGULAR_EXPRESSION "^${test_output}$")
- endforeach()
- endforeach()
- # Add an empty line after tests.
- message("")
|