diff --git a/cmake/CreateRegression.cmake b/cmake/CreateRegression.cmake --- a/cmake/CreateRegression.cmake +++ b/cmake/CreateRegression.cmake @@ -3,20 +3,15 @@ # 'ctest'. The first is prefered, as it is more verbose, and takes care of # dependencies correctly. # -# create_regression() +# create_regression(file1 ...) # macro(create_regression) - # Find all the files in the regression folder; they need to be copied to the - # build folder before we can run the regression - file(GLOB_RECURSE REGRESSION_SOURCE_FILES ${CMAKE_SOURCE_DIR}/regression/*) + set(REGRESSION_SOURCE_FILES ${ARGN}) + foreach(REGRESSION_SOURCE_FILE IN LISTS REGRESSION_SOURCE_FILES) string(REPLACE "${CMAKE_SOURCE_DIR}/regression/" "" REGRESSION_SOURCE_FILE_NAME "${REGRESSION_SOURCE_FILE}") string(CONCAT REGRESSION_BINARY_FILE "${CMAKE_BINARY_DIR}/ai/" "${REGRESSION_SOURCE_FILE_NAME}") - if("${REGRESSION_SOURCE_FILE_NAME}" STREQUAL "regression.cfg") - continue() - endif() - add_custom_command(OUTPUT ${REGRESSION_BINARY_FILE} COMMAND ${CMAKE_COMMAND} -E copy ${REGRESSION_SOURCE_FILE} @@ -28,59 +23,36 @@ macro(create_regression) list(APPEND REGRESSION_BINARY_FILES ${REGRESSION_BINARY_FILE}) endforeach() - # Copy the regression configuration in a special folder, so all autogenerated - # folders end up in the same place after running regression. - add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/regression/regression.cfg - COMMAND ${CMAKE_COMMAND} -E copy - ${CMAKE_SOURCE_DIR}/regression/regression.cfg - ${CMAKE_BINARY_DIR}/regression/regression.cfg - MAIN_DEPENDENCY ${CMAKE_SOURCE_DIR}/regression/regression.cfg - COMMENT "Copying ${REGRESSION_SOURCE_FILE_NAME} regression file" - ) - list(APPEND REGRESSION_BINARY_FILES ${CMAKE_BINARY_DIR}/regression/regression.cfg) + get_filename_component(REGRESSION_TEST_NAME "${CMAKE_CURRENT_SOURCE_DIR}" NAME) - # Create a new target which copies all regression files - add_custom_target(regression_files - ALL # this is needed because 'make test' doesn't resolve dependencies, and otherwise this is never executed + # Create a new target which copies regression files + add_custom_target(regression_${REGRESSION_TEST_NAME}_files DEPENDS ${REGRESSION_BINARY_FILES} ) - enable_testing() + add_dependencies(regression_files regression_${REGRESSION_TEST_NAME}_files) - # Find all the tests we have, and create a target for them - file(GLOB REGRESSION_TESTS ${CMAKE_SOURCE_DIR}/regression/*) - foreach(REGRESSION_TEST IN LISTS REGRESSION_TESTS) - get_filename_component(REGRESSION_TEST_NAME "${REGRESSION_TEST}" NAME) - - if("${REGRESSION_TEST_NAME}" STREQUAL "regression.cfg") - continue() - endif() + add_custom_target(regression_${REGRESSION_TEST_NAME} + COMMAND ${CMAKE_COMMAND} + -DOPENTTD_EXECUTABLE=$ + -DEDITBIN_EXECUTABLE=${EDITBIN_EXECUTABLE} + -DREGRESSION_TEST=${REGRESSION_TEST_NAME} + -P "${CMAKE_SOURCE_DIR}/cmake/scripts/Regression.cmake" + DEPENDS openttd regression_${REGRESSION_TEST_NAME}_files + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + COMMENT "Running regression test ${REGRESSION_TEST_NAME}" + ) - add_custom_target(regression_${REGRESSION_TEST_NAME} - COMMAND ${CMAKE_COMMAND} - -DOPENTTD_EXECUTABLE=$ - -DEDITBIN_EXECUTABLE=${EDITBIN_EXECUTABLE} - -DREGRESSION_TEST=${REGRESSION_TEST_NAME} - -P "${CMAKE_SOURCE_DIR}/cmake/scripts/Regression.cmake" - DEPENDS openttd regression_files - WORKING_DIRECTORY ${CMAKE_BINARY_DIR} - COMMENT "Running regression test ${REGRESSION_TEST_NAME}" - ) + # Also make sure that 'make test' runs the regression + add_test(NAME regression_${REGRESSION_TEST_NAME} + COMMAND ${CMAKE_COMMAND} + -DOPENTTD_EXECUTABLE=$ + -DEDITBIN_EXECUTABLE=${EDITBIN_EXECUTABLE} + -DREGRESSION_TEST=${REGRESSION_TEST_NAME} + -P "${CMAKE_SOURCE_DIR}/cmake/scripts/Regression.cmake" + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + ) - # Also make sure that 'make test' runs the regression - add_test(NAME regression_${REGRESSION_TEST_NAME} - COMMAND ${CMAKE_COMMAND} - -DOPENTTD_EXECUTABLE=$ - -DEDITBIN_EXECUTABLE=${EDITBIN_EXECUTABLE} - -DREGRESSION_TEST=${REGRESSION_TEST_NAME} - -P "${CMAKE_SOURCE_DIR}/cmake/scripts/Regression.cmake" - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) - - list(APPEND REGRESSION_TARGETS regression_${REGRESSION_TEST_NAME}) - endforeach() - - # Create a new target which runs the regression - add_custom_target(regression - DEPENDS ${REGRESSION_TARGETS}) + add_dependencies(regression regression_${REGRESSION_TEST_NAME}) endmacro()