CMakeLists.txt 19.3 KB
Newer Older
1
# See adjacent README.rst for documentation of this test infrastructure.
2

3
4
5
# Note that the _isMultiConfig variable is set in the parent directory's
# CMakeLists.txt (slightly complex logic to support CMake versions before 3.9)

6
macro(add_RunCMake_test test)
7
8
9
10
11
12
13
14
15
16
17
  set(TEST_ARGS ${ARGN})
  if ("${ARGV1}" STREQUAL "TEST_DIR")
    if ("${ARGV2}" STREQUAL "")
      message(FATAL_ERROR "Invalid args")
    endif()
    set(Test_Dir ${ARGV2})
    list(REMOVE_AT TEST_ARGS 0)
    list(REMOVE_AT TEST_ARGS 0)
  else()
    set(Test_Dir ${test})
  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
30
    ${TEST_ARGS}
    -P "${CMAKE_CURRENT_SOURCE_DIR}/${Test_Dir}/RunCMakeTest.cmake"
31
32
    )
endmacro()
33

34
35
36
37
38
39
40
41
42
43
44
function(add_RunCMake_test_group test types)
  # create directory for common content
  set(TEST_CONFIG_DIR "${CMAKE_CURRENT_BINARY_DIR}/${test}/conf")
  file(REMOVE_RECURSE "${TEST_CONFIG_DIR}")
  file(MAKE_DIRECTORY "${TEST_CONFIG_DIR}")

  foreach(type IN LISTS types)
    # generate prerequirements config file in cmake as ctest doesn't have as
    # much system information so it is easier to set programs and environment
    # values here
    unset(${test}_${type}_FOUND_PREREQUIREMENTS)
45
46
47
48
49
50
    if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${test}/${type}/Prerequirements.cmake")
      include("${CMAKE_CURRENT_SOURCE_DIR}/${test}/${type}/Prerequirements.cmake")
    else()
      string(REGEX MATCH "^[^.]*" main_type "${type}")
      include("${CMAKE_CURRENT_SOURCE_DIR}/${test}/${main_type}/Prerequirements.cmake")
    endif()
51
52
53
54
55
56
57
58
    get_test_prerequirements("${test}_${type}_FOUND_PREREQUIREMENTS"
        "${TEST_CONFIG_DIR}/${type}_config.cmake")

    # only add the test if prerequirements are met
    if(${test}_${type}_FOUND_PREREQUIREMENTS)
      add_test(NAME RunCMake.${test}_${type} COMMAND ${CMAKE_CMAKE_COMMAND}
        -DTEST_TYPE=${type}
        -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
63
64
65
66
67
68
69
70
71
72
73
        -DRunCMake_GENERATOR_PLATFORM=${CMAKE_GENERATOR_PLATFORM}
        -DRunCMake_GENERATOR_TOOLSET=${CMAKE_GENERATOR_TOOLSET}
        -DRunCMake_MAKE_PROGRAM=${CMake_TEST_EXPLICIT_MAKE_PROGRAM}
        -DRunCMake_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}/${test}
        -DRunCMake_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}/${type}/${test}
        -Dconfig_file=${TEST_CONFIG_DIR}/${type}_config.cmake
        -P "${CMAKE_CURRENT_SOURCE_DIR}/${test}/RunCMakeTest.cmake"
        )
    endif()
  endforeach()
endfunction()

74
75
76
# Some tests use python for extra checks.
find_package(PythonInterp QUIET)

77
78
79
80
if(XCODE_VERSION AND "${XCODE_VERSION}" VERSION_LESS 6.1)
  set(Swift_ARGS -DXCODE_BELOW_6_1=1)
endif()

81
82
83
84
85
86
# Test MSVC for older host CMake versions, and test
# WIN32/CMAKE_C_COMPILER_ID to fix check on Intel for Windows.
if(MSVC OR (WIN32 AND CMAKE_C_COMPILER_ID MATCHES "MSVC|Intel"))
  set(GeneratorExpression_ARGS -DLINKER_SUPPORTS_PDB=1)
