summaryrefslogtreecommitdiff
path: root/xmake/modules/private/action/require/impl/package.lua
diff options
context:
space:
mode:
authorruki <[email protected]>2026-01-07 23:56:51 +0800
committerruki <[email protected]>2026-01-09 17:59:06 +0800
commit3b1f621c6b25958eef72dd98df074fcb6bc81d5e (patch)
tree625444e9025b15c55a6a6dfff7c84bdd9f133cb7 /xmake/modules/private/action/require/impl/package.lua
parent2c77aafe1a0c1b87c9b423541eaff4a04748e5e5 (diff)
improve to select package version for schemes
Diffstat (limited to 'xmake/modules/private/action/require/impl/package.lua')
-rw-r--r--xmake/modules/private/action/require/impl/package.lua54
1 files changed, 40 insertions, 14 deletions
diff --git a/xmake/modules/private/action/require/impl/package.lua b/xmake/modules/private/action/require/impl/package.lua
index eae010012..2b55d6834 100644
--- a/xmake/modules/private/action/require/impl/package.lua
+++ b/xmake/modules/private/action/require/impl/package.lua
@@ -342,20 +342,8 @@ function _add_package_configurations(package)
package:add("configs", "shflags", {builtin = true, description = "Set the shared library linker flags."})
end
--- select package version
-function _select_package_version(package, requireinfo, locked_requireinfo)
-
- -- get it from the locked requireinfo
- if locked_requireinfo then
- local version = locked_requireinfo.version
- local source = "version"
- if locked_requireinfo.branch then
- source = "branch"
- elseif locked_requireinfo.tag then
- source = "tag"
- end
- return version, source
- end
+-- select version from package or scheme
+function _select_version_from(package, requireinfo)
-- has git url?
local has_giturl = false
@@ -397,6 +385,44 @@ function _select_package_version(package, requireinfo, locked_requireinfo)
version = "latest"
source = "version"
end
+ return version, source
+end
+
+-- select package version
+function _select_package_version(package, requireinfo, locked_requireinfo)
+
+ -- get it from the locked requireinfo
+ if locked_requireinfo then
+ local version = locked_requireinfo.version
+ local source = "version"
+ if locked_requireinfo.branch then
+ source = "branch"
+ elseif locked_requireinfo.tag then
+ source = "tag"
+ end
+ return version, source
+ end
+
+ -- select version from package or schemes
+ local version, source
+ local schemes = package:schemes_orderlist()
+ if schemes then
+ for _, scheme in ipairs(schemes) do
+ local scheme_version, scheme_source = _select_version_from(scheme, requireinfo)
+ if scheme_version then
+ scheme:version_set(scheme_version, scheme_source)
+ if version then
+ assert(scheme_version == version, "package(%s): the version lists of schemes are mismatch.")
+ else
+ version = scheme_version
+ source = scheme_source
+ end
+ end
+ end
+ else
+ version, source = _select_version_from(package, requireinfo)
+ end
+
if not version and not package:is_thirdparty() and is_system ~= true then
raise("package(%s): version(%s) not found!", package:name(), require_version)
end