1 # See adjacent README.rst for documentation of this test infrastructure.
3 # Note that the _isMultiConfig variable is set in the parent directory's
4 # CMakeLists.txt (slightly complex logic to support CMake versions before 3.9)
6 macro(add_RunCMake_test test)
8 if ("${ARGV1}" STREQUAL "TEST_DIR")
9 if ("${ARGV2}" STREQUAL "")
10 message(FATAL_ERROR "Invalid args")
12 set(Test_Dir ${ARGV2})
13 list(REMOVE_AT TEST_ARGS 0)
14 list(REMOVE_AT TEST_ARGS 0)
18 add_test(NAME RunCMake.${test} COMMAND ${CMAKE_CMAKE_COMMAND}
19 -DCMAKE_MODULE_PATH=${CMAKE_CURRENT_SOURCE_DIR}
20 -DRunCMake_GENERATOR_IS_MULTI_CONFIG=${_isMultiConfig}
21 -DRunCMake_GENERATOR=${CMAKE_GENERATOR}
22 -DRunCMake_GENERATOR_INSTANCE=${CMAKE_GENERATOR_INSTANCE}
23 -DRunCMake_GENERATOR_PLATFORM=${CMAKE_GENERATOR_PLATFORM}
24 -DRunCMake_GENERATOR_TOOLSET=${CMAKE_GENERATOR_TOOLSET}
25 -DRunCMake_MAKE_PROGRAM=${CMake_TEST_EXPLICIT_MAKE_PROGRAM}
26 -DRunCMake_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}/${Test_Dir}
27 -DRunCMake_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}/${test}
30 -P "${CMAKE_CURRENT_SOURCE_DIR}/${Test_Dir}/RunCMakeTest.cmake"
34 function(add_RunCMake_test_group test types)
35 # create directory for common content
36 set(TEST_CONFIG_DIR "${CMAKE_CURRENT_BINARY_DIR}/${test}/conf")
37 file(REMOVE_RECURSE "${TEST_CONFIG_DIR}")
38 file(MAKE_DIRECTORY "${TEST_CONFIG_DIR}")
40 foreach(type IN LISTS types)
41 # generate prerequirements config file in cmake as ctest doesn't have as
42 # much system information so it is easier to set programs and environment
44 unset(${test}_${type}_FOUND_PREREQUIREMENTS)
45 if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${test}/${type}/Prerequirements.cmake")
46 include("${CMAKE_CURRENT_SOURCE_DIR}/${test}/${type}/Prerequirements.cmake")
48 string(REGEX MATCH "^[^.]*" main_type "${type}")
49 include("${CMAKE_CURRENT_SOURCE_DIR}/${test}/${main_type}/Prerequirements.cmake")
51 get_test_prerequirements("${test}_${type}_FOUND_PREREQUIREMENTS"
52 "${TEST_CONFIG_DIR}/${type}_config.cmake")
54 # only add the test if prerequirements are met
55 if(${test}_${type}_FOUND_PREREQUIREMENTS)
56 add_test(NAME RunCMake.${test}_${type} COMMAND ${CMAKE_CMAKE_COMMAND}
58 -DCMAKE_MODULE_PATH=${CMAKE_CURRENT_SOURCE_DIR}
59 -DRunCMake_GENERATOR_IS_MULTI_CONFIG=${_isMultiConfig}
60 -DRunCMake_GENERATOR=${CMAKE_GENERATOR}
61 -DRunCMake_GENERATOR_INSTANCE=${CMAKE_GENERATOR_INSTANCE}
62 -DRunCMake_GENERATOR_PLATFORM=${CMAKE_GENERATOR_PLATFORM}
63 -DRunCMake_GENERATOR_TOOLSET=${CMAKE_GENERATOR_TOOLSET}
64 -DRunCMake_MAKE_PROGRAM=${CMake_TEST_EXPLICIT_MAKE_PROGRAM}
65 -DRunCMake_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}/${test}
66 -DRunCMake_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}/${type}/${test}
67 -Dconfig_file=${TEST_CONFIG_DIR}/${type}_config.cmake
68 -P "${CMAKE_CURRENT_SOURCE_DIR}/${test}/RunCMakeTest.cmake"
74 # Some tests use python for extra checks.
75 find_package(PythonInterp QUIET)
77 if(XCODE_VERSION AND "${XCODE_VERSION}" VERSION_LESS 6.1)
78 set(Swift_ARGS -DXCODE_BELOW_6_1=1)
81 # Test MSVC for older host CMake versions, and test
82 # WIN32/CMAKE_C_COMPILER_ID to fix check on Intel for Windows.
83 if(MSVC OR (WIN32 AND CMAKE_C_COMPILER_ID MATCHES "MSVC|Intel"))
84 set(GeneratorExpression_ARGS -DLINKER_SUPPORTS_PDB=1)
87 add_RunCMake_test(CMP0019)
88 add_RunCMake_test(CMP0022)
89 add_RunCMake_test(CMP0026)
90 add_RunCMake_test(CMP0027)
91 add_RunCMake_test(CMP0028)
92 add_RunCMake_test(CMP0037)
93 add_RunCMake_test(CMP0038)
94 add_RunCMake_test(CMP0039)
95 add_RunCMake_test(CMP0040)
96 add_RunCMake_test(CMP0041)
97 if(CMAKE_SYSTEM_NAME MATCHES Darwin AND CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG)
98 add_RunCMake_test(CMP0042)
100 add_RunCMake_test(CMP0043)
101 add_RunCMake_test(CMP0045)
102 add_RunCMake_test(CMP0046)
103 add_RunCMake_test(CMP0049)
104 add_RunCMake_test(CMP0050)
105 add_RunCMake_test(CMP0051)
106 add_RunCMake_test(CMP0053)
107 add_RunCMake_test(CMP0054)
108 add_RunCMake_test(CMP0055)
109 add_RunCMake_test(CMP0057)
110 add_RunCMake_test(CMP0059)
111 add_RunCMake_test(CMP0060)
112 add_RunCMake_test(CMP0064)
113 if(CMAKE_SYSTEM_NAME MATCHES Darwin AND CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG)
114 add_RunCMake_test(CMP0068)
116 add_RunCMake_test(CMP0069)
117 add_RunCMake_test(CMP0081)
118 add_RunCMake_test(CMP0102)
120 # The test for Policy 65 requires the use of the
121 # CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS variable, which both the VS and Xcode
122 # generators ignore. The policy will have no effect on those generators.
123 if(NOT CMAKE_GENERATOR MATCHES "Visual Studio|Xcode")
124 add_RunCMake_test(CMP0065 -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME})
126 if(CMAKE_GENERATOR MATCHES "Make")
127 add_RunCMake_test(Make -DMAKE_IS_GNU=${MAKE_IS_GNU})
129 if(CMAKE_GENERATOR MATCHES "Ninja")
131 -DCMAKE_C_OUTPUT_EXTENSION=${CMAKE_C_OUTPUT_EXTENSION}
132 -DCMAKE_SHARED_LIBRARY_PREFIX=${CMAKE_SHARED_LIBRARY_PREFIX}
133 -DCMAKE_SHARED_LIBRARY_SUFFIX=${CMAKE_SHARED_LIBRARY_SUFFIX})
134 if(CMAKE_Fortran_COMPILER)
135 list(APPEND Ninja_ARGS -DTEST_Fortran=1)
137 if(CMake_TEST_Qt5 AND Qt5Core_FOUND)
138 list(APPEND Ninja_ARGS -DCMake_TEST_Qt5=1 -DCMAKE_TEST_Qt5Core_Version=${Qt5Core_VERSION})
140 add_RunCMake_test(Ninja)
141 set(NinjaMultiConfig_ARGS
144 if(CMake_TEST_Qt5 AND Qt5Core_FOUND)
145 list(APPEND NinjaMultiConfig_ARGS -DCMake_TEST_Qt5=1)
147 if(DEFINED CMake_TEST_CUDA)
148 list(APPEND NinjaMultiConfig_ARGS -DCMake_TEST_CUDA=${CMake_TEST_CUDA})
150 add_RunCMake_test(NinjaMultiConfig)
152 add_RunCMake_test(CTest)
154 if(NOT CMake_TEST_EXTERNAL_CMAKE)
155 add_RunCMake_test(ctest_memcheck
156 -DPSEUDO_BC=$<TARGET_FILE:pseudo_BC>
157 -DPSEUDO_PURIFY=$<TARGET_FILE:pseudo_purify>
158 -DPSEUDO_VALGRIND=$<TARGET_FILE:pseudo_valgrind>
159 -DPSEUDO_BC_NOLOG=$<TARGET_FILE:pseudonl_BC>
160 -DPSEUDO_PURIFY_NOLOG=$<TARGET_FILE:pseudonl_purify>
161 -DPSEUDO_VALGRIND_NOLOG=$<TARGET_FILE:pseudonl_valgrind>
162 -DMEMCHECK_FAIL=$<TARGET_FILE:memcheck_fail>
166 add_RunCMake_test(AndroidTestUtilities)
167 set(autogen_with_qt5 FALSE)
169 find_package(Qt5Widgets QUIET NO_MODULE)
171 if(CMake_TEST_Qt5 AND Qt5Widgets_FOUND)
172 set(autogen_with_qt5 TRUE)
174 add_RunCMake_test(Autogen -Dwith_qt5=${autogen_with_qt5})
175 add_RunCMake_test(BuildDepends)
176 if(UNIX AND "${CMAKE_GENERATOR}" MATCHES "Unix Makefiles|Ninja")
177 add_RunCMake_test(Byproducts)
179 add_RunCMake_test(CMakeRoleGlobalProperty)
180 if(UNIX AND "${CMAKE_GENERATOR}" MATCHES "Unix Makefiles|Ninja")
181 add_RunCMake_test(CompilerChange)
183 add_RunCMake_test(CompilerNotFound)
184 add_RunCMake_test(Configure -DMSVC_IDE=${MSVC_IDE})
185 add_RunCMake_test(DisallowedCommands)
186 add_RunCMake_test(ExternalData)
187 add_RunCMake_test(FeatureSummary)
188 add_RunCMake_test(FPHSA)
189 add_RunCMake_test(FileAPI -DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE})
190 add_RunCMake_test(FindBoost)
191 add_RunCMake_test(FindLua)
192 add_RunCMake_test(FindOpenGL)
193 if(CMake_TEST_UseSWIG)
194 add_RunCMake_test(UseSWIG -DCMake_TEST_FindPython=${CMake_TEST_FindPython})
196 if(NOT CMAKE_C_COMPILER_ID MATCHES "Watcom")
197 add_RunCMake_test(GenerateExportHeader)
199 add_RunCMake_test(GeneratorExpression)
200 add_RunCMake_test(GeneratorInstance)
201 add_RunCMake_test(GeneratorPlatform)
202 add_RunCMake_test(GeneratorToolset)
203 add_RunCMake_test(GetPrerequisites)
204 add_RunCMake_test(GNUInstallDirs -DSYSTEM_NAME=${CMAKE_SYSTEM_NAME})
205 add_RunCMake_test(GoogleTest) # Note: does not actually depend on Google Test
206 add_RunCMake_test(Graphviz)
207 add_RunCMake_test(TargetPropertyGeneratorExpressions)
208 add_RunCMake_test(Languages)
209 add_RunCMake_test(LinkStatic)
210 if(CMAKE_CXX_COMPILER_ID MATCHES "^(Cray|PGI|XL|XLClang)$")
211 add_RunCMake_test(MetaCompileFeatures)
214 add_RunCMake_test(MSVCRuntimeLibrary)
215 add_RunCMake_test(MSVCWarningFlags)
217 add_RunCMake_test(ObjectLibrary)
218 add_RunCMake_test(ParseImplicitIncludeInfo)
219 add_RunCMake_test(ParseImplicitLinkInfo)
220 if(UNIX AND CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG AND CMAKE_EXECUTABLE_FORMAT STREQUAL "ELF")
221 add_RunCMake_test(RuntimePath)
223 add_RunCMake_test(ScriptMode)
224 add_RunCMake_test(Swift -DCMAKE_Swift_COMPILER=${CMAKE_Swift_COMPILER})
225 add_RunCMake_test(TargetObjects)
226 add_RunCMake_test(TargetSources)
227 add_RunCMake_test(TargetProperties)
228 add_RunCMake_test(ToolchainFile)
229 add_RunCMake_test(find_dependency)
230 add_RunCMake_test(CompileDefinitions)
231 add_RunCMake_test(CompileFeatures)
232 add_RunCMake_test(PolicyScope)
233 add_RunCMake_test(WriteBasicConfigVersionFile)
234 add_RunCMake_test(WriteCompilerDetectionHeader)
235 add_RunCMake_test(SourceProperties)
237 add_RunCMake_test(PositionIndependentCode -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME}
238 -DCMAKE_CXX_COMPILER_ID=${CMAKE_CXX_COMPILER_ID})
240 if(NOT CMAKE_GENERATOR MATCHES "Visual Studio")
241 add_RunCMake_test(VisibilityPreset)
244 set(CompatibleInterface_ARGS -DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE})
246 add_RunCMake_test(CompatibleInterface)
247 add_RunCMake_test(Syntax)
248 add_RunCMake_test(WorkingDirectory)
249 add_RunCMake_test(MaxRecursionDepth)
251 add_RunCMake_test(add_custom_command)
252 add_RunCMake_test(add_custom_target)
253 add_RunCMake_test(add_dependencies)
254 add_RunCMake_test(add_executable)
255 add_RunCMake_test(add_library)
256 add_RunCMake_test(add_subdirectory)
257 add_RunCMake_test(build_command)
258 add_executable(exit_code exit_code.c)
259 set(execute_process_ARGS -DEXIT_CODE_EXE=$<TARGET_FILE:exit_code>)
260 if(NOT CMake_TEST_EXTERNAL_CMAKE)
261 list(APPEND execute_process_ARGS -DTEST_ENCODING_EXE=$<TARGET_FILE:testEncoding>)
263 add_RunCMake_test(execute_process)
264 add_RunCMake_test(export)
265 add_RunCMake_test(cmake_minimum_required)
266 add_RunCMake_test(cmake_parse_arguments)
267 add_RunCMake_test(continue)
268 add_executable(color_warning color_warning.c)
269 add_RunCMake_test(ctest_build -DCOLOR_WARNING=$<TARGET_FILE:color_warning>)
270 add_RunCMake_test(ctest_cmake_error)
271 add_RunCMake_test(ctest_configure)
273 add_RunCMake_test(ctest_coverage -DCOVERAGE_COMMAND=${COVERAGE_COMMAND})
275 add_RunCMake_test(ctest_start)
276 add_RunCMake_test(ctest_submit)
277 add_RunCMake_test(ctest_test)
278 add_RunCMake_test(ctest_disabled_test)
279 add_RunCMake_test(ctest_skipped_test)
280 add_RunCMake_test(ctest_update)
281 add_RunCMake_test(ctest_upload)
282 add_RunCMake_test(ctest_fixtures)
283 add_RunCMake_test(file)
284 add_RunCMake_test(find_file)
285 add_RunCMake_test(find_library)
286 add_RunCMake_test(find_package)
287 add_RunCMake_test(find_path)
288 add_RunCMake_test(find_program -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME})
289 add_RunCMake_test(foreach)
290 add_RunCMake_test(function)
291 add_RunCMake_test(get_filename_component)
292 add_RunCMake_test(get_property)
293 add_RunCMake_test(if)
294 add_RunCMake_test(include)
295 add_RunCMake_test(include_directories)
296 add_RunCMake_test(include_guard)
297 add_RunCMake_test(list)
298 add_RunCMake_test(load_cache)
299 add_RunCMake_test(math)
300 add_RunCMake_test(message)
301 add_RunCMake_test(option)
302 add_RunCMake_test(project -DCMake_TEST_RESOURCES=${CMake_TEST_RESOURCES})
303 add_RunCMake_test(project_injected)
304 add_RunCMake_test(return)
305 add_RunCMake_test(separate_arguments)
306 add_RunCMake_test(set_property)
307 add_RunCMake_test(string)
308 add_RunCMake_test(test_include_dirs)
309 add_RunCMake_test(BundleUtilities)
311 add_RunCMake_test(INSTALL_NAME_DIR)
312 add_RunCMake_test(MacOSVersions)
315 function(add_RunCMake_test_try_compile)
316 if(CMAKE_VERSION VERSION_LESS 3.9.20170907 AND "x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC")
317 # Older CMake versions do not know about MSVC language standards.
318 # Approximate our logic from MSVC-CXX.cmake.
319 if ((NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.0.24215.1 AND
320 CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.10) OR
321 NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.10.25017)
322 set(CMAKE_CXX_STANDARD_DEFAULT 14)
323 elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 16.0)
324 set(CMAKE_CXX_STANDARD_DEFAULT "")
326 unset(CMAKE_CXX_STANDARD_DEFAULT)
332 CMAKE_C_COMPILER_VERSION
333 CMAKE_C_STANDARD_DEFAULT
334 CMAKE_CXX_COMPILER_ID
335 CMAKE_CXX_COMPILER_VERSION
336 CMAKE_CXX_STANDARD_DEFAULT
338 CMAKE_OBJC_STANDARD_DEFAULT
339 CMAKE_OBJCXX_STANDARD_DEFAULT
342 list(APPEND try_compile_ARGS -D${var}=${${var}})
345 add_RunCMake_test(try_compile)
347 add_RunCMake_test_try_compile()
349 add_RunCMake_test(try_run -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME}
350 -DCMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID})
351 add_RunCMake_test(set)
352 add_RunCMake_test(variable_watch)
353 add_RunCMake_test(while)
354 add_RunCMake_test(CMP0004)
355 add_RunCMake_test(TargetPolicies)
356 add_RunCMake_test(alias_targets)
357 add_RunCMake_test(interface_library)
358 add_RunCMake_test(no_install_prefix)
359 add_RunCMake_test(configure_file)
360 add_RunCMake_test(CTestTimeout -DTIMEOUT=${CTestTestTimeout_TIME})
361 add_RunCMake_test(CTestTimeoutAfterMatch)
363 # ctresalloc links against CMakeLib and CTestLib, which means it can't be built
364 # if CMake_TEST_EXTERNAL_CMAKE is activated (the compiler might be different.)
365 # So, it has to be provided in the original build tree.
366 if(CMake_TEST_EXTERNAL_CMAKE)
367 set(no_package_root_path)
368 if(NOT CMAKE_VERSION VERSION_LESS 3.12)
369 set(no_package_root_path NO_PACKAGE_ROOT_PATH)
371 find_program(ctresalloc ctresalloc PATHS ${CMake_TEST_EXTERNAL_CMAKE}
373 ${no_package_root_path}
375 NO_CMAKE_ENVIRONMENT_PATH
376 NO_SYSTEM_ENVIRONMENT_PATH
378 NO_CMAKE_FIND_ROOT_PATH
381 add_executable(ctresalloc IMPORTED)
382 set_property(TARGET ctresalloc PROPERTY IMPORTED_LOCATION ${ctresalloc})
385 add_executable(ctresalloc CTestResourceAllocation/ctresalloc.cxx)
386 target_link_libraries(ctresalloc CTestLib)
387 target_include_directories(ctresalloc PRIVATE
388 ${CMake_BINARY_DIR}/Source
389 ${CMake_SOURCE_DIR}/Source
390 ${CMake_SOURCE_DIR}/Source/CTest
392 set_property(TARGET ctresalloc PROPERTY RUNTIME_OUTPUT_DIRECTORY ${CMake_BIN_DIR})
395 if(TARGET ctresalloc)
396 add_RunCMake_test(CTestResourceAllocation -DCTRESALLOC_COMMAND=$<TARGET_FILE:ctresalloc>)
398 message(WARNING "Could not find or build ctresalloc")
401 find_package(Qt4 QUIET)
402 find_package(Qt5Core QUIET)
403 if (QT4_FOUND AND Qt5Core_FOUND AND NOT Qt5Core_VERSION VERSION_LESS 5.1.0)
404 add_RunCMake_test(IncompatibleQt)
407 add_RunCMake_test(ObsoleteQtMacros -DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE})
410 find_package(PkgConfig QUIET)
412 add_RunCMake_test(FindPkgConfig)
415 if(CMake_TEST_FindGTK2)
416 add_RunCMake_test(FindGTK2)
419 if("${CMAKE_GENERATOR}" MATCHES "Visual Studio")
420 add_RunCMake_test(include_external_msproject -DVS_PLATFORM_NAME=${CMAKE_VS_PLATFORM_NAME})
421 if("${CMAKE_GENERATOR}" MATCHES "Visual Studio (9|10)" AND NOT CMAKE_VS_DEVENV_COMMAND)
422 set(NO_USE_FOLDERS 1)
424 add_RunCMake_test(VSSolution -DNO_USE_FOLDERS=${NO_USE_FOLDERS})
427 if("${CMAKE_GENERATOR}" MATCHES "Visual Studio ([^9]|9[0-9])")
428 add_RunCMake_test(VS10Project
429 -DCMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID}
430 -DCMAKE_C_COMPILER_VERSION=${CMAKE_C_COMPILER_VERSION}
433 add_RunCMake_test( VS10ProjectWinCE "-DRunCMake_GENERATOR_PLATFORM=${wince_sdk}")
438 add_RunCMake_test(XcodeProject -DXCODE_VERSION=${XCODE_VERSION})
440 # This test can take a very long time due to lots of combinations.
441 # Use a long default timeout and provide an option to customize it.
442 if(NOT DEFINED CMake_TEST_XcodeProject_TIMEOUT)
443 set(CMake_TEST_XcodeProject_TIMEOUT 2000)
445 set_property(TEST RunCMake.XcodeProject PROPERTY TIMEOUT ${CMake_TEST_XcodeProject_TIMEOUT})
448 if(CMAKE_C_COMPILER_ID STREQUAL "AppleClang"
449 AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 6.0)
450 add_RunCMake_test(Framework)
453 add_RunCMake_test(File_Generate)
454 add_RunCMake_test(ExportWithoutLanguage)
455 add_RunCMake_test(target_link_directories)
456 add_RunCMake_test(target_link_libraries)
457 add_RunCMake_test(add_link_options -DCMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID})
458 add_RunCMake_test(target_link_options -DCMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID})
460 add_RunCMake_test(target_compile_definitions)
461 add_RunCMake_test(target_compile_features)
462 add_RunCMake_test(target_compile_options -DCMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID})
463 add_RunCMake_test(target_include_directories)
464 add_RunCMake_test(target_sources)
465 add_RunCMake_test(CheckModules)
466 add_RunCMake_test(CheckIPOSupported)
467 add_RunCMake_test(CommandLine -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME} -DCYGWIN=${CYGWIN} -DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE})
468 add_RunCMake_test(CommandLineTar)
470 if(CMAKE_PLATFORM_NO_VERSIONED_SONAME OR (NOT CMAKE_SHARED_LIBRARY_SONAME_FLAG AND NOT CMAKE_SHARED_LIBRARY_SONAME_C_FLAG))
476 add_RunCMake_test(install -DNO_NAMELINK=${NO_NAMELINK} -DCYGWIN=${CYGWIN} -DCMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID}
477 -DCMAKE_SHARED_LIBRARY_RPATH_ORIGIN_TOKEN=${CMAKE_SHARED_LIBRARY_RPATH_ORIGIN_TOKEN}
478 -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME}
479 -DCMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG=${CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG}
480 -DCMAKE_EXECUTABLE_FORMAT=${CMAKE_EXECUTABLE_FORMAT}
481 -DCMake_INSTALL_NAME_TOOL_BUG=${CMake_INSTALL_NAME_TOOL_BUG}
484 add_RunCMake_test(CPackCommandLine)
485 add_RunCMake_test(CPackConfig)
486 add_RunCMake_test(CPackInstallProperties)
487 add_RunCMake_test(ExternalProject)
488 add_RunCMake_test(FetchContent)
489 set(CTestCommandLine_ARGS -DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE})
490 if(NOT CMake_TEST_EXTERNAL_CMAKE)
491 list(APPEND CTestCommandLine_ARGS -DTEST_AFFINITY=$<TARGET_FILE:testAffinity>)
493 add_executable(print_stdin print_stdin.c)
494 add_RunCMake_test(CTestCommandLine -DTEST_PRINT_STDIN=$<TARGET_FILE:print_stdin>)
495 add_RunCMake_test(CacheNewline)
496 # Only run this test on unix platforms that support
499 add_RunCMake_test(CPackSymlinks)
502 set(IfacePaths_INCDIRS_ARGS -DTEST_PROP=INCLUDE_DIRECTORIES)
503 add_RunCMake_test(IfacePaths_INCDIRS TEST_DIR IfacePaths)
505 set(IfacePaths_SOURCES_ARGS -DTEST_PROP=SOURCES)
506 add_RunCMake_test(IfacePaths_SOURCES TEST_DIR IfacePaths)
508 # Matlab module related tests
509 if(CMake_TEST_FindMatlab OR CMake_TEST_FindMatlab_MCR OR (NOT "${CMake_TEST_FindMatlab_MCR_ROOT_DIR}" STREQUAL ""))
510 set(FindMatlab_additional_test_options )
511 if(CMake_TEST_FindMatlab_MCR OR NOT "${CMake_TEST_FindMatlab_MCR_ROOT_DIR}" STREQUAL "")
512 set(FindMatlab_additional_test_options -DIS_MCR=TRUE)
514 if(NOT "${CMake_TEST_FindMatlab_MCR_ROOT_DIR}" STREQUAL "")
515 set(FindMatlab_additional_test_options ${FindMatlab_additional_test_options} "-DMCR_ROOT:FILEPATH=${CMake_TEST_FindMatlab_MCR_ROOT_DIR}")
518 add_RunCMake_test(FindMatlab ${FindMatlab_additional_test_options})
521 add_executable(pseudo_emulator pseudo_emulator.c)
522 add_executable(pseudo_emulator_custom_command pseudo_emulator_custom_command.c)
523 add_executable(pseudo_emulator_custom_command_arg pseudo_emulator_custom_command_arg.c)
524 add_RunCMake_test(CrosscompilingEmulator
525 -DPSEUDO_EMULATOR=$<TARGET_FILE:pseudo_emulator>
526 -DPSEUDO_EMULATOR_CUSTOM_COMMAND=$<TARGET_FILE:pseudo_emulator_custom_command>
527 -DPSEUDO_EMULATOR_CUSTOM_COMMAND_ARG=$<TARGET_FILE:pseudo_emulator_custom_command_arg>)
528 if("${CMAKE_GENERATOR}" MATCHES "Make|Ninja")
529 if(UNIX AND NOT CYGWIN)
530 execute_process(COMMAND ldd --help
531 OUTPUT_VARIABLE LDD_HELP
532 ERROR_VARIABLE LDD_ERR)
533 if("${LDD_HELP}" MATCHES
534 "(-r, --function-relocs.*process data and function relocations.*-u, --unused.*print unused direct dependencies)")
535 add_RunCMake_test(LinkWhatYouUse)
538 add_executable(pseudo_tidy pseudo_tidy.c)
539 add_executable(pseudo_iwyu pseudo_iwyu.c)
540 add_executable(pseudo_cpplint pseudo_cpplint.c)
541 add_executable(pseudo_cppcheck pseudo_cppcheck.c)
542 add_RunCMake_test(ClangTidy -DPSEUDO_TIDY=$<TARGET_FILE:pseudo_tidy>)
543 add_RunCMake_test(IncludeWhatYouUse -DPSEUDO_IWYU=$<TARGET_FILE:pseudo_iwyu>)
544 add_RunCMake_test(Cpplint -DPSEUDO_CPPLINT=$<TARGET_FILE:pseudo_cpplint>)
545 add_RunCMake_test(Cppcheck -DPSEUDO_CPPCHECK=$<TARGET_FILE:pseudo_cppcheck>)
546 add_RunCMake_test(MultiLint
547 -DPSEUDO_TIDY=$<TARGET_FILE:pseudo_tidy>
548 -DPSEUDO_IWYU=$<TARGET_FILE:pseudo_iwyu>
549 -DPSEUDO_CPPLINT=$<TARGET_FILE:pseudo_cpplint>
550 -DPSEUDO_CPPCHECK=$<TARGET_FILE:pseudo_cppcheck>
552 if(DEFINED CMake_TEST_CUDA)
553 list(APPEND CompilerLauncher_ARGS -DCMake_TEST_CUDA=${CMake_TEST_CUDA})
555 if(CMAKE_Fortran_COMPILER)
556 list(APPEND CompilerLauncher_ARGS -DCMake_TEST_Fortran=1)
558 if (APPLE AND CMAKE_C_COMPILER_ID MATCHES "Clang|GNU")
559 list(APPEND CompilerLauncher_ARGS -DCMake_TEST_OBJC=1)
561 add_RunCMake_test(CompilerLauncher)
562 add_RunCMake_test(ctest_labels_for_subprojects)
568 DEB.DEFAULT_PERMISSIONS
574 DEB.GENERATE_SHLIBS_LDCONFIG
577 DEB.PER_COMPONENT_FIELDS
580 DEB.DEB_PACKAGE_VERSION_BACK_COMPATIBILITY
584 RPM.CUSTOM_BINARY_SPEC_FILE
587 RPM.DEFAULT_PERMISSIONS
595 RPM.PARTIALLY_RELOCATABLE_WARNING
596 RPM.PER_COMPONENT_FIELDS
598 RPM.EXTRA_SLASH_IN_PATH
615 list(APPEND cpack_tests DragNDrop)
617 add_RunCMake_test_group(CPack "${cpack_tests}")
618 # add a test to make sure symbols are exported from a shared library
619 # for MSVC compilers CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS property is used
620 add_RunCMake_test(AutoExportDll
621 -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME}
622 -DCMAKE_CXX_COMPILER_ID=${CMAKE_CXX_COMPILER_ID}
625 add_RunCMake_test(AndroidMK)
627 if(CMake_TEST_ANDROID_NDK OR CMake_TEST_ANDROID_STANDALONE_TOOLCHAIN)
628 if(NOT "${CMAKE_GENERATOR}" MATCHES "Make|Ninja")
629 message(FATAL_ERROR "Android tests supported only by Makefile and Ninja generators")
631 foreach(v TEST_ANDROID_NDK TEST_ANDROID_STANDALONE_TOOLCHAIN)
633 string(REPLACE ";" "|" ${v} "${CMake_${v}}")
634 list(APPEND Android_ARGS "-D${v}=${${v}}")
638 add_RunCMake_test(Android)
640 # This test can take a very long time due to lots of combinations.
641 # Use a long default timeout and provide an option to customize it.
642 if(NOT DEFINED CMake_TEST_ANDROID_TIMEOUT)
643 set(CMake_TEST_ANDROID_TIMEOUT 3000)
645 set_property(TEST RunCMake.Android PROPERTY TIMEOUT ${CMake_TEST_ANDROID_TIMEOUT})
648 if(${CMAKE_GENERATOR} MATCHES "Visual Studio ([^9]|9[0-9])")
649 add_RunCMake_test(CSharpCustomCommand)
650 add_RunCMake_test(CSharpReferenceImport)
653 add_RunCMake_test("CTestCommandExpandLists")
655 add_RunCMake_test(PrecompileHeaders)
656 add_RunCMake_test("UnityBuild")