endif()

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
98
99
if(CMAKE_SYSTEM_NAME MATCHES Darwin AND CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG)
  add_RunCMake_test(CMP0042)
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
114
115
if(CMAKE_SYSTEM_NAME MATCHES Darwin AND CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG)
  add_RunCMake_test(CMP0068)
endif()
116
add_RunCMake_test(CMP0069)
117
add_RunCMake_test(CMP0081)
118
119
120
121
122
123
124

# The test for Policy 65 requires the use of the
# CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS variable, which both the VS and Xcode
# generators ignore.  The policy will have no effect on those generators.
if(NOT CMAKE_GENERATOR MATCHES "Visual Studio|Xcode")
  add_RunCMake_test(CMP0065)
endif()
125
if(CMAKE_GENERATOR MATCHES "Make")
126
  add_RunCMake_test(Make -DMAKE_IS_GNU=${MAKE_IS_GNU})
127
endif()
128
if(CMAKE_GENERATOR STREQUAL "Ninja")
129
130
131
132
  set(Ninja_ARGS
    -DCMAKE_C_OUTPUT_EXTENSION=${CMAKE_C_OUTPUT_EXTENSION}
    -DCMAKE_SHARED_LIBRARY_PREFIX=${CMAKE_SHARED_LIBRARY_PREFIX}
    -DCMAKE_SHARED_LIBRARY_SUFFIX=${CMAKE_SHARED_LIBRARY_SUFFIX})
133
134
135
  if(CMAKE_Fortran_COMPILER)
    list(APPEND Ninja_ARGS -DTEST_Fortran=1)
  endif()
136
137
  add_RunCMake_test(Ninja)
endif()
138
add_RunCMake_test(CTest)
139
140

if(NOT CMake_TEST_EXTERNAL_CMAKE)
141
  add_RunCMake_test(ctest_memcheck
142
143
144
145
146
147
148
149
150
151
    -DPSEUDO_BC=$<TARGET_FILE:pseudo_BC>
    -DPSEUDO_PURIFY=$<TARGET_FILE:pseudo_purify>
    -DPSEUDO_VALGRIND=$<TARGET_FILE:pseudo_valgrind>
    -DPSEUDO_BC_NOLOG=$<TARGET_FILE:pseudonl_BC>
    -DPSEUDO_PURIFY_NOLOG=$<TARGET_FILE:pseudonl_purify>
    -DPSEUDO_VALGRIND_NOLOG=$<TARGET_FILE:pseudonl_valgrind>
    -DMEMCHECK_FAIL=$<TARGET_FILE:memcheck_fail>
    )
endif()

152
add_RunCMake_test(AndroidTestUtilities)
153
154
155
156
157
158
159
160
set(autogen_with_qt5 FALSE)
if(CMake_TEST_Qt5)
  find_package(Qt5Widgets QUIET NO_MODULE)
endif()
if(CMake_TEST_Qt5 AND Qt5Widgets_FOUND)
  set(autogen_with_qt5 TRUE)
endif ()
add_RunCMake_test(Autogen -Dwith_qt5=${autogen_with_qt5})
161
add_RunCMake_test(BuildDepends)
162
163
164
if(UNIX AND "${CMAKE_GENERATOR}" MATCHES "Unix Makefiles|Ninja")
  add_RunCMake_test(Byproducts)
endif()
165
add_RunCMake_test(CMakeRoleGlobalProperty)
166
if(UNIX AND "${CMAKE_GENERATOR}" MATCHES "Unix Makefiles|Ninja")
167
168
  add_RunCMake_test(CompilerChange)
endif()
169
add_RunCMake_test(CompilerNotFound)
170
add_RunCMake_test(Configure)
171
add_RunCMake_test(DisallowedCommands)
172
add_RunCMake_test(ExternalData)
173
add_RunCMake_test(FeatureSummary)
174
add_RunCMake_test(FPHSA)
175
add_RunCMake_test(FileAPI -DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE})
176
add_RunCMake_test(FindBoost)
177
add_RunCMake_test(FindLua)
178
add_RunCMake_test(FindOpenGL)
179
if(CMake_TEST_UseSWIG)
180
  add_RunCMake_test(UseSWIG -DCMake_TEST_FindPython=${CMake_TEST_FindPython})
