include(RunCMake) set(RunCMake_GENERATOR_PLATFORM "") run_cmake(NoPlatform) if("${RunCMake_GENERATOR}" MATCHES "^Visual Studio ([89]|1[0124567])( 20[0-9][0-9])?$") set(RunCMake_GENERATOR_PLATFORM "x64") run_cmake(x64Platform) else() set(RunCMake_GENERATOR_PLATFORM "Bad Platform") run_cmake(BadPlatform) endif() set(RunCMake_GENERATOR_PLATFORM "") set(RunCMake_TEST_OPTIONS -A "Test Platform" -A "Extra Platform") run_cmake(TwoPlatforms) unset(RunCMake_TEST_OPTIONS) if("${RunCMake_GENERATOR}" MATCHES "^Visual Studio ([89]|1[0124567])( 20[0-9][0-9])?$") set(RunCMake_TEST_OPTIONS -DCMAKE_TOOLCHAIN_FILE=${RunCMake_SOURCE_DIR}/TestPlatform-toolchain.cmake) run_cmake(TestPlatformToolchain) unset(RunCMake_TEST_OPTIONS) else() set(RunCMake_TEST_OPTIONS -DCMAKE_TOOLCHAIN_FILE=${RunCMake_SOURCE_DIR}/BadPlatform-toolchain.cmake) run_cmake(BadPlatformToolchain) unset(RunCMake_TEST_OPTIONS) endif() if("${RunCMake_GENERATOR}" MATCHES "^Visual Studio (1[4567])( 20[0-9][0-9])?$") unset(ENV{WindowsSDKVersion}) set(RunCMake_GENERATOR_PLATFORM "Test Platform,nocomma") run_cmake(BadFieldNoComma) set(RunCMake_GENERATOR_PLATFORM "Test Platform,unknown=") run_cmake(BadFieldUnknown) set(RunCMake_GENERATOR_PLATFORM "version=") run_cmake(BadVersionEmpty) set(RunCMake_GENERATOR_PLATFORM "version=10.0.0.0") run_cmake(BadVersionMissing) set(RunCMake_GENERATOR_PLATFORM "version=1.2.3.4") run_cmake(BadVersionUnsupported) if(RunCMake_GENERATOR MATCHES "^Visual Studio (1[45]) ") set(RunCMake_GENERATOR_PLATFORM "version=10.0") run_cmake(BadVersionPre2019) unset(RunCMake_GENERATOR_PLATFORM) else() set(expect_version "10.0") set(RunCMake_GENERATOR_PLATFORM "version=${expect_version}") set(RunCMake_TEST_VARIANT_DESCRIPTION "-${expect_version}") run_cmake_with_options(VersionExists -DCMAKE_SYSTEM_VERSION=10.0) unset(RunCMake_GENERATOR_PLATFORM) endif() set(kits "") cmake_host_system_information(RESULT kitsRoot10 QUERY WINDOWS_REGISTRY "HKLM/SOFTWARE/Microsoft/Windows Kits/Installed Roots" VALUE "KitsRoot10" VIEW 64_32 ERROR_VARIABLE kitsRoot10Error ) if(NOT kitsRoot10Error AND IS_DIRECTORY "${kitsRoot10}/include") cmake_path(SET kitsInclude "${kitsRoot10}/include") file(GLOB kits RELATIVE "${kitsInclude}" "${kitsInclude}/*/um/windows.h") list(TRANSFORM kits REPLACE "/.*" "") endif() cmake_host_system_information(RESULT kitsRoot81 QUERY WINDOWS_REGISTRY "HKLM/SOFTWARE/Microsoft/Windows Kits/Installed Roots" VALUE "KitsRoot81" VIEW 64_32 ERROR_VARIABLE kitsRoot81Error ) if(NOT kitsRoot81Error AND EXISTS "${kitsRoot81}/include/um/windows.h") list(PREPEND kits "8.1") endif() if(kits) message(STATUS "Available Kits: ${kits}") if(RunCMake_GENERATOR MATCHES "^Visual Studio 14 ") set(kitMax 10.0.14393.0) else() set(kitMax "") endif() if(kitMax) set(kitsIn "${kits}") set(kits "") foreach(kit IN LISTS kitsIn) if(kit VERSION_LESS_EQUAL "${kitMax}") list(APPEND kits "${kit}") else() message(STATUS "Excluding Kit ${kit} > ${kitMax}") endif() endforeach() endif() elseif(NOT RunCMake_GENERATOR MATCHES "^Visual Studio 14 ") message(FATAL_ERROR "Could not find any Windows SDKs to drive test cases.") endif() foreach(expect_version IN LISTS kits) set(RunCMake_GENERATOR_PLATFORM "version=${expect_version}") set(RunCMake_TEST_VARIANT_DESCRIPTION "-${expect_version}") run_cmake_with_options(VersionExists -DCMAKE_SYSTEM_VERSION=10.0) unset(RunCMake_GENERATOR_PLATFORM) endforeach() foreach(expect_version IN LISTS kits) set(RunCMake_TEST_VARIANT_DESCRIPTION "-CMP0149-OLD-${expect_version}") run_cmake_with_options(VersionExists -DCMAKE_SYSTEM_VERSION=${expect_version} -DCMAKE_POLICY_DEFAULT_CMP0149=OLD) endforeach() if(kits MATCHES "(^|;)([0-9.]+)$") set(expect_version "${CMAKE_MATCH_2}") foreach(test_version IN LISTS kits) set(RunCMake_TEST_VARIANT_DESCRIPTION "-CMP0149-NEW-${test_version}") run_cmake_with_options(VersionExists -DCMAKE_SYSTEM_VERSION=${test_version} -DCMAKE_POLICY_DEFAULT_CMP0149=NEW) endforeach() endif() list(REMOVE_ITEM kits 8.1) foreach(expect_version IN LISTS kits) set(RunCMake_TEST_VARIANT_DESCRIPTION "-WindowsSDKVersion-${expect_version}") set(ENV{WindowsSDKVersion} "${expect_version}\\") run_cmake_with_options(VersionExists -DCMAKE_SYSTEM_VERSION=10.0 -DCMAKE_POLICY_DEFAULT_CMP0149=NEW) unset(ENV{WindowsSDKVersion}) endforeach() endif()