|  | @@ -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}
 |