87 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			CMake
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			CMake
		
	
	
	
	
	
| # Macro which contains all bits and pieces to create the regression tests.
 | |
| # This creates both a standalone target 'regression', and it integrates with
 | |
| # 'ctest'. The first is prefered, as it is more verbose, and takes care of
 | |
| # dependencies correctly.
 | |
| #
 | |
| # create_regression()
 | |
| #
 | |
| 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/*)
 | |
|     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}
 | |
|                         ${REGRESSION_BINARY_FILE}
 | |
|                 MAIN_DEPENDENCY ${REGRESSION_SOURCE_FILE}
 | |
|                 COMMENT "Copying ${REGRESSION_SOURCE_FILE_NAME} regression file"
 | |
|         )
 | |
| 
 | |
|         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)
 | |
| 
 | |
|     # 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
 | |
|             DEPENDS
 | |
|             ${REGRESSION_BINARY_FILES}
 | |
|     )
 | |
| 
 | |
|     enable_testing()
 | |
| 
 | |
|     # 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=$<TARGET_FILE:openttd>
 | |
|                         -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=$<TARGET_FILE:openttd>
 | |
|                         -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})
 | |
| endmacro()
 | 