181
endif()
182
183
184
if(NOT CMAKE_C_COMPILER_ID MATCHES "Watcom")
  add_RunCMake_test(GenerateExportHeader)
endif()
Brad King's avatar
Brad King committed
185
add_RunCMake_test(GeneratorExpression)
186
add_RunCMake_test(GeneratorInstance)
187
add_RunCMake_test(GeneratorPlatform)
188
add_RunCMake_test(GeneratorToolset)
189
add_RunCMake_test(GetPrerequisites)
190
add_RunCMake_test(GNUInstallDirs -DSYSTEM_NAME=${CMAKE_SYSTEM_NAME})
191
add_RunCMake_test(GoogleTest) # Note: does not actually depend on Google Test
192
add_RunCMake_test(TargetPropertyGeneratorExpressions)
193
add_RunCMake_test(Languages)
194
add_RunCMake_test(LinkStatic)
Brad King's avatar
Brad King committed
195
add_RunCMake_test(ObjectLibrary)
196
add_RunCMake_test(ParseImplicitIncludeInfo)
197
198
199
if(UNIX AND CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG AND CMAKE_EXECUTABLE_FORMAT STREQUAL "ELF")
  add_RunCMake_test(RuntimePath)
endif()
200
add_RunCMake_test(ScriptMode)
201
add_RunCMake_test(Swift)
202
add_RunCMake_test(TargetObjects)
203
add_RunCMake_test(TargetSources)
204
add_RunCMake_test(ToolchainFile)
205
add_RunCMake_test(find_dependency)
206
add_RunCMake_test(CompileDefinitions)
Stephen Kelly's avatar
Stephen Kelly committed
207
add_RunCMake_test(CompileFeatures)
208
add_RunCMake_test(PolicyScope)
209
add_RunCMake_test(WriteBasicConfigVersionFile)
210
add_RunCMake_test(WriteCompilerDetectionHeader)
211
add_RunCMake_test(SourceProperties)
212
if(NOT WIN32)
213
214
  add_RunCMake_test(PositionIndependentCode -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME}
                                            -DCMAKE_CXX_COMPILER_ID=${CMAKE_CXX_COMPILER_ID})
215
216
217
endif()
if(NOT CMAKE_GENERATOR MATCHES "Visual Studio")
  add_RunCMake_test(VisibilityPreset)
218
endif()
219
220
221
if (QT4_FOUND)
  set(CompatibleInterface_ARGS -DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE})
endif()
222
add_RunCMake_test(CompatibleInterface)
223
add_RunCMake_test(Syntax)
224
add_RunCMake_test(WorkingDirectory)
225
add_RunCMake_test(MaxRecursionDepth)
Brad King's avatar
Brad King committed
226

227
228
add_RunCMake_test(add_custom_command)
add_RunCMake_test(add_custom_target)
229
add_RunCMake_test(add_dependencies)
230
231
add_RunCMake_test(add_executable)
add_RunCMake_test(add_library)
232
add_RunCMake_test(add_subdirectory)
233
add_RunCMake_test(build_command)
234
235
add_executable(exit_code exit_code.c)
set(execute_process_ARGS -DEXIT_CODE_EXE=$<TARGET_FILE:exit_code>)
236
if(NOT CMake_TEST_EXTERNAL_CMAKE)
237
  list(APPEND execute_process_ARGS -DTEST_ENCODING_EXE=$<TARGET_FILE:testEncoding>)
238
endif()
239
add_RunCMake_test(execute_process)
240
add_RunCMake_test(export)
241
add_RunCMake_test(cmake_minimum_required)
242
add_RunCMake_test(cmake_parse_arguments)
243
add_RunCMake_test(continue)
Zack Galbreath's avatar
Zack Galbreath committed
244
add_RunCMake_test(ctest_build)
245
add_RunCMake_test(ctest_cmake_error)
246
add_RunCMake_test(ctest_configure)
247
248
249
if(COVERAGE_COMMAND)
  add_RunCMake_test(ctest_coverage -DCOVERAGE_COMMAND=${COVERAGE_COMMAND})
