diff options
| author | ruki <[email protected]> | 2022-12-13 21:26:58 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2022-12-13 21:26:58 +0800 |
| commit | 4c1ce20a666a95b34b589004c17e4eb3f4093919 (patch) | |
| tree | 71aac5276e9ce514a7ee3d63dbee323f4cbc9d84 | |
| parent | ebc176854cf1680a826ec9766e7ef53dfbdba0da (diff) | |
| parent | 73c0fefd21904879a51eef5464ca76c2bd8972eb (diff) | |
Merge pull request #3167 from xmake-io/default
add default componments
| -rw-r--r-- | xmake/core/package/package.lua | 30 | ||||
| -rw-r--r-- | xmake/core/project/package.lua | 5 | ||||
| -rw-r--r-- | xmake/core/project/target.lua | 5 | ||||
| -rw-r--r-- | xmake/modules/private/action/require/impl/register_packages.lua | 1 |
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..b0cd6fa0d 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 selected_components = configinfo and configinfo.components or pkg:components_default() + if selected_components and pkg:components() then local components_enabled = hashset.new() - for _, comp in ipairs(table.wrap(configinfo.components)) do + for _, comp in ipairs(table.wrap(selected_components)) 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 |
