summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2022-12-13 21:04:31 +0800
committerruki <[email protected]>2022-12-13 21:04:31 +0800
commita8b0c74065f49c2720776f2d7bb65c4e3b4c3ef9 (patch)
tree38ea25619303f30fcba6357aa569fca5cf5b01ea
parent06876b8b33ae91a5dd12f8b94b295f3546885c8a (diff)
add default componments
-rw-r--r--xmake/core/package/package.lua30
-rw-r--r--xmake/core/project/package.lua5
-rw-r--r--xmake/core/project/target.lua5
-rw-r--r--xmake/modules/private/action/require/impl/register_packages.lua1
4 files changed, 39 insertions, 2 deletions
diff --git a/xmake/core/package/package.lua b/xmake/core/package/package.lua
index a0af9f747..7a400215f 100644
--- a/xmake/core/package/package.lua
+++ b/xmake/core/package/package.lua
@@ -1883,6 +1883,36 @@ function _instance:components_deps()
return components_deps
end
+-- get default components
+--
+-- @see https://github.com/xmake-io/xmake/issues/3164
+--
+-- @code
+-- add_components("graphics", {default = true})
+-- @endcode
+--
+-- or
+--
+-- @code
+-- on_component(function (package, component))
+-- component:set("default", true)
+-- end)
+-- @endcode
+--
+function _instance:components_default()
+ local components_default = self._COMPONENTS_DEFAULT
+ if not components_default then
+ for _, name in ipairs(table.wrap(self:get("components"))) do
+ if self:extraconf("components", name, "default") or self:component(name):get("default") then
+ components_default = components_default or {}
+ table.insert(components_default, name)
+ end
+ end
+ self._COMPONENTS_DEFAULT = components_default or false
+ end
+ return components_default or nil
+end
+
-- get package components list with dependencies order
function _instance:components_orderlist()
local components_orderlist = self._COMPONENTS_ORDERLIST
diff --git a/xmake/core/project/package.lua b/xmake/core/project/package.lua
index fcd89afa3..9e899d2a3 100644
--- a/xmake/core/project/package.lua
+++ b/xmake/core/project/package.lua
@@ -146,6 +146,11 @@ function _instance:components()
return self:get("components")
end
+-- get default components
+function _instance:components_default()
+ return self:get("__components_default")
+end
+
-- get components list with link order
function _instance:components_orderlist()
return self:get("__components_orderlist")
diff --git a/xmake/core/project/target.lua b/xmake/core/project/target.lua
index 2b38e4245..5e70431e9 100644
--- a/xmake/core/project/target.lua
+++ b/xmake/core/project/target.lua
@@ -416,9 +416,10 @@ function _instance:get_from_pkgs(name, opt)
local configinfo = self:pkgconfig(pkg:name())
-- get values from package components
-- e.g. `add_packages("sfml", {components = {"graphics", "window"}})`
- if configinfo and configinfo.components and pkg:components() then
+ local components_default = pkg:components_default()
+ if configinfo and (configinfo.components or components_default) and pkg:components() then
local components_enabled = hashset.new()
- for _, comp in ipairs(table.wrap(configinfo.components)) do
+ for _, comp in ipairs(table.join(configinfo.components or {}, components_default)) do
components_enabled:insert(comp)
for _, dep in ipairs(table.wrap(pkg:component_orderdeps(comp))) do
components_enabled:insert(dep)
diff --git a/xmake/modules/private/action/require/impl/register_packages.lua b/xmake/modules/private/action/require/impl/register_packages.lua
index 840667d04..f50e973b9 100644
--- a/xmake/modules/private/action/require/impl/register_packages.lua
+++ b/xmake/modules/private/action/require/impl/register_packages.lua
@@ -61,6 +61,7 @@ function _register_required_package_libs(instance, required_package, is_deps)
-- save components list and dependencies
if components then
required_package:set("__components_deps", instance:components_deps())
+ required_package:set("__components_default", instance:components_default())
required_package:set("__components_orderlist", instance:components_orderlist())
end