diff --git a/modules/vstudio/tests/vc2010/test_globals.lua b/modules/vstudio/tests/vc2010/test_globals.lua index 88c49a40..48931030 100644 --- a/modules/vstudio/tests/vc2010/test_globals.lua +++ b/modules/vstudio/tests/vc2010/test_globals.lua @@ -253,3 +253,45 @@ ]] end + +-- +-- Check that the "latest" systemversion works. +-- note: we override the os.getWindowsRegistry method for reliable tests. +-- + + function suite.windowsTargetPlatformVersionLatest_on2017() + p.action.set("vs2017") + systemversion "latest" + local oldRegistry = os["getWindowsRegistry"] + os["getWindowsRegistry"] = function (key) return "10.0.11111" end + prepare() + os["getWindowsRegistry"] = oldRegistry + test.capture [[ + + {42B5DBC6-AE1F-903D-F75D-41E363076E92} + true + Win32Proj + MyProject + 10.0.11111.0 + + ]] + end + +-- +-- Check that the "latest" systemversion will not add +-- when the action is less than 2017 +-- + + function suite.windowsTargetPlatformVersionLatest_on2015() + p.action.set("vs2015") + systemversion "latest" + prepare() + test.capture [[ + + {42B5DBC6-AE1F-903D-F75D-41E363076E92} + true + Win32Proj + MyProject + + ]] + end diff --git a/modules/vstudio/vs2010_vcxproj.lua b/modules/vstudio/vs2010_vcxproj.lua index 3f2fe692..e4e83685 100644 --- a/modules/vstudio/vs2010_vcxproj.lua +++ b/modules/vstudio/vs2010_vcxproj.lua @@ -2356,9 +2356,16 @@ function m.targetPlatformVersion(prj) - local min = project.systemversion(prj) - if min ~= nil and _ACTION >= "vs2015" then - m.element("WindowsTargetPlatformVersion", nil, min) + if _ACTION >= "vs2015" then + local min = project.systemversion(prj) + -- handle special "latest" version + if min == "latest" then + -- vs2015 and lower can't build against SDK 10 + min = iif(_ACTION >= "vs2017", m.latestSDK10Version(), nil) + end + if min ~= nil then + m.element("WindowsTargetPlatformVersion", nil, min) + end end end @@ -2484,6 +2491,19 @@ return m.conditionFromConfigText(vstudio.projectConfig(cfg)) end +-- +-- Get the latest installed SDK 10 version from the registry. +-- + + function m.latestSDK10Version() + local arch = iif(os.is64bit(), "\\WOW6432Node\\", "\\") + local version = os.getWindowsRegistry("HKLM:SOFTWARE" .. arch .."Microsoft\\Microsoft SDKs\\Windows\\v10.0\\ProductVersion") + if version ~= nil then + return version .. ".0" + else + return nil + end + end --