Imported Upstream version 3.17.5
[platform/upstream/cmake.git] / Tests / RunCMake / CMakeLists.txt
1 # See adjacent README.rst for documentation of this test infrastructure.
2
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)
5
6 macro(add_RunCMake_test test)
7   set(TEST_ARGS ${ARGN})
8   if ("${ARGV1}" STREQUAL "TEST_DIR")
9     if ("${ARGV2}" STREQUAL "")
10       message(FATAL_ERROR "Invalid args")
11     endif()
12     set(Test_Dir ${ARGV2})
13     list(REMOVE_AT TEST_ARGS 0)
14     list(REMOVE_AT TEST_ARGS 0)
15   else()
16     set(Test_Dir ${test})
17   endif()
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}
28     ${${test}_ARGS}
29     ${TEST_ARGS}
30     -P "${CMAKE_CURRENT_SOURCE_DIR}/${Test_Dir}/RunCMakeTest.cmake"
31     )
32 endmacro()
33
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}")
39
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
43     # values here
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")
47     else()
48       string(REGEX MATCH "^[^.]*" main_type "${type}")
49       include("${CMAKE_CURRENT_SOURCE_DIR}/${test}/${main_type}/Prerequirements.cmake")
50     endif()
51     get_test_prerequirements("${test}_${type}_FOUND_PREREQUIREMENTS"
52         "${TEST_CONFIG_DIR}/${type}_config.cmake")
53
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}
57         -DTEST_TYPE=${type}
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"
69         )
70     endif()
71   endforeach()
72 endfunction()
73
74 # Some tests use python for extra checks.
75 find_package(PythonInterp QUIET)
76
77 if(XCODE_VERSION AND "${XCODE_VERSION}" VERSION_LESS 6.1)
78   set(Swift_ARGS -DXCODE_BELOW_6_1=1)
79 endif()
80
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)
85 endif()
86
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)
99 endif()
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)
115 endif()
116 add_RunCMake_test(CMP0069)
117 add_RunCMake_test(CMP0081)
118 add_RunCMake_test(CMP0102)
119
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})
125 endif()
126 if(CMAKE_GENERATOR MATCHES "Make")
127   add_RunCMake_test(Make -DMAKE_IS_GNU=${MAKE_IS_GNU})
128 endif()
129 if(CMAKE_GENERATOR MATCHES "Ninja")
130   set(Ninja_ARGS
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)
136   endif()
137   if(CMake_TEST_Qt5 AND Qt5Core_FOUND)
138     list(APPEND Ninja_ARGS -DCMake_TEST_Qt5=1 -DCMAKE_TEST_Qt5Core_Version=${Qt5Core_VERSION})
139   endif()
140   add_RunCMake_test(Ninja)
141   set(NinjaMultiConfig_ARGS
142     -DCYGWIN=${CYGWIN}
143     )
144   if(CMake_TEST_Qt5 AND Qt5Core_FOUND)
145     list(APPEND NinjaMultiConfig_ARGS -DCMake_TEST_Qt5=1)
146   endif()
147   if(DEFINED CMake_TEST_CUDA)
148     list(APPEND NinjaMultiConfig_ARGS -DCMake_TEST_CUDA=${CMake_TEST_CUDA})
149   endif()
150   add_RunCMake_test(NinjaMultiConfig)
151 endif()
152 add_RunCMake_test(CTest)
153
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>
163     )
164 endif()
165
166 add_RunCMake_test(AndroidTestUtilities)
167 set(autogen_with_qt5 FALSE)
168 if(CMake_TEST_Qt5)
169   find_package(Qt5Widgets QUIET NO_MODULE)
170 endif()
171 if(CMake_TEST_Qt5 AND Qt5Widgets_FOUND)
172   set(autogen_with_qt5 TRUE)
173 endif ()
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)
178 endif()
179 add_RunCMake_test(CMakeRoleGlobalProperty)
180 if(UNIX AND "${CMAKE_GENERATOR}" MATCHES "Unix Makefiles|Ninja")
181   add_RunCMake_test(CompilerChange)
182 endif()
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})
195 endif()
196 if(NOT CMAKE_C_COMPILER_ID MATCHES "Watcom")
197   add_RunCMake_test(GenerateExportHeader)
198 endif()
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)
212 endif()
213 if(MSVC)
214   add_RunCMake_test(MSVCRuntimeLibrary)
215   add_RunCMake_test(MSVCWarningFlags)
216 endif()
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)
222 endif()
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)
236 if(NOT WIN32)
237   add_RunCMake_test(PositionIndependentCode -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME}
238                                             -DCMAKE_CXX_COMPILER_ID=${CMAKE_CXX_COMPILER_ID})
239 endif()
240 if(NOT CMAKE_GENERATOR MATCHES "Visual Studio")
241   add_RunCMake_test(VisibilityPreset)
242 endif()
243 if (QT4_FOUND)
244   set(CompatibleInterface_ARGS -DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE})
245 endif()
246 add_RunCMake_test(CompatibleInterface)
247 add_RunCMake_test(Syntax)
248 add_RunCMake_test(WorkingDirectory)
249 add_RunCMake_test(MaxRecursionDepth)
250
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>)
262 endif()
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)
272 if(COVERAGE_COMMAND)
273   add_RunCMake_test(ctest_coverage -DCOVERAGE_COMMAND=${COVERAGE_COMMAND})
274 endif()
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)
310 if(APPLE)
311   add_RunCMake_test(INSTALL_NAME_DIR)
312   add_RunCMake_test(MacOSVersions)
313 endif()
314
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 "")
325     else()
326       unset(CMAKE_CXX_STANDARD_DEFAULT)
327     endif()
328   endif()
329   foreach(var
330       CMAKE_SYSTEM_NAME
331       CMAKE_C_COMPILER_ID
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
337       CMake_TEST_CUDA
338       CMAKE_OBJC_STANDARD_DEFAULT
339       CMAKE_OBJCXX_STANDARD_DEFAULT
340       )
341     if(DEFINED ${var})
342       list(APPEND try_compile_ARGS -D${var}=${${var}})
343     endif()
344   endforeach()
345   add_RunCMake_test(try_compile)
346 endfunction()
347 add_RunCMake_test_try_compile()
348
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)
362
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)
370   endif()
371   find_program(ctresalloc ctresalloc PATHS ${CMake_TEST_EXTERNAL_CMAKE}
372     NO_DEFAULT_PATH
373     ${no_package_root_path}
374     NO_CMAKE_PATH
375     NO_CMAKE_ENVIRONMENT_PATH
376     NO_SYSTEM_ENVIRONMENT_PATH
377     NO_CMAKE_SYSTEM_PATH
378     NO_CMAKE_FIND_ROOT_PATH
379     )
380   if(ctresalloc)
381     add_executable(ctresalloc IMPORTED)
382     set_property(TARGET ctresalloc PROPERTY IMPORTED_LOCATION ${ctresalloc})
383   endif()
384 else()
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
391     )
392   set_property(TARGET ctresalloc PROPERTY RUNTIME_OUTPUT_DIRECTORY ${CMake_BIN_DIR})
393 endif()
394
395 if(TARGET ctresalloc)
396   add_RunCMake_test(CTestResourceAllocation -DCTRESALLOC_COMMAND=$<TARGET_FILE:ctresalloc>)
397 else()
398   message(WARNING "Could not find or build ctresalloc")
399 endif()
400
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)
405 endif()
406 if (QT4_FOUND)
407   add_RunCMake_test(ObsoleteQtMacros -DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE})
408 endif()
409
410 find_package(PkgConfig QUIET)
411 if(PKG_CONFIG_FOUND)
412   add_RunCMake_test(FindPkgConfig)
413 endif()
414
415 if(CMake_TEST_FindGTK2)
416   add_RunCMake_test(FindGTK2)
417 endif()
418
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)
423   endif()
424   add_RunCMake_test(VSSolution -DNO_USE_FOLDERS=${NO_USE_FOLDERS})
425 endif()
426
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}
431     )
432   if( vs12 AND wince )
433     add_RunCMake_test( VS10ProjectWinCE "-DRunCMake_GENERATOR_PLATFORM=${wince_sdk}")
434   endif()
435 endif()
436
437 if(XCODE_VERSION)
438   add_RunCMake_test(XcodeProject -DXCODE_VERSION=${XCODE_VERSION})
439
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)
444   endif()
445   set_property(TEST RunCMake.XcodeProject PROPERTY TIMEOUT ${CMake_TEST_XcodeProject_TIMEOUT})
446 endif()
447
448 if(CMAKE_C_COMPILER_ID STREQUAL "AppleClang"
449     AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 6.0)
450   add_RunCMake_test(Framework)
451 endif()
452
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})
459
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)
469
470 if(CMAKE_PLATFORM_NO_VERSIONED_SONAME OR (NOT CMAKE_SHARED_LIBRARY_SONAME_FLAG AND NOT CMAKE_SHARED_LIBRARY_SONAME_C_FLAG))
471   set(NO_NAMELINK 1)
472 else()
473   set(NO_NAMELINK 0)
474 endif()
475
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}
482   )
483
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>)
492 endif()
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
497 # symbolic links
498 if(UNIX)
499   add_RunCMake_test(CPackSymlinks)
500 endif()
501
502 set(IfacePaths_INCDIRS_ARGS -DTEST_PROP=INCLUDE_DIRECTORIES)
503 add_RunCMake_test(IfacePaths_INCDIRS TEST_DIR IfacePaths)
504
505 set(IfacePaths_SOURCES_ARGS -DTEST_PROP=SOURCES)
506 add_RunCMake_test(IfacePaths_SOURCES TEST_DIR IfacePaths)
507
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)
513     endif()
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}")
516     endif()
517
518   add_RunCMake_test(FindMatlab ${FindMatlab_additional_test_options})
519 endif()
520
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)
536     endif()
537   endif()
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>
551     )
552   if(DEFINED CMake_TEST_CUDA)
553     list(APPEND CompilerLauncher_ARGS -DCMake_TEST_CUDA=${CMake_TEST_CUDA})
554   endif()
555   if(CMAKE_Fortran_COMPILER)
556     list(APPEND CompilerLauncher_ARGS -DCMake_TEST_Fortran=1)
557   endif()
558   if (APPLE AND CMAKE_C_COMPILER_ID MATCHES "Clang|GNU")
559     list(APPEND CompilerLauncher_ARGS -DCMake_TEST_OBJC=1)
560   endif()
561   add_RunCMake_test(CompilerLauncher)
562   add_RunCMake_test(ctest_labels_for_subprojects)
563 endif()
564
565 set(cpack_tests
566   DEB.CUSTOM_NAMES
567   DEB.DEBUGINFO
568   DEB.DEFAULT_PERMISSIONS
569   DEB.DEPENDENCIES
570   DEB.EMPTY_DIR
571   DEB.VERSION
572   DEB.EXTRA
573   DEB.GENERATE_SHLIBS
574   DEB.GENERATE_SHLIBS_LDCONFIG
575   DEB.LONG_FILENAMES
576   DEB.MINIMAL
577   DEB.PER_COMPONENT_FIELDS
578   DEB.TIMESTAMPS
579   DEB.MD5SUMS
580   DEB.DEB_PACKAGE_VERSION_BACK_COMPATIBILITY
581   DEB.DEB_DESCRIPTION
582   DEB.PROJECT_META
583
584   RPM.CUSTOM_BINARY_SPEC_FILE
585   RPM.CUSTOM_NAMES
586   RPM.DEBUGINFO
587   RPM.DEFAULT_PERMISSIONS
588   RPM.DEPENDENCIES
589   RPM.DIST
590   RPM.EMPTY_DIR
591   RPM.VERSION
592   RPM.INSTALL_SCRIPTS
593   RPM.MAIN_COMPONENT
594   RPM.MINIMAL
595   RPM.PARTIALLY_RELOCATABLE_WARNING
596   RPM.PER_COMPONENT_FIELDS
597   RPM.SINGLE_DEBUGINFO
598   RPM.EXTRA_SLASH_IN_PATH
599   RPM.SOURCE_PACKAGE
600   RPM.SUGGESTS
601   RPM.SYMLINKS
602   RPM.USER_FILELIST
603   RPM.PROJECT_META
604
605   7Z
606   TBZ2
607   TGZ
608   TXZ
609   TZ
610   ZIP
611   STGZ
612   External
613   )
614 if(APPLE)
615   list(APPEND cpack_tests DragNDrop)
616 endif()
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}
623   )
624
625 add_RunCMake_test(AndroidMK)
626
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")
630   endif()
631   foreach(v TEST_ANDROID_NDK TEST_ANDROID_STANDALONE_TOOLCHAIN)
632     if(CMake_${v})
633       string(REPLACE ";" "|" ${v} "${CMake_${v}}")
634       list(APPEND Android_ARGS "-D${v}=${${v}}")
635     endif()
636   endforeach()
637
638   add_RunCMake_test(Android)
639
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)
644   endif()
645   set_property(TEST RunCMake.Android PROPERTY TIMEOUT ${CMake_TEST_ANDROID_TIMEOUT})
646 endif()
647
648 if(${CMAKE_GENERATOR} MATCHES "Visual Studio ([^9]|9[0-9])")
649   add_RunCMake_test(CSharpCustomCommand)
650   add_RunCMake_test(CSharpReferenceImport)
651 endif()
652
653 add_RunCMake_test("CTestCommandExpandLists")
654
655 add_RunCMake_test(PrecompileHeaders)
656 add_RunCMake_test("UnityBuild")