endif()
Zack Galbreath's avatar
Zack Galbreath committed
250
add_RunCMake_test(ctest_start)
251
add_RunCMake_test(ctest_submit)
Zack Galbreath's avatar
Zack Galbreath committed
252
add_RunCMake_test(ctest_test)
Betsy McPhail's avatar
Betsy McPhail committed
253
add_RunCMake_test(ctest_disabled_test)
254
add_RunCMake_test(ctest_skipped_test)
255
add_RunCMake_test(ctest_upload)
256
add_RunCMake_test(ctest_fixtures)
257
add_RunCMake_test(file)
258
add_RunCMake_test(find_file)
259
add_RunCMake_test(find_library)
260
add_RunCMake_test(find_package)
261
add_RunCMake_test(find_path)
262
add_RunCMake_test(find_program -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME})
263
add_RunCMake_test(foreach)
264
add_RunCMake_test(get_filename_component)
265
add_RunCMake_test(get_property)
Brad King's avatar
Brad King committed
266
add_RunCMake_test(if)
267
add_RunCMake_test(include)
268
add_RunCMake_test(include_directories)
269
add_RunCMake_test(include_guard)
270
add_RunCMake_test(list)
271
add_RunCMake_test(math)
272
add_RunCMake_test(message)
273
add_RunCMake_test(option)
274
add_RunCMake_test(project -DCMake_TEST_RESOURCES=${CMake_TEST_RESOURCES})
275
add_RunCMake_test(project_injected)
276
add_RunCMake_test(return)
277
add_RunCMake_test(separate_arguments)
278
add_RunCMake_test(set_property)
Brad King's avatar
Brad King committed
279
add_RunCMake_test(string)
280
add_RunCMake_test(test_include_dirs)
281
add_RunCMake_test(BundleUtilities)
282
283
284
285
286

function(add_RunCMake_test_try_compile)
  if(CMAKE_VERSION VERSION_LESS 3.9.20170907 AND "x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC")
    # Older CMake versions do not know about MSVC language standards.
    # Approximate our logic from MSVC-CXX.cmake.
287
    if ((NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.0.24215.1 AND
288
         CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.10) OR
289
         NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.10.25017)
290
      set(CMAKE_CXX_STANDARD_DEFAULT 14)
291
    elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 16.0)
292
293
294
295
      set(CMAKE_CXX_STANDARD_DEFAULT "")
    else()
      unset(CMAKE_CXX_STANDARD_DEFAULT)
    endif()
296
  endif()
297
  foreach(var
298
      CMAKE_SYSTEM_NAME
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
      CMAKE_C_COMPILER_ID
      CMAKE_C_COMPILER_VERSION
      CMAKE_C_STANDARD_DEFAULT
      CMAKE_CXX_COMPILER_ID
      CMAKE_CXX_COMPILER_VERSION
      CMAKE_CXX_STANDARD_DEFAULT
      CMake_TEST_CUDA
      )
    if(DEFINED ${var})
      list(APPEND try_compile_ARGS -D${var}=${${var}})
    endif()
  endforeach()
  add_RunCMake_test(try_compile)
endfunction()
add_RunCMake_test_try_compile()

315
316
add_RunCMake_test(try_run -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME}
                          -DCMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID})
317
add_RunCMake_test(set)
318
add_RunCMake_test(variable_watch)
319
add_RunCMake_test(while)
320
add_RunCMake_test(CMP0004)
321
add_RunCMake_test(TargetPolicies)
322
add_RunCMake_test(alias_targets)
323
add_RunCMake_test(interface_library)
324
add_RunCMake_test(no_install_prefix)
325
add_RunCMake_test(configure_file)
326
add_RunCMake_test(CTestTimeoutAfterMatch)
327

328
329
find_package(Qt4 QUIET)
find_package(Qt5Core QUIET)
330
if (QT4_FOUND AND Qt5Core_FOUND AND NOT Qt5Core_VERSION VERSION_LESS 5.1.0)
331
332
  add_RunCMake_test(IncompatibleQt)
