1
1
cmake_minimum_required (VERSION 3.23 )
2
- project (cppfront-regression-tests LANGUAGES NONE )
2
+ project (cppfront-regression-tests LANGUAGES CXX )
3
3
4
4
option (CPPFRONT_DEVELOPING "Test results are updated." )
5
5
@@ -10,7 +10,33 @@ find_package(cppfront REQUIRED)
10
10
11
11
set (REGRESSION_TESTS_DIR "${CMAKE_CURRENT_LIST_DIR} /../cppfront/regression-tests" )
12
12
13
+ if (CPPFRONT_DEVELOPING )
14
+ if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" )
15
+ set (compiler_id "gcc" )
16
+ elseif (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" )
17
+ set (compiler_id "apple-clang" )
18
+ else (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" )
19
+ string (TOLOWER "${CMAKE_CXX_COMPILER_ID} " compiler_id )
20
+ endif ()
21
+ string (REGEX MATCH "[0-9]+" compiler_version "${CMAKE_CXX_COMPILER_VERSION} " )
22
+
23
+ set (TEST_RESULTS_BUILD_DIR "${REGRESSION_TESTS_DIR} /test-results/${compiler_id} -${compiler_version} " )
24
+ file (MAKE_DIRECTORY "${TEST_RESULTS_BUILD_DIR} " )
25
+
26
+ if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang" )
27
+ set (compiler_version_command "${CMAKE_CXX_COMPILER} " "--version" )
28
+ endif ()
29
+ if (CMAKE_CXX_COMPILER_ID MATCHES "AppleClang" )
30
+ set (compiler_id "clang" )
31
+ endif ()
32
+ execute_process (
33
+ COMMAND ${compiler_version_command}
34
+ OUTPUT_FILE "${TEST_RESULTS_BUILD_DIR} /${compiler_id} -version.output"
35
+ )
36
+ endif ()
37
+
13
38
configure_file ("cmake/ExecuteWithRedirection.cmake" "ExecuteWithRedirection.cmake" COPYONLY )
39
+ configure_file ("cmake/ExecuteTestCase.cmake.in" "ExecuteTestCase.cmake" @ONLY )
14
40
15
41
function (cppfront_command_tests )
16
42
cmake_parse_arguments (PARSE_ARGV 0 ARG "" "SOURCE;EXPECTED_FILE" "EXTRA_FLAGS" )
@@ -106,6 +132,7 @@ function(cppfront_build_tests)
106
132
107
133
configure_file ("${REGRESSION_TESTS_DIR} /${ARG_SOURCE} " "${test_dir} /${ARG_SOURCE} " COPYONLY )
108
134
configure_file ("cmake/CMakeLists.txt.in" "${test_dir} /CMakeLists.txt" @ONLY )
135
+ configure_file ("cmake/test-case-config.cmake.in" "${test_dir} /test-case-config.cmake.in" COPYONLY )
109
136
110
137
add_test (
111
138
NAME "build/${test_name} "
@@ -119,8 +146,48 @@ function(cppfront_build_tests)
119
146
"-Dcppfront_DIR=${cppfront_DIR} "
120
147
"-Dcppfront-exe_DIR=${cppfront-exe_DIR}"
121
148
"-DCPPFRONT_FLAGS=${ARG_EXTRA_FLAGS} "
149
+ # There's `CMAKE_CXX_LINKER_LAUNCHER`, too. So far, it's not needed.
150
+ "-DCMAKE_CXX_COMPILER_LAUNCHER=${CMAKE_COMMAND} ;-D;OUTPUT_FILE=${gen_cpp_src} .output;-P;../../ExecuteWithRedirection.cmake;--"
122
151
)
123
- set_tests_properties ("build/${test_name} " PROPERTIES DEPENDS "${build_test_depends} ;codegen/check/${test_name} " )
152
+ set_tests_properties (
153
+ "build/${test_name} "
154
+ PROPERTIES
155
+ DEPENDS "${build_test_depends} ;codegen/check/${test_name} "
156
+ FIXTURES_SETUP "build/${test_name} "
157
+ )
158
+
159
+ if (CPPFRONT_DEVELOPING )
160
+ add_test (
161
+ NAME "build/execute/${test_name} "
162
+ COMMAND
163
+ "${CMAKE_COMMAND} "
164
+ -D "OUTPUT_FILE=${test_dir} /${gen_cpp_src} .execution"
165
+ -P "../ExecuteTestCase.cmake"
166
+ WORKING_DIRECTORY "${test_dir} "
167
+ )
168
+ set_tests_properties (
169
+ "build/execute/${test_name} "
170
+ PROPERTIES
171
+ FIXTURES_REQUIRED "build/${test_name} "
172
+ FIXTURES_SETUP "build/execute/${test_name} "
173
+ RESOURCE_LOCK "test.exe" )
174
+
175
+ add_test (
176
+ NAME "build/update/${test_name} "
177
+ COMMAND
178
+ "${CMAKE_COMMAND} "
179
+ -E copy_if_different
180
+ "build/${gen_cpp_src} .output"
181
+ "${gen_cpp_src} .execution"
182
+ "${TEST_RESULTS_BUILD_DIR} "
183
+ WORKING_DIRECTORY "${test_dir} "
184
+ )
185
+ set_tests_properties (
186
+ "build/update/${test_name} "
187
+ PROPERTIES
188
+ FIXTURES_CLEANUP "build/${test_name} ;build/execute${test_name} "
189
+ )
190
+ endif ()
124
191
endfunction ()
125
192
126
193
function (cppfront_tests )
0 commit comments