summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2026-01-10 22:05:16 +0800
committerruki <[email protected]>2026-01-10 22:05:16 +0800
commit0cdef1cae501f1f023ea77fafefa1463b82590e0 (patch)
tree2a456220a76b9676d1b4c6b6c9cea98d5e7c457c
parent705c56d45cc92d4aeebc95964347fa548d76ba4e (diff)
improve to select scheme version
-rw-r--r--xmake/modules/private/action/require/impl/package.lua10
1 files changed, 6 insertions, 4 deletions
diff --git a/xmake/modules/private/action/require/impl/package.lua b/xmake/modules/private/action/require/impl/package.lua
index 6e97a3452..8b0f5dc1b 100644
--- a/xmake/modules/private/action/require/impl/package.lua
+++ b/xmake/modules/private/action/require/impl/package.lua
@@ -405,8 +405,7 @@ function _select_package_version(package, requireinfo, locked_requireinfo)
-- select version from schemes
local version, source
- local schemes = package:schemes_orderlist()
- for _, scheme in ipairs(schemes) do
+ table.remove_if(package:schemes_orderlist(), function (i, scheme)
local scheme_version, scheme_source = _select_version_from_scheme(scheme, requireinfo)
if scheme_version then
scheme:version_set(scheme_version, scheme_source)
@@ -419,8 +418,12 @@ function _select_package_version(package, requireinfo, locked_requireinfo)
version = scheme_version
source = scheme_source
end
+ else
+ -- remove this scheme if version is not matched
+ package:schemes()[scheme:name()] = nil
+ return true
end
- end
+ 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)
@@ -971,7 +974,6 @@ function _load_package(packagename, requireinfo, opt)
-- select package version
local version, source = _select_package_version(package, requireinfo, locked_requireinfo)
if version then
- package:version_set(version, source)
package:data_set("__locked_requireinfo", locked_requireinfo)
end