diff options
| author | ruki <[email protected]> | 2022-10-19 22:36:19 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2022-10-19 22:36:19 +0800 |
| commit | f55de1eb50c29fc58bbaef1bc387035a8deabe6e (patch) | |
| tree | bdc81e4eca0e93c5c5814c42d8468814106acf3f | |
| parent | 0d3dc74e78b1d93de70c1a5e053afc9099e89029 (diff) | |
support default components
| -rw-r--r-- | tests/projects/package/components/xmake.lua | 8 | ||||
| -rw-r--r-- | xmake/core/project/package.lua | 15 | ||||
| -rw-r--r-- | xmake/core/project/target.lua | 23 | ||||
| -rw-r--r-- | xmake/modules/private/action/require/impl/register_packages.lua | 14 |
4 files changed, 48 insertions, 12 deletions
diff --git a/tests/projects/package/components/xmake.lua b/tests/projects/package/components/xmake.lua index a8d955fb8..a6b7dffff 100644 --- a/tests/projects/package/components/xmake.lua +++ b/tests/projects/package/components/xmake.lua @@ -5,12 +5,12 @@ add_requires("sfml") target("graphics") set_kind("static") add_files("src/graphics.cpp") - add_packages("sfml", {components = {"graphics", "window", "system"}, public = true}) + add_packages("sfml", {components = {"graphics", "window"}, public = true}) target("network") set_kind("static") add_files("src/network.cpp") - add_packages("sfml", {components = {"network", "system"}, public = true}) + add_packages("sfml", {components = {"network"}, public = true}) target("test") set_kind("binary") @@ -131,9 +131,9 @@ package("sfml") end end if package:is_plat("windows", "mingw") and package:config("main") then - package:add("components", "main") + package:add("components", "main", {default = true}) end - package:add("components", "system") + package:add("components", "system", {default = true}) end) on_install("windows", "linux", function (package) diff --git a/xmake/core/project/package.lua b/xmake/core/project/package.lua index 4917e7c20..d1464fa4d 100644 --- a/xmake/core/project/package.lua +++ b/xmake/core/project/package.lua @@ -115,6 +115,21 @@ function _instance:libraryfiles() return self:get("libfiles") end +-- get components +function _instance:components() + return self:get("components") +end + +-- get components list with link order +function _instance:components_list() + return self:get("__components_list") +end + +-- get default components +function _instance:components_default() + return self:get("__components_default") +end + -- get the extra info from the given name function _instance:extra(name) local extrainfo = self:extrainfo() diff --git a/xmake/core/project/target.lua b/xmake/core/project/target.lua index 4e6c21a56..418ff31cc 100644 --- a/xmake/core/project/target.lua +++ b/xmake/core/project/target.lua @@ -418,16 +418,23 @@ function _instance:get_from_pkgs(name, opt) -- get values from package components -- e.g. `add_packages("sfml", {components = {"graphics", "window"}})` if configinfo and configinfo.components then + local components_enabled = hashset.from(table.wrap(configinfo.components)) + for _, comp in ipairs(table.wrap(pkg:components_default())) do + components_enabled:insert(comp) + end + components_enabled:insert("__base") -- if we can't find the values from the component, we need to fall back to __base to find them. -- it contains some common values of all components - local components = table.wrap(pkg:get("components")) - for _, component_name in ipairs(table.join(configinfo.components, "__base")) do - local info = components[component_name] - if info then - table.join2(values, info[name]) - else - local components_str = table.concat(table.wrap(configinfo.components), ", ") - utils.warning("unknown component(%s) in add_packages(%s, {components = {%s}})", component_name, pkg:name(), components_str) + local components = table.wrap(pkg:components()) + for _, component_name in ipairs(table.join(pkg:components_list(), "__base")) do + if components_enabled:has(component_name) then + local info = components[component_name] + if info then + table.join2(values, info[name]) + else + local components_str = table.concat(table.wrap(configinfo.components), ", ") + utils.warning("unknown component(%s) in add_packages(%s, {components = {%s}})", component_name, pkg:name(), components_str) + end end end -- get values instead of the builtin configs if exists extra package config diff --git a/xmake/modules/private/action/require/impl/register_packages.lua b/xmake/modules/private/action/require/impl/register_packages.lua index 0ac1b833a..a6247cc9a 100644 --- a/xmake/modules/private/action/require/impl/register_packages.lua +++ b/xmake/modules/private/action/require/impl/register_packages.lua @@ -56,6 +56,20 @@ function _register_required_package_libs(instance, required_package, is_deps) fetchinfo.components = nil required_package:add(fetchinfo) + -- save components list + if components then + required_package:set("__components_list", instance:get("components")) + local components_default = {} + for _, comp in ipairs(instance:get("components")) do + if instance:extraconf("components", comp, "default") then + table.insert(components_default, comp) + end + end + if #components_default > 0 then + required_package:set("__components_default", components_default) + end + end + -- merge into the components values local required_components = required_package:get("components") if required_components then |
