summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2026-01-08 22:55:36 +0800
committerruki <[email protected]>2026-01-09 17:59:10 +0800
commitf3c2a43971a0562270cc07320904b0c8a78e10e4 (patch)
treeacc0927b50ade613cb03bd331af291c44a6d6f71
parent90b6cc257a135cdeafbc542d2ec368250f0ec69d (diff)
move patches and resources to scheme
-rw-r--r--xmake/core/package/package.lua68
-rw-r--r--xmake/core/package/scheme.lua81
2 files changed, 83 insertions, 66 deletions
diff --git a/xmake/core/package/package.lua b/xmake/core/package/package.lua
index 96702109c..b2b9d052e 100644
--- a/xmake/core/package/package.lua
+++ b/xmake/core/package/package.lua
@@ -1475,12 +1475,6 @@ end
-- get the version string
function _instance:version_str()
- if self:is_thirdparty() then
- local requireinfo = self:requireinfo()
- if requireinfo then
- return requireinfo.version
- end
- end
return self:current_scheme():version_str()
end
@@ -2153,70 +2147,12 @@ end
-- @endcode
--
function _instance:patches()
- local patches = self._PATCHES
- if patches == nil then
- local patchinfos = self:get("patches")
- if patchinfos then
- local version_str = self:version_str()
- local patchinfo = patchinfos[version_str]
- if patchinfo then
- patches = {}
- patchinfo = table.wrap(patchinfo)
- for idx = 1, #patchinfo, 2 do
- local extra = self:extraconf("patches." .. version_str, patchinfo[idx])
- table.insert(patches , {url = patchinfo[idx], sha256 = patchinfo[idx + 1], extra = extra})
- end
- else
- -- match semver, e.g add_patches(">=1.0.0", url, sha256)
- for range, patchinfo in pairs(patchinfos) do
- if semver.satisfies(version_str, range) then
- patches = patches or {}
- patchinfo = table.wrap(patchinfo)
- for idx = 1, #patchinfo, 2 do
- local extra = self:extraconf("patches." .. range, patchinfo[idx])
- table.insert(patches , {url = patchinfo[idx], sha256 = patchinfo[idx + 1], extra = extra})
- end
- end
- end
- end
- end
- self._PATCHES = patches or false
- end
- return patches and patches or nil
+ return self:current_scheme():patches()
end
-- get the resources of the current version
function _instance:resources()
- local resources = self._RESOURCES
- if resources == nil then
- local resourceinfos = self:get("resources")
- if resourceinfos then
- local version_str = self:version_str()
- local resourceinfo = resourceinfos[version_str]
- if resourceinfo then
- resources = {}
- resourceinfo = table.wrap(resourceinfo)
- for idx = 1, #resourceinfo, 3 do
- local name = resourceinfo[idx]
- resources[name] = {url = resourceinfo[idx + 1], sha256 = resourceinfo[idx + 2]}
- end
- else
- -- match semver, e.g add_resources(">=1.0.0", name, url, sha256)
- for range, resourceinfo in pairs(resourceinfos) do
- if semver.satisfies(version_str, range) then
- resources = resources or {}
- resourceinfo = table.wrap(resourceinfo)
- for idx = 1, #resourceinfo, 3 do
- local name = resourceinfo[idx]
- resources[name] = {url = resourceinfo[idx + 1], sha256 = resourceinfo[idx + 2]}
- end
- end
- end
- end
- end
- self._RESOURCES = resources or false
- end
- return resources and resources or nil
+ return self:current_scheme():resources()
end
-- get the the given resource
diff --git a/xmake/core/package/scheme.lua b/xmake/core/package/scheme.lua
index 10f906750..94a2a7d02 100644
--- a/xmake/core/package/scheme.lua
+++ b/xmake/core/package/scheme.lua
@@ -218,6 +218,13 @@ end
-- get version string
function _instance:version_str()
+ local package = self:package()
+ if package and package:is_thirdparty() then
+ local requireinfo = package:requireinfo()
+ if requireinfo then
+ return requireinfo.version
+ end
+ end
return self._VERSION_STR
end
@@ -296,6 +303,80 @@ function _instance:revision(url_alias)
end
end
+-- get the patches of the current version
+--
+-- @code
+-- add_patches("6.7.6", "https://cdn.kernel.org/pub/linux/kernel/v6.x/patch-6.7.6.xz",
+-- "a394326aa325f8a930a4ce33c69ba7b8b454aef1107a4d3c2a8ae12908615fc4", {reverse = true})
+-- @endcode
+--
+function _instance:patches()
+ local patches = self._PATCHES
+ if patches == nil then
+ local patchinfos = self:get("patches")
+ if patchinfos then
+ local version_str = self:version_str()
+ local patchinfo = patchinfos[version_str]
+ if patchinfo then
+ patches = {}
+ patchinfo = table.wrap(patchinfo)
+ for idx = 1, #patchinfo, 2 do
+ local extra = self:extraconf("patches." .. version_str, patchinfo[idx])
+ table.insert(patches , {url = patchinfo[idx], sha256 = patchinfo[idx + 1], extra = extra})
+ end
+ else
+ -- match semver, e.g add_patches(">=1.0.0", url, sha256)
+ for range, patchinfo in pairs(patchinfos) do
+ if semver.satisfies(version_str, range) then
+ patches = patches or {}
+ patchinfo = table.wrap(patchinfo)
+ for idx = 1, #patchinfo, 2 do
+ local extra = self:extraconf("patches." .. range, patchinfo[idx])
+ table.insert(patches , {url = patchinfo[idx], sha256 = patchinfo[idx + 1], extra = extra})
+ end
+ end
+ end
+ end
+ end
+ self._PATCHES = patches or false
+ end
+ return patches and patches or nil
+end
+
+-- get the resources of the current version
+function _instance:resources()
+ local resources = self._RESOURCES
+ if resources == nil then
+ local resourceinfos = self:get("resources")
+ if resourceinfos then
+ local version_str = self:version_str()
+ local resourceinfo = resourceinfos[version_str]
+ if resourceinfo then
+ resources = {}
+ resourceinfo = table.wrap(resourceinfo)
+ for idx = 1, #resourceinfo, 3 do
+ local name = resourceinfo[idx]
+ resources[name] = {url = resourceinfo[idx + 1], sha256 = resourceinfo[idx + 2]}
+ end
+ else
+ -- match semver, e.g add_resources(">=1.0.0", name, url, sha256)
+ for range, resourceinfo in pairs(resourceinfos) do
+ if semver.satisfies(version_str, range) then
+ resources = resources or {}
+ resourceinfo = table.wrap(resourceinfo)
+ for idx = 1, #resourceinfo, 3 do
+ local name = resourceinfo[idx]
+ resources[name] = {url = resourceinfo[idx + 1], sha256 = resourceinfo[idx + 2]}
+ end
+ end
+ end
+ end
+ end
+ self._RESOURCES = resources or false
+ end
+ return resources and resources or nil
+end
+
-- interpreter
function scheme._interpreter()
local interp = scheme._INTERPRETER