summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2022-10-19 22:30:32 +0800
committerruki <[email protected]>2022-10-19 22:30:32 +0800
commit4b1fea104fcf5e7aa0d180e06e2a548468534e7f (patch)
treecfee1bd35462517ef54ac3f9912f92b171a71637
parent9b1e01c0b6deb3eaae25038643e11ea482ea248a (diff)
improve to register packages
-rw-r--r--tests/projects/package/components/xmake.lua2
-rw-r--r--xmake/modules/private/action/require/impl/register_packages.lua19
2 files changed, 19 insertions, 2 deletions
diff --git a/tests/projects/package/components/xmake.lua b/tests/projects/package/components/xmake.lua
index 888ee11c8..a8d955fb8 100644
--- a/tests/projects/package/components/xmake.lua
+++ b/tests/projects/package/components/xmake.lua
@@ -5,7 +5,7 @@ add_requires("sfml")
target("graphics")
set_kind("static")
add_files("src/graphics.cpp")
- add_packages("sfml", {components = {"graphics", "system"}, public = true})
+ add_packages("sfml", {components = {"graphics", "window", "system"}, public = true})
target("network")
set_kind("static")
diff --git a/xmake/modules/private/action/require/impl/register_packages.lua b/xmake/modules/private/action/require/impl/register_packages.lua
index 1bedc2969..59d9093e5 100644
--- a/xmake/modules/private/action/require/impl/register_packages.lua
+++ b/xmake/modules/private/action/require/impl/register_packages.lua
@@ -34,7 +34,7 @@ end
-- libs: includedirs, links, linkdirs ...
function _register_required_package_libs(instance, required_package, is_deps)
if instance:is_library() then
- local fetchinfo = instance:fetch()
+ local fetchinfo = table.clone(instance:fetch())
if fetchinfo then
fetchinfo.name = nil
if is_deps then
@@ -50,7 +50,24 @@ function _register_required_package_libs(instance, required_package, is_deps)
fetchinfo.static = nil
fetchinfo.shared = nil
end
+
+ -- merge into the root values
+ local components = fetchinfo.components
+ fetchinfo.components = nil
required_package:add(fetchinfo)
+
+ -- merge into the components values
+ local required_components = required_package:get("components")
+ if required_components then
+ local components_base = required_components.__base or {}
+ for k, v in pairs(fetchinfo) do
+ local values = table.wrap(components_base[k])
+ components_base[k] = table.unwrap(table.unique(table.join(values, v)))
+ end
+ required_components.__base = components_base
+ else
+ required_package:set("components", components)
+ end
end
end
end