summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2023-08-21 22:18:05 +0800
committerGitHub <[email protected]>2023-08-21 22:18:05 +0800
commitbba45b29a174e83ff6aff784e7aaec27bccb9ac0 (patch)
tree01e8ab80234a2478a500a11308a3c16bc7d57fac
parente73df8b4713c4b8c928c77d0baa4185be1db6517 (diff)
parent2dd4262bd17ce4559608189c5cfa8ba90f729304 (diff)
Merge pull request #4104 from xmake-io/extrafiles
Add extrafiles for vs/vsxmake project generators
-rw-r--r--xmake/core/project/target.lua1
-rw-r--r--xmake/plugins/project/vstudio/impl/vs201x.lua4
-rw-r--r--xmake/plugins/project/vstudio/impl/vs201x_vcxproj.lua8
-rw-r--r--xmake/plugins/project/vstudio/impl/vs201x_vcxproj_filters.lua18
-rw-r--r--xmake/plugins/project/vsxmake/getinfo.lua7
-rw-r--r--xmake/plugins/project/vsxmake/vsxmake.lua2
6 files changed, 22 insertions, 18 deletions
diff --git a/xmake/core/project/target.lua b/xmake/core/project/target.lua
index ca46a7b69..aa03fa48a 100644
--- a/xmake/core/project/target.lua
+++ b/xmake/core/project/target.lua
@@ -2454,6 +2454,7 @@ function target.apis()
, "target.add_cleanfiles"
, "target.add_configfiles"
, "target.add_installfiles"
+ , "target.add_extrafiles"
-- target.del_xxx (deprecated)
, "target.del_files"
-- target.remove_xxx
diff --git a/xmake/plugins/project/vstudio/impl/vs201x.lua b/xmake/plugins/project/vstudio/impl/vs201x.lua
index 511494b19..6acc09c69 100644
--- a/xmake/plugins/project/vstudio/impl/vs201x.lua
+++ b/xmake/plugins/project/vstudio/impl/vs201x.lua
@@ -530,14 +530,16 @@ function make(outputdir, vsinfo)
-- save all sourcefiles and headerfiles
_target.sourcefiles = table.unique(table.join(_target.sourcefiles or {}, (target:sourcefiles())))
_target.headerfiles = table.unique(table.join(_target.headerfiles or {}, (target:headerfiles())))
+ _target.extrafiles = table.unique(table.join(_target.extrafiles or {}, (target:get("extrafiles"))))
-- sort them to stabilize generation
table.sort(_target.sourcefiles)
table.sort(_target.headerfiles)
+ table.sort(_target.extrafiles)
-- save file groups
_target.filegroups = table.unique(table.join(_target.filegroups or {}, target:get("filegroups")))
-
+
for filegroup, groupconf in pairs(target:extraconf("filegroups")) do
_target.filegroups_extraconf = _target.filegroups_extraconf or {}
local mergedconf = _target.filegroups_extraconf[filegroup]
diff --git a/xmake/plugins/project/vstudio/impl/vs201x_vcxproj.lua b/xmake/plugins/project/vstudio/impl/vs201x_vcxproj.lua
index 1be380130..f5bb88d73 100644
--- a/xmake/plugins/project/vstudio/impl/vs201x_vcxproj.lua
+++ b/xmake/plugins/project/vstudio/impl/vs201x_vcxproj.lua
@@ -1067,7 +1067,7 @@ function _make_common_items(vcxprojfile, vsinfo, target)
end
-- make header file
-function _make_header_file(vcxprojfile, includefile, vcxprojdir)
+function _make_include_file(vcxprojfile, includefile, vcxprojdir)
vcxprojfile:print("<ClInclude Include=\"%s\" />", path.relative(path.absolute(includefile), vcxprojdir))
end
@@ -1343,13 +1343,13 @@ function _make_source_files(vcxprojfile, vsinfo, target)
vcxprojfile:leave("</ItemGroup>")
- -- add header files
+ -- add include files
local pcheader = target.pcxxheader or target.pcheader
vcxprojfile:enter("<ItemGroup>")
- for _, includefile in ipairs(target.headerfiles) do
+ for _, includefile in ipairs(table.join(target.headerfiles or {}, target.extrafiles)) do
-- we need to ignore pcheader file to fix https://github.com/xmake-io/xmake/issues/1171
if not pcheader or includefile ~= pcheader then
- _make_header_file(vcxprojfile, includefile, target.project_dir)
+ _make_include_file(vcxprojfile, includefile, target.project_dir)
end
end
vcxprojfile:leave("</ItemGroup>")
diff --git a/xmake/plugins/project/vstudio/impl/vs201x_vcxproj_filters.lua b/xmake/plugins/project/vstudio/impl/vs201x_vcxproj_filters.lua
index 572ec0622..caed16b2a 100644
--- a/xmake/plugins/project/vstudio/impl/vs201x_vcxproj_filters.lua
+++ b/xmake/plugins/project/vstudio/impl/vs201x_vcxproj_filters.lua
@@ -131,7 +131,7 @@ function _make_filters(filtersfile, vsinfo, target, vcxprojdir)
-- add filters
filtersfile:enter("<ItemGroup>")
local exists = {}
- for _, filepath in pairs(table.join(target.sourcefiles, target.headerfiles)) do
+ for _, filepath in pairs(table.join(target.sourcefiles, target.headerfiles or {}, target.extrafiles)) do
local filter = _make_filter(filepath, target, vcxprojdir)
while filter and filter ~= '.' do
if not exists[filter] then
@@ -177,15 +177,13 @@ function _make_sources(filtersfile, vsinfo, target, vcxprojdir)
filtersfile:leave("</ItemGroup>")
end
--- make headers
-function _make_headers(filtersfile, vsinfo, target, vcxprojdir)
-
- -- and headers
+-- make includes
+function _make_includes(filtersfile, vsinfo, target, vcxprojdir)
filtersfile:enter("<ItemGroup>")
- for _, headerfile in ipairs(target.headerfiles) do
- local filter = _make_filter(headerfile, target, vcxprojdir)
+ for _, includefile in ipairs(table.join(target.headerfiles or {}, target.extrafiles)) do
+ local filter = _make_filter(includefile, target, vcxprojdir)
if filter then
- filtersfile:enter("<ClInclude Include=\"%s\">", path.relative(path.absolute(headerfile), vcxprojdir))
+ filtersfile:enter("<ClInclude Include=\"%s\">", path.relative(path.absolute(includefile), vcxprojdir))
filtersfile:print("<Filter>%s</Filter>", filter)
filtersfile:leave("</ClInclude>")
end
@@ -218,8 +216,8 @@ function make(vsinfo, target)
-- make sources
_make_sources(filtersfile, vsinfo, target, vcxprojdir)
- -- make headers
- _make_headers(filtersfile, vsinfo, target, vcxprojdir)
+ -- make includes
+ _make_includes(filtersfile, vsinfo, target, vcxprojdir)
-- make tailer
_make_tailer(filtersfile, vsinfo)
diff --git a/xmake/plugins/project/vsxmake/getinfo.lua b/xmake/plugins/project/vsxmake/getinfo.lua
index 322292f72..2c3829284 100644
--- a/xmake/plugins/project/vsxmake/getinfo.lua
+++ b/xmake/plugins/project/vsxmake/getinfo.lua
@@ -496,14 +496,16 @@ function main(outputdir, vsinfo)
-- save all sourcefiles and headerfiles
_target.sourcefiles = table.unique(table.join(_target.sourcefiles or {}, (target:sourcefiles())))
_target.headerfiles = table.unique(table.join(_target.headerfiles or {}, (target:headerfiles())))
+ _target.extrafiles = table.unique(table.join(_target.extrafiles or {}, (target:get("extrafiles"))))
-- sort them to stabilize generation
table.sort(_target.sourcefiles)
table.sort(_target.headerfiles)
+ table.sort(_target.extrafiles)
-- save file groups
_target.filegroups = table.unique(table.join(_target.filegroups or {}, target:get("filegroups")))
-
+
for filegroup, groupconf in pairs(target:extraconf("filegroups")) do
_target.filegroups_extraconf = _target.filegroups_extraconf or {}
local mergedconf = _target.filegroups_extraconf[filegroup]
@@ -534,7 +536,8 @@ function main(outputdir, vsinfo)
local root = target.absscriptdir or projectdir
target.sourcefiles = table.imap(target.sourcefiles, function(_, v) return path.relative(v, projectdir) end)
target.headerfiles = table.imap(target.headerfiles, function(_, v) return path.relative(v, projectdir) end)
- for _, f in ipairs(table.join(target.sourcefiles, target.headerfiles)) do
+ target.extrafiles = table.imap(target.extrafiles, function(_, v) return path.relative(v, projectdir) end)
+ for _, f in ipairs(table.join(target.sourcefiles, target.headerfiles or {}, target.extrafiles)) do
local dir = _make_filter(f, target, root)
local escaped_f = vsutils.escape(f)
target._paths[f] =
diff --git a/xmake/plugins/project/vsxmake/vsxmake.lua b/xmake/plugins/project/vsxmake/vsxmake.lua
index 90fc1cf8e..50695ebc2 100644
--- a/xmake/plugins/project/vsxmake/vsxmake.lua
+++ b/xmake/plugins/project/vsxmake/vsxmake.lua
@@ -140,7 +140,7 @@ function _buildparams(info, target, default)
local files = info._targets[target].sourcefiles
table.insert(r, _filter_files(files, {".ui"}))
elseif args.incc then
- local files = info._targets[target].headerfiles
+ local files = table.join(info._targets[target].headerfiles or {}, info._targets[target].extrafiles)
table.insert(r, _filter_files(files, nil, {".natvis"}))
elseif args.incnatvis then
local files = info._targets[target].headerfiles