summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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