endif()
333
if (QT4_FOUND)
334
  add_RunCMake_test(ObsoleteQtMacros -DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE})
335
endif()
336

337
338
339
340
341
find_package(PkgConfig QUIET)
if(PKG_CONFIG_FOUND)
  add_RunCMake_test(FindPkgConfig)
endif()

342
if(CMake_TEST_FindGTK2)
343
344
345
  add_RunCMake_test(FindGTK2)
endif()

Brad King's avatar
Brad King committed
346
if("${CMAKE_GENERATOR}" MATCHES "Visual Studio")
347
  add_RunCMake_test(include_external_msproject -DVS_PLATFORM_NAME=${CMAKE_VS_PLATFORM_NAME})
348
  if("${CMAKE_GENERATOR}" MATCHES "Visual Studio (9|10)" AND NOT CMAKE_VS_DEVENV_COMMAND)
349
350
351
    set(NO_USE_FOLDERS 1)
  endif()
  add_RunCMake_test(VSSolution -DNO_USE_FOLDERS=${NO_USE_FOLDERS})
352
endif()
353

354
if("${CMAKE_GENERATOR}" MATCHES "Visual Studio ([^9]|9[0-9])")
355
  add_RunCMake_test(VS10Project)
356
357
358
  if( vs12 AND wince )
    add_RunCMake_test( VS10ProjectWinCE "-DRunCMake_GENERATOR_PLATFORM=${wince_sdk}")
  endif()
359
360
endif()

361
if(XCODE_VERSION)
362
  add_RunCMake_test(XcodeProject -DXCODE_VERSION=${XCODE_VERSION})
363
364
365
366
367
368
369

  # This test can take a very long time due to lots of combinations.
  # Use a long default timeout and provide an option to customize it.
  if(NOT DEFINED CMake_TEST_XcodeProject_TIMEOUT)
    set(CMake_TEST_XcodeProject_TIMEOUT 2000)
  endif()
  set_property(TEST RunCMake.XcodeProject PROPERTY TIMEOUT ${CMake_TEST_XcodeProject_TIMEOUT})
370
371
endif()

372
if(CMAKE_C_COMPILER_ID STREQUAL "AppleClang"
373
374
375
376
    AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 6.0)
  add_RunCMake_test(Framework)
endif()

377
add_RunCMake_test(File_Generate)
378
add_RunCMake_test(ExportWithoutLanguage)
379
add_RunCMake_test(target_link_directories)
380
add_RunCMake_test(target_link_libraries)
381
382
add_RunCMake_test(add_link_options -DCMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID})
add_RunCMake_test(target_link_options -DCMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID})
383

384
add_RunCMake_test(target_compile_definitions)
385
add_RunCMake_test(target_compile_features)
386
387
388
add_RunCMake_test(target_compile_options)
add_RunCMake_test(target_include_directories)
add_RunCMake_test(target_sources)
389
add_RunCMake_test(CheckModules)
390
add_RunCMake_test(CheckIPOSupported)
391
add_RunCMake_test(CommandLine -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME})
392
add_RunCMake_test(CommandLineTar)
393

394
395
396
397
398
399
400
if(CMAKE_PLATFORM_NO_VERSIONED_SONAME OR (NOT CMAKE_SHARED_LIBRARY_SONAME_FLAG AND NOT CMAKE_SHARED_LIBRARY_SONAME_C_FLAG))
  set(NO_NAMELINK 1)
else()
  set(NO_NAMELINK 0)
endif()

add_RunCMake_test(install -DNO_NAMELINK=${NO_NAMELINK} -DCYGWIN=${CYGWIN})
401
add_RunCMake_test(CPackCommandLine)
402
add_RunCMake_test(CPackConfig)
403
add_RunCMake_test(CPackInstallProperties)
404
add_RunCMake_test(ExternalProject)
Craig Scott's avatar
Craig Scott committed
405
add_RunCMake_test(FetchContent)
406
set(CTestCommandLine_ARGS -DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE})
407
if(NOT CMake_TEST_EXTERNAL_CMAKE)
408
  list(APPEND CTestCommandLine_ARGS -DTEST_AFFINITY=$<TARGET_FILE:testAffinity>)
