From 0504e8430a4d76ccda856087489d25085a863387 Mon Sep 17 00:00:00 2001 From: ruki Date: Tue, 10 Jun 2025 00:51:25 +0800 Subject: translate file path for vsxmake --- xmake/plugins/project/vstudio/impl/vsutils.lua | 4 ++++ xmake/plugins/project/vsxmake/vsxmake.lua | 23 ++++++++++------------- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/xmake/plugins/project/vstudio/impl/vsutils.lua b/xmake/plugins/project/vstudio/impl/vsutils.lua index 9abf7a7b9..af184b536 100644 --- a/xmake/plugins/project/vstudio/impl/vsutils.lua +++ b/xmake/plugins/project/vstudio/impl/vsutils.lua @@ -52,3 +52,7 @@ function vsarch(arch) return arch end +-- translate file path (with namespace characters '::', it's invalid path characters on windows) +function translate_path(filepath) + return (filepath:gsub("::", "_")) +end diff --git a/xmake/plugins/project/vsxmake/vsxmake.lua b/xmake/plugins/project/vsxmake/vsxmake.lua index d5cd5e078..67b7bd0d7 100644 --- a/xmake/plugins/project/vsxmake/vsxmake.lua +++ b/xmake/plugins/project/vsxmake/vsxmake.lua @@ -174,6 +174,7 @@ function _trycp(file, target, targetname) end function _writefileifneeded(file, content) + file = vsutils.translate_path(file) if os.isfile(file) and io.readfile(file) == content then dprint("skipped file %s since the file has the same content", path.relative(file)) return @@ -219,11 +220,7 @@ function make(version) end return function(outputdir) - - -- trace vprint("using project kind vs%d", version) - - -- check assert(version >= 2010, "vsxmake does not support vs version lower than 2010") -- get info and params @@ -240,20 +237,20 @@ function make(version) for _, target in ipairs(info.targets) do local paramsprovidertarget = _buildparams(info, target, "") - local proj_dir = info._targets[target].vcxprojdir + local vcxproj_dir = info._targets[target].vcxprojdir -- write project file - local proj = path.join(proj_dir, target .. ".vcxproj") - _writefileifneeded(proj, render(template_vcx, "#([A-Za-z0-9_,%.%*%(%)]+)#", "@([^@]+)@", paramsprovidertarget)) + local vcxproj_file = path.join(vcxproj_dir, target .. ".vcxproj") + _writefileifneeded(vcxproj_file, render(template_vcx, "#([A-Za-z0-9_,%.%*%(%)]+)#", "@([^@]+)@", paramsprovidertarget)) - local projfil = path.join(proj_dir, target .. ".vcxproj.filters") - _writefileifneeded(projfil, render(template_fil, "#([A-Za-z0-9_,%.%*%(%)]+)#", "@([^@]+)@", paramsprovidertarget)) + local vcxproj_filters = path.join(vcxproj_dir, target .. ".vcxproj.filters") + _writefileifneeded(vcxproj_filters, render(template_fil, "#([A-Za-z0-9_,%.%*%(%)]+)#", "@([^@]+)@", paramsprovidertarget)) -- add project custom file - _trycp(template_props, proj_dir) - _trycp(template_targets, proj_dir) - _trycp(template_items, proj_dir) - _trycp(template_itemfil, proj_dir) + _trycp(template_props, vcxproj_dir) + _trycp(template_targets, vcxproj_dir) + _trycp(template_items, vcxproj_dir) + _trycp(template_itemfil, vcxproj_dir) end -- clear config and local cache -- cgit v1.3.1 From 15ce1c9a791d90ca0d714c8b39068c3ab3d354e0 Mon Sep 17 00:00:00 2001 From: ruki Date: Tue, 10 Jun 2025 00:51:47 +0800 Subject: fix imports --- xmake/plugins/project/vsxmake/vsxmake.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/xmake/plugins/project/vsxmake/vsxmake.lua b/xmake/plugins/project/vsxmake/vsxmake.lua index 67b7bd0d7..1bff1b3f2 100644 --- a/xmake/plugins/project/vsxmake/vsxmake.lua +++ b/xmake/plugins/project/vsxmake/vsxmake.lua @@ -26,6 +26,7 @@ import("render") import("getinfo") import("core.project.config") import("core.cache.localcache") +import("vstudio.impl.vsutils", {rootdir = path.join(os.programdir(), "plugins", "project")}) local template_root = path.join(os.programdir(), "scripts", "vsxmake", "vsproj", "templates") local template_sln = path.join(template_root, "sln", "vsxmake.sln") -- cgit v1.3.1 From dfd765e0522345a376f019f655915827e23f69b2 Mon Sep 17 00:00:00 2001 From: ruki Date: Tue, 10 Jun 2025 00:52:16 +0800 Subject: fix cp props --- xmake/plugins/project/vsxmake/vsxmake.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/xmake/plugins/project/vsxmake/vsxmake.lua b/xmake/plugins/project/vsxmake/vsxmake.lua index 1bff1b3f2..6477e9982 100644 --- a/xmake/plugins/project/vsxmake/vsxmake.lua +++ b/xmake/plugins/project/vsxmake/vsxmake.lua @@ -167,6 +167,7 @@ end function _trycp(file, target, targetname) targetname = targetname or path.filename(file) local targetfile = path.join(target, targetname) + targetfile = vsutils.translate_path(targetfile) if os.isfile(targetfile) then dprint("skipped file %s since the file already exists", path.relative(targetfile)) return -- cgit v1.3.1 From 18d52f33a6d4345db39240d15d27d52fa36a4b4d Mon Sep 17 00:00:00 2001 From: ruki Date: Wed, 11 Jun 2025 23:24:06 +0800 Subject: update target name --- xmake/plugins/project/vsxmake/getinfo.lua | 3 ++- xmake/scripts/vsxmake/vsproj/templates/sln/Project(target) | 2 +- xmake/scripts/vsxmake/vsproj/templates/vcxproj/#target#.vcxproj | 2 +- xmake/scripts/vsxmake/vsproj/templates/vcxproj/ProjectRef(dep) | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/xmake/plugins/project/vsxmake/getinfo.lua b/xmake/plugins/project/vsxmake/getinfo.lua index d9c4b4b6b..ad3b77c3c 100644 --- a/xmake/plugins/project/vsxmake/getinfo.lua +++ b/xmake/plugins/project/vsxmake/getinfo.lua @@ -495,7 +495,8 @@ function main(outputdir, vsinfo) local _target = targets[targetname] -- init target info - _target.target = targetname + _target.targetname = targetname + _target.targetname_inpath = vsutils.translate_path(targetname) _target.vcxprojdir = path.join(vsinfo.vcxproj_rootdir, targetname) _target.vcxprojdir_relative_sln = path.relative(_target.vcxprojdir, vsinfo.solution_dir) _target.target_id = hash.uuid4(targetname) diff --git a/xmake/scripts/vsxmake/vsproj/templates/sln/Project(target) b/xmake/scripts/vsxmake/vsproj/templates/sln/Project(target) index 87d435af2..e53697651 100644 --- a/xmake/scripts/vsxmake/vsproj/templates/sln/Project(target) +++ b/xmake/scripts/vsxmake/vsproj/templates/sln/Project(target) @@ -1,2 +1,2 @@ -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "#target#", "#vcxprojdir_relative_sln#\#target#.vcxproj", "{#target_id#}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "#targetname#", "#vcxprojdir_relative_sln#\#targetname_inpath#.vcxproj", "{#target_id#}" EndProject diff --git a/xmake/scripts/vsxmake/vsproj/templates/vcxproj/#target#.vcxproj b/xmake/scripts/vsxmake/vsproj/templates/vcxproj/#target#.vcxproj index 44af5ac40..21a7eb99a 100644 --- a/xmake/scripts/vsxmake/vsproj/templates/vcxproj/#target#.vcxproj +++ b/xmake/scripts/vsxmake/vsproj/templates/vcxproj/#target#.vcxproj @@ -21,7 +21,7 @@ #scriptdir# #projectdir# #projectfile# - #target# + #targetname# $(XMAKE_PROGRAM_DIR) diff --git a/xmake/scripts/vsxmake/vsproj/templates/vcxproj/ProjectRef(dep) b/xmake/scripts/vsxmake/vsproj/templates/vcxproj/ProjectRef(dep) index 33434eca3..13ef4b251 100644 --- a/xmake/scripts/vsxmake/vsproj/templates/vcxproj/ProjectRef(dep) +++ b/xmake/scripts/vsxmake/vsproj/templates/vcxproj/ProjectRef(dep) @@ -1,3 +1,3 @@ - + {#target_id#} -- cgit v1.3.1 From b18a8d7f74da0dc155eff9b6ed5e1d918ecede86 Mon Sep 17 00:00:00 2001 From: ruki Date: Wed, 11 Jun 2025 23:27:20 +0800 Subject: -a --- xmake/plugins/project/vsxmake/getinfo.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xmake/plugins/project/vsxmake/getinfo.lua b/xmake/plugins/project/vsxmake/getinfo.lua index ad3b77c3c..670f5d994 100644 --- a/xmake/plugins/project/vsxmake/getinfo.lua +++ b/xmake/plugins/project/vsxmake/getinfo.lua @@ -498,7 +498,7 @@ function main(outputdir, vsinfo) _target.targetname = targetname _target.targetname_inpath = vsutils.translate_path(targetname) _target.vcxprojdir = path.join(vsinfo.vcxproj_rootdir, targetname) - _target.vcxprojdir_relative_sln = path.relative(_target.vcxprojdir, vsinfo.solution_dir) + _target.vcxprojdir_relative_sln = vsutils.translate_path(path.relative(_target.vcxprojdir, vsinfo.solution_dir)) _target.target_id = hash.uuid4(targetname) _target.kind = target:kind() _target.absscriptdir = target:scriptdir() -- cgit v1.3.1 From c02d24431fd3392a19064760f7627738d72b3ef6 Mon Sep 17 00:00:00 2001 From: ruki Date: Wed, 11 Jun 2025 23:31:43 +0800 Subject: use # instead of _ --- xmake/plugins/project/vstudio/impl/vsutils.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xmake/plugins/project/vstudio/impl/vsutils.lua b/xmake/plugins/project/vstudio/impl/vsutils.lua index af184b536..265a7c7aa 100644 --- a/xmake/plugins/project/vstudio/impl/vsutils.lua +++ b/xmake/plugins/project/vstudio/impl/vsutils.lua @@ -54,5 +54,5 @@ end -- translate file path (with namespace characters '::', it's invalid path characters on windows) function translate_path(filepath) - return (filepath:gsub("::", "_")) + return (filepath:gsub("::", "#")) end -- cgit v1.3.1