summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2026-01-08 22:39:37 +0800
committerruki <[email protected]>2026-01-09 17:59:09 +0800
commit6265a6fcec0471720bf399374ca1078451036c43 (patch)
treec9390445df925c3ea65155392d4a2c5d6e0d5bc9
parent7d476913ae7909abd9fabb45e7bb4cca910f9635 (diff)
improve to select version
-rw-r--r--xmake/modules/private/action/require/impl/package.lua38
1 files changed, 17 insertions, 21 deletions
diff --git a/xmake/modules/private/action/require/impl/package.lua b/xmake/modules/private/action/require/impl/package.lua
index 2b55d6834..2c1cf98fb 100644
--- a/xmake/modules/private/action/require/impl/package.lua
+++ b/xmake/modules/private/action/require/impl/package.lua
@@ -342,12 +342,12 @@ function _add_package_configurations(package)
package:add("configs", "shflags", {builtin = true, description = "Set the shared library linker flags."})
end
--- select version from package or scheme
-function _select_version_from(package, requireinfo)
+-- select version from scheme
+function _select_version_from_scheme(scheme, requireinfo)
-- has git url?
local has_giturl = false
- for _, url in ipairs(package:urls()) do
+ for _, url in ipairs(scheme:urls()) do
if git.checkurl(url) then
has_giturl = true
break
@@ -360,7 +360,7 @@ function _select_version_from(package, requireinfo)
local require_version = requireinfo.version
local require_verify = requireinfo.verify
local is_system = requireinfo.system
- local has_versionlist = package:get("versions") or package:get("versionfiles")
+ local has_versionlist = scheme:get("versions") or scheme:get("versionfiles")
if (not has_versionlist or require_verify == false)
and (semver.is_valid(require_version) or semver.is_valid_range(require_version)) then
-- no version list in package() or need not verify sha256sum? try selecting this version directly
@@ -370,8 +370,8 @@ function _select_version_from(package, requireinfo)
-- https://github.com/xmake-io/xmake/issues/3551
version = require_version
source = "version"
- elseif #package:versions() > 0 then -- select version?
- version, source = try { function () return semver.select(require_version, package:versions()) end }
+ elseif #scheme:versions() > 0 then -- select version?
+ version, source = try { function () return semver.select(require_version, scheme:versions()) end }
end
if not version and has_giturl then -- select branch?
if require_version and #require_version == 40 and require_version:match("%w+") then
@@ -381,7 +381,7 @@ function _select_version_from(package, requireinfo)
end
end
-- local source package? we use a phony version
- if not version and require_version == "latest" and #package:urls() == 0 then
+ if not version and require_version == "latest" and #scheme:urls() == 0 then
version = "latest"
source = "version"
end
@@ -403,24 +403,20 @@ function _select_package_version(package, requireinfo, locked_requireinfo)
return version, source
end
- -- select version from package or schemes
+ -- select version from 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
+ for _, scheme in ipairs(schemes) do
+ local scheme_version, scheme_source = _select_version_from_scheme(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
- else
- version, source = _select_version_from(package, requireinfo)
end
if not version and not package:is_thirdparty() and is_system ~= true then