From b3aa8716f3a989bf80bab40c256c4c3c2e12da6c Mon Sep 17 00:00:00 2001 From: ruki Date: Tue, 27 Jan 2026 22:40:57 +0800 Subject: improve to select scheme version --- xmake/modules/private/action/require/impl/package.lua | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/xmake/modules/private/action/require/impl/package.lua b/xmake/modules/private/action/require/impl/package.lua index e1fdba178..9768dd835 100644 --- a/xmake/modules/private/action/require/impl/package.lua +++ b/xmake/modules/private/action/require/impl/package.lua @@ -362,6 +362,7 @@ function _select_version_from_scheme(scheme, requireinfo) local require_verify = requireinfo.verify local is_system = requireinfo.system local has_versionlist = scheme:get("versions") or scheme:get("versionfiles") + -- We need to strictly limit the number of valid URLs to filter out schemes that don't have any URLs, prioritizing them. if #urls > 0 and (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 @@ -424,6 +425,22 @@ function _select_package_version(package, requireinfo, locked_requireinfo) end end end + if not version then + -- If no version is available for any scheme and no URLs are available, we will use the specified version by default. + -- https://github.com/xmake-io/xmake/issues/7265 + local require_version = requireinfo.version + local require_verify = requireinfo.verify + local current_scheme = package:current_scheme() + local has_versionlist = current_scheme:get("versions") or current_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 + local scheme_version = require_version + scheme_version_map[current_scheme] = scheme_version + current_scheme:version_set(scheme_version, scheme_source) + version = scheme_version + source = "version" + end + end if not version then version = version_latest source = source_latest -- cgit v1.3.1