summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2023-06-22 21:02:04 +0800
committerruki <[email protected]>2023-06-22 21:02:04 +0800
commitd94de0431e41498ac7db3dc485ff50bbf2320497 (patch)
tree1dabede050f2b901fbff0954d25946c538c3e548
parentf6ab5618f9fe79edbb63546d94a52001e74dbce7 (diff)
upgrade vcproj
-rw-r--r--xmake/modules/package/tools/msbuild.lua3
-rw-r--r--xmake/modules/private/utils/upgrade_vsproj.lua29
2 files changed, 30 insertions, 2 deletions
diff --git a/xmake/modules/package/tools/msbuild.lua b/xmake/modules/package/tools/msbuild.lua
index a5ae6d9b4..0a2966855 100644
--- a/xmake/modules/package/tools/msbuild.lua
+++ b/xmake/modules/package/tools/msbuild.lua
@@ -29,7 +29,6 @@ function _get_parallel_njobs(opt)
return opt.jobs or option.get("jobs") or tostring(os.default_njob())
end
--- tra
-- get msvc
function _get_msvc(package)
local msvc = toolchain.load("msvc", {plat = package:plat(), arch = package:arch()})
@@ -97,7 +96,7 @@ function build(package, configs, opt)
-- upgrade vs solution file?
-- @see https://github.com/xmake-io/xmake/issues/3871
if slnfile and opt.upgrade then
- upgrade_vsproj.upgrade(slnfile, opt)
+ upgrade_vsproj.upgrade(slnfile, table.join(opt, {msvc = _get_msvc(package)}))
end
-- do build
diff --git a/xmake/modules/private/utils/upgrade_vsproj.lua b/xmake/modules/private/utils/upgrade_vsproj.lua
index ebd732c92..373c4d955 100644
--- a/xmake/modules/private/utils/upgrade_vsproj.lua
+++ b/xmake/modules/private/utils/upgrade_vsproj.lua
@@ -20,6 +20,8 @@
-- imports
import("core.base.option")
+import("core.tool.toolchain")
+import("plugins.project.vstudio.impl.vsinfo", {rootdir = os.programdir()})
-- the options
local options = {
@@ -29,14 +31,41 @@ local options = {
, {nil, "vs_projectfiles", "vs", nil, "Set the solution or project files." }
}
+-- get toolset version
+function _get_toolset_ver(vs_toolset)
+ local toolset_ver = nil
+ if vs_toolset then
+ local verinfo = vs_toolset:split('%.')
+ if #verinfo >= 2 then
+ toolset_ver = "v" .. verinfo[1] .. (verinfo[2]:sub(1, 1) or "0")
+ end
+ end
+ return toolset_ver
+end
+
-- upgrade *.sln
function _upgrade_sln(projectfile, opt)
opt = opt or {}
+ local msvc = opt.msvc or import("core.tool.toolchain").load("msvc")
+ local vs_version = opt.vs or msvc:config("vs")
+ local vs_info = assert(vsinfo(tonumber(vs_version)), "unknown vs version!")
+ io.gsub(projectfile, "Microsoft Visual Studio Solution File, Format Version %d+%.%d+",
+ "Microsoft Visual Studio Solution File, Format Version " .. vs_info.solution_version .. ".00")
+ io.gsub(projectfile, "# Visual Studio %d+", "# Visual Studio " .. vs_version)
end
-- upgrade *.vcxproj
function _upgrade_vcxproj(projectfile, opt)
opt = opt or {}
+ local msvc = opt.msvc or import("core.tool.toolchain").load("msvc")
+ local vs_version = opt.vs or msvc:config("vs")
+ local vs_info = assert(vsinfo(tonumber(vs_version)), "unknown vs version!")
+ local vs_sdkver = opt.vs_sdkver or msvc:config("vs_sdkver") or vs_info.sdk_version
+ local vs_toolset = _get_toolset_ver(opt.vs_toolset or msvc:config("vs_toolset")) or vs_info.toolset_version
+ io.gsub(projectfile, "<PlatformToolset>v%d+</PlatformToolset>",
+ "<PlatformToolset>" .. vs_toolset .. "</PlatformToolset>")
+ io.gsub(projectfile, "<WindowsTargetPlatformVersion>.*</WindowsTargetPlatformVersion>",
+ "<WindowsTargetPlatformVersion>" .. vs_sdkver .. "</WindowsTargetPlatformVersion>")
end
-- upgrade vs project file