summaryrefslogtreecommitdiff
path: root/Tests/CTestConfig/CMakeLists.txt
blob: 8c19adbe294600de7dbf8584d1339f7640a1a0fc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
cmake_minimum_required(VERSION 3.9)
project(CTestConfig)

include(CTest)


# We expect this configure to occur through a 'ctest -D Experimental' or a
# 'ctest -S script.cmake' call.
#
# In either case, we expect CMAKE_BUILD_TYPE to be defined for single-configuration
# build trees and not defined for multi-configuration build trees. The value of
# CMAKE_CONFIGURATION_TYPES should not be relied upon to determine whether we
# are using a multi-config generator or not, the GENERATOR_IS_MULTI_CONFIG
# global property is the canonical way to do that as of CMake 3.9.
#
get_property(_isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
if(_isMultiConfig)
  if(NOT DEFINED CMAKE_CONFIGURATION_TYPES OR CMAKE_CONFIGURATION_TYPES STREQUAL "")
    message(FATAL_ERROR "CMAKE_CONFIGURATION_TYPES is not defined or is empty "
        "(but must be defined and non-empty for a multi-configuration generator)")
  endif()
  if(DEFINED CMAKE_BUILD_TYPE AND NOT CMAKE_BUILD_TYPE STREQUAL "")
    message(FATAL_ERROR "CMAKE_BUILD_TYPE='${CMAKE_BUILD_TYPE}' is defined and non-empty "
        "(but should not be for a multi-configuration generator)")
  endif()
  set(_configs ${CMAKE_CONFIGURATION_TYPES})
else()
  # Populating CMAKE_CONFIGURATION_TYPES even for single config generators is
  # common enough for user projects that we don't want to consider it an error.
  # We just need CMAKE_BUILD_TYPE to be set and ignore CMAKE_CONFIGURATION_TYPES.
  if(NOT DEFINED CMAKE_BUILD_TYPE OR CMAKE_BUILD_TYPE STREQUAL "")
    message(FATAL_ERROR "CMAKE_BUILD_TYPE is not defined or is empty "
        "(but should be defined and non-empty for a single-configuration generator)")
  endif()
  add_definitions(-DCMAKE_BUILD_TYPE="${CMAKE_BUILD_TYPE}")
  set(_configs ${CMAKE_BUILD_TYPE})
endif()

add_executable(ctc CTestConfig.cxx)


foreach(cfg ${_configs})
  add_test(NAME ctc-${cfg} CONFIGURATIONS ${cfg} COMMAND ctc --config $<CONFIGURATION>)

  if(_isMultiConfig)
    set_property(TEST ctc-${cfg}
      PROPERTY PASS_REGULAR_EXPRESSION "CMAKE_INTDIR is ${cfg}")
    set_property(TEST ctc-${cfg}
      PROPERTY FAIL_REGULAR_EXPRESSION "CMAKE_BUILD_TYPE is")
  else()
    set_property(TEST ctc-${cfg}
      PROPERTY PASS_REGULAR_EXPRESSION "CMAKE_BUILD_TYPE is ${cfg}")
    set_property(TEST ctc-${cfg}
      PROPERTY FAIL_REGULAR_EXPRESSION "CMAKE_INTDIR is")
  endif()
endforeach()