|
|
@@ -1,4 +1,4 @@
|
|
|
-cmake_minimum_required(VERSION 2.8)
|
|
|
+cmake_minimum_required(VERSION 3.9)
|
|
|
project(CTestConfig)
|
|
|
|
|
|
include(CTest)
|
|
|
@@ -8,32 +8,41 @@ include(CTest)
|
|
|
# '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.
|
|
|
+# 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.
|
|
|
#
|
|
|
-if(CMAKE_CONFIGURATION_TYPES)
|
|
|
- # multi-configuration: expect not defined, error if defined
|
|
|
+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_CONFIGURATION_TYPES='${CMAKE_CONFIGURATION_TYPES}' CMAKE_BUILD_TYPE='${CMAKE_BUILD_TYPE}' is defined and non-empty (but should not be for a multi-configuration generator)")
|
|
|
+ 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()
|
|
|
- # single-configuration: expect defined, error if not defined
|
|
|
+ # 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)")
|
|
|
+ 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()
|
|
|
-endif()
|
|
|
-
|
|
|
-
|
|
|
-if(DEFINED CMAKE_BUILD_TYPE AND NOT CMAKE_BUILD_TYPE STREQUAL "")
|
|
|
add_definitions(-DCMAKE_BUILD_TYPE="${CMAKE_BUILD_TYPE}")
|
|
|
+ set(_configs ${CMAKE_BUILD_TYPE})
|
|
|
endif()
|
|
|
|
|
|
add_executable(ctc CTestConfig.cxx)
|
|
|
|
|
|
|
|
|
-foreach(cfg ${CMAKE_CONFIGURATION_TYPES} ${CMAKE_BUILD_TYPE})
|
|
|
+foreach(cfg ${_configs})
|
|
|
add_test(NAME ctc-${cfg} CONFIGURATIONS ${cfg} COMMAND ctc --config $<CONFIGURATION>)
|
|
|
|
|
|
- if(CMAKE_CONFIGURATION_TYPES)
|
|
|
+ if(_isMultiConfig)
|
|
|
set_property(TEST ctc-${cfg}
|
|
|
PROPERTY PASS_REGULAR_EXPRESSION "CMAKE_INTDIR is ${cfg}")
|
|
|
set_property(TEST ctc-${cfg}
|