409
endif()
410
411
add_executable(print_stdin print_stdin.c)
add_RunCMake_test(CTestCommandLine -DTEST_PRINT_STDIN=$<TARGET_FILE:print_stdin>)
412
add_RunCMake_test(CacheNewline)
413
414
415
416
417
# Only run this test on unix platforms that support
# symbolic links
if(UNIX)
  add_RunCMake_test(CPackSymlinks)
endif()
418
419
420

set(IfacePaths_INCLUDE_DIRECTORIES_ARGS -DTEST_PROP=INCLUDE_DIRECTORIES)
add_RunCMake_test(IfacePaths_INCLUDE_DIRECTORIES TEST_DIR IfacePaths)
421

422
423
424
set(IfacePaths_SOURCES_ARGS -DTEST_PROP=SOURCES)
add_RunCMake_test(IfacePaths_SOURCES TEST_DIR IfacePaths)

425
# Matlab module related tests
426
427
428
429
430
431
432
433
434
435
if(CMake_TEST_FindMatlab OR CMake_TEST_FindMatlab_MCR OR (NOT "${CMake_TEST_FindMatlab_MCR_ROOT_DIR}" STREQUAL ""))
    set(FindMatlab_additional_test_options )
    if(CMake_TEST_FindMatlab_MCR OR NOT "${CMake_TEST_FindMatlab_MCR_ROOT_DIR}" STREQUAL "")
      set(FindMatlab_additional_test_options -DIS_MCR=TRUE)
    endif()
    if(NOT "${CMake_TEST_FindMatlab_MCR_ROOT_DIR}" STREQUAL "")
      set(FindMatlab_additional_test_options ${FindMatlab_additional_test_options} "-DMCR_ROOT:FILEPATH=${CMake_TEST_FindMatlab_MCR_ROOT_DIR}")
    endif()

  add_RunCMake_test(FindMatlab ${FindMatlab_additional_test_options})
436
endif()
437
438

add_executable(pseudo_emulator pseudo_emulator.c)
439
add_executable(pseudo_emulator_custom_command pseudo_emulator_custom_command.c)
440
add_RunCMake_test(CrosscompilingEmulator
441
442
 -DPSEUDO_EMULATOR=$<TARGET_FILE:pseudo_emulator>
 -DPSEUDO_EMULATOR_CUSTOM_COMMAND=$<TARGET_FILE:pseudo_emulator_custom_command>)
443
if("${CMAKE_GENERATOR}" MATCHES "Make|Ninja")
444
445
  if(UNIX AND NOT CYGWIN)
    execute_process(COMMAND ldd --help
446
447
      OUTPUT_VARIABLE LDD_HELP
      ERROR_VARIABLE LDD_ERR)
448
449
450
451
452
    if("${LDD_HELP}" MATCHES
        "(-r, --function-relocs.*process data and function relocations.*-u, --unused.*print unused direct dependencies)")
      add_RunCMake_test(LinkWhatYouUse)
    endif()
  endif()
453
  add_executable(pseudo_tidy pseudo_tidy.c)
454
  add_executable(pseudo_iwyu pseudo_iwyu.c)
455
  add_executable(pseudo_cpplint pseudo_cpplint.c)
456
  add_executable(pseudo_cppcheck pseudo_cppcheck.c)
457
  add_RunCMake_test(ClangTidy -DPSEUDO_TIDY=$<TARGET_FILE:pseudo_tidy>)
458
  add_RunCMake_test(IncludeWhatYouUse -DPSEUDO_IWYU=$<TARGET_FILE:pseudo_iwyu>)
459
  add_RunCMake_test(Cpplint -DPSEUDO_CPPLINT=$<TARGET_FILE:pseudo_cpplint>)
460
  add_RunCMake_test(Cppcheck -DPSEUDO_CPPCHECK=$<TARGET_FILE:pseudo_cppcheck>)
