diff options
| -rw-r--r-- | tests/projects/package/components/xmake.lua | 2 | ||||
| -rw-r--r-- | xmake/modules/private/action/require/impl/register_packages.lua | 19 |
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 |
