summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2023-10-24 22:40:36 +0800
committerruki <[email protected]>2023-10-24 22:40:36 +0800
commit8d0e4717a14cd460428cc4d294bb1ae4dd100f6f (patch)
treed116a97f656deb53bc6f4a18b8e1d2c8740cfec3
parent795272da127f97058d2d061e32ace82a8c2ff009 (diff)
fetch extras
-rw-r--r--xmake/core/package/package.lua6
-rw-r--r--xmake/core/project/package.lua47
-rw-r--r--xmake/modules/package/manager/xmake/find_package.lua1
-rw-r--r--xmake/modules/private/action/require/impl/register_packages.lua2
4 files changed, 42 insertions, 14 deletions
diff --git a/xmake/core/package/package.lua b/xmake/core/package/package.lua
index 28d66f7ca..769551bcb 100644
--- a/xmake/core/package/package.lua
+++ b/xmake/core/package/package.lua
@@ -925,12 +925,6 @@ function _instance:manifest_save()
components.vars[component_name] = components.vars[component_name] or {}
components.vars[component_name][name] = component_value
end
- local component_extra = comp:extraconf(name)
- if component_extra then
- components.extras = components.extras or {}
- components.extras[component_name] = components.extras[component_name] or {}
- components.extras[component_name][name] = component_extra
- end
end
end
end
diff --git a/xmake/core/project/package.lua b/xmake/core/project/package.lua
index 0e16a7e1b..cf372022f 100644
--- a/xmake/core/project/package.lua
+++ b/xmake/core/project/package.lua
@@ -161,23 +161,56 @@ function _instance:components_deps()
return self:get("__components_deps")
end
--- get other extra information from package/on_fetch
+-- get user extra configuration from package/on_fetch
+-- @see https://github.com/xmake-io/xmake/issues/3106#issuecomment-1330143922
--
-- e.g.
--
-- @code
-- package("xxx")
-- on_fetch(function (package)
--- return {includedirs = "", links = "", extra = {foo = ""}}
+-- return {includedirs = "", links = "", extras = {foo = ""}}
-- end)
--
-- @endcode
-function _instance:extra(name)
- local extra = self:get("extra")
- if extra and name then
- extra = extra[name]
+--
+-- we can also get extra configuration from package/add_xxx
+--
+-- e.g.
+--
+-- @code
+-- package("xxx")
+-- add_linkgroups("foo", {group = true})
+--
+-- target:pkg("xxx"):extraconf("linkgroups", "foo", "group")
+-- @endcode
+--
+-- extras = {
+-- linkgroups = {
+-- z = {
+-- group = true
+-- }
+-- }
+-- }
+--
+function _instance:extraconf(name, item, key)
+ local extraconfs = self:get("extras")
+ if not extraconfs then
+ return
end
- return extra
+
+ -- get configuration
+ local extraconf = extraconfs[name]
+
+ -- get configuration value
+ local value = extraconf
+ if item then
+ value = extraconf and extraconf[item] or nil
+ if value and key then
+ value = value[key]
+ end
+ end
+ return value
end
-- get order dependencies of the given component
diff --git a/xmake/modules/package/manager/xmake/find_package.lua b/xmake/modules/package/manager/xmake/find_package.lua
index a1f2dfac2..18d686409 100644
--- a/xmake/modules/package/manager/xmake/find_package.lua
+++ b/xmake/modules/package/manager/xmake/find_package.lua
@@ -245,6 +245,7 @@ function _find_package_from_repo(name, opt)
-- get version and license
result.version = manifest.version or path.filename(path.directory(path.directory(manifest_file)))
result.license = manifest.license
+ result.extras = manifest.extras
return result
end
diff --git a/xmake/modules/private/action/require/impl/register_packages.lua b/xmake/modules/private/action/require/impl/register_packages.lua
index ae66b6e75..621e383d1 100644
--- a/xmake/modules/private/action/require/impl/register_packages.lua
+++ b/xmake/modules/private/action/require/impl/register_packages.lua
@@ -51,7 +51,7 @@ function _register_required_package_libs(instance, required_package, is_deps)
fetchinfo.static = nil
fetchinfo.shared = nil
fetchinfo.installdir = nil
- fetchinfo.extra = nil
+ fetchinfo.extras = nil
fetchinfo.components = nil
end