summaryrefslogtreecommitdiff
path: root/xmake/core/project/project.lua
diff options
context:
space:
mode:
authorruki <[email protected]>2024-12-04 22:41:35 +0800
committerruki <[email protected]>2024-12-04 22:41:35 +0800
commit720cf65b54d50394a5a4110dff364734f6e54f0e (patch)
tree6f20bb63067ba21f9fa05256e16698014795f9b7 /xmake/core/project/project.lua
parent34ee1cb9ceeec762cf986dc23a68d466e100e6e2 (diff)
impl sync_requires_to_deps
Diffstat (limited to 'xmake/core/project/project.lua')
-rw-r--r--xmake/core/project/project.lua36
1 files changed, 36 insertions, 0 deletions
diff --git a/xmake/core/project/project.lua b/xmake/core/project/project.lua
index 6c896dde5..77793d3e5 100644
--- a/xmake/core/project/project.lua
+++ b/xmake/core/project/project.lua
@@ -1030,6 +1030,42 @@ function project.requireconfs_str()
project.requires_str()
local requireconfs_str = project._memcache():get("requireconfs_str")
local requireconfs_extra = project._memcache():get("requireconfs_extra")
+ -- synchronize requires configuration to all package dependencies.
+ -- @see https://github.com/xmake-io/xmake/issues/5745#issuecomment-2513951471
+ if project.policy("package.sync_requires_to_deps") then
+ local requires_str = project._memcache():get("requires_str")
+ local requires_extra = project._memcache():get("requires_extra")
+ local sync_requires_to_deps = project._memcache():get("package.sync_requires_to_deps")
+ if requires_str and not sync_requires_to_deps then
+ requires_extra = requires_extra and table.wrap(requires_extra) or {}
+ requireconfs_str = requireconfs_str and table.wrap(requireconfs_str) or {}
+ requireconfs_extra = requireconfs_extra and table.wrap(requireconfs_extra) or {}
+ for _, require_str in ipairs(table.wrap(requires_str)) do
+ if not require_str:find("::", 1, true) then
+ local splitinfo = require_str:split("%s")
+ local packagename = splitinfo[1]
+ local packageversion = splitinfo[2]
+ local requireconf_str = "**." .. packagename
+ local requireconf_extra = table.clone(requires_extra[require_str])
+ if requireconf_extra then
+ requireconf_extra.configs = table.clone(requireconf_extra.configs) or {}
+ end
+ if packageversion then
+ requireconf_extra = requireconf_extra or {configs = {}}
+ requireconf_extra.configs.version = packageversion
+ end
+ if requireconf_extra then
+ requireconf_extra.override = true
+ table.insert(requireconfs_str, requireconf_str)
+ requireconfs_extra[requireconf_str] = requireconf_extra
+ end
+ end
+ end
+ project._memcache():set("requireconfs_str", requireconfs_str)
+ project._memcache():set("requireconfs_extra", requireconfs_extra)
+ project._memcache():set("package.sync_requires_to_deps", true)
+ end
+ end
return requireconfs_str, requireconfs_extra
end