461
462
463
464
465
466
  add_RunCMake_test(MultiLint
    -DPSEUDO_TIDY=$<TARGET_FILE:pseudo_tidy>
    -DPSEUDO_IWYU=$<TARGET_FILE:pseudo_iwyu>
    -DPSEUDO_CPPLINT=$<TARGET_FILE:pseudo_cpplint>
    -DPSEUDO_CPPCHECK=$<TARGET_FILE:pseudo_cppcheck>
    )
467
468
469
  if(DEFINED CMake_TEST_CUDA)
    list(APPEND CompilerLauncher_ARGS -DCMake_TEST_CUDA=${CMake_TEST_CUDA})
  endif()
470
471
472
  if(CMAKE_Fortran_COMPILER)
    list(APPEND CompilerLauncher_ARGS -DCMake_TEST_Fortran=1)
  endif()
473
  add_RunCMake_test(CompilerLauncher)
474
  add_RunCMake_test(ctest_labels_for_subprojects)
475
endif()
476

477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
set(cpack_tests
  DEB.CUSTOM_NAMES
  DEB.DEBUGINFO
  DEB.DEFAULT_PERMISSIONS
  DEB.DEPENDENCIES
  DEB.EMPTY_DIR
  DEB.VERSION
  DEB.EXTRA
  DEB.GENERATE_SHLIBS
  DEB.GENERATE_SHLIBS_LDCONFIG
  DEB.LONG_FILENAMES
  DEB.MINIMAL
  DEB.PER_COMPONENT_FIELDS
  DEB.TIMESTAMPS
  DEB.MD5SUMS
  DEB.DEB_PACKAGE_VERSION_BACK_COMPATIBILITY

  RPM.CUSTOM_BINARY_SPEC_FILE
  RPM.CUSTOM_NAMES
  RPM.DEBUGINFO
  RPM.DEFAULT_PERMISSIONS
  RPM.DEPENDENCIES
  RPM.DIST
  RPM.EMPTY_DIR
  RPM.VERSION
  RPM.INSTALL_SCRIPTS
  RPM.MAIN_COMPONENT
  RPM.MINIMAL
  RPM.PARTIALLY_RELOCATABLE_WARNING
  RPM.PER_COMPONENT_FIELDS
  RPM.SINGLE_DEBUGINFO
  RPM.EXTRA_SLASH_IN_PATH
  RPM.SOURCE_PACKAGE
  RPM.SUGGESTS
  RPM.SYMLINKS
  RPM.USER_FILELIST

  7Z
  TBZ2
  TGZ
  TXZ
  TZ
  ZIP
  STGZ
  External
  )
add_RunCMake_test_group(CPack "${cpack_tests}")
524
525
526
# add a test to make sure symbols are exported from a shared library
# for MSVC compilers CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS property is used
add_RunCMake_test(AutoExportDll)
527

528
529
add_RunCMake_test(AndroidMK)

530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
if(CMake_TEST_ANDROID_NDK OR CMake_TEST_ANDROID_STANDALONE_TOOLCHAIN)
  if(NOT "${CMAKE_GENERATOR}" MATCHES "Make|Ninja")
    message(FATAL_ERROR "Android tests supported only by Makefile and Ninja generators")
  endif()
  foreach(v TEST_ANDROID_NDK TEST_ANDROID_STANDALONE_TOOLCHAIN)
    if(CMake_${v})
      string(REPLACE ";" "|" ${v} "${CMake_${v}}")
      list(APPEND Android_ARGS "-D${v}=${${v}}")
    endif()
  endforeach()

  add_RunCMake_test(Android)

  # This test can take a very long time due to lots of combinations.
  # Use a long default timeout and provide an option to customize it.
  if(NOT DEFINED CMake_TEST_ANDROID_TIMEOUT)
    set(CMake_TEST_ANDROID_TIMEOUT 3000)
  endif()
  set_property(TEST RunCMake.Android PROPERTY TIMEOUT ${CMake_TEST_ANDROID_TIMEOUT})
endif()
550

551
if(${CMAKE_GENERATOR} MATCHES "Visual Studio ([^9]|9[0-9])")
552
  add_RunCMake_test(CSharpCustomCommand)
553
  add_RunCMake_test(CSharpReferenceImport)
554
endif()