diff options
| author | ruki <[email protected]> | 2026-01-08 22:55:36 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2026-01-09 17:59:10 +0800 |
| commit | f3c2a43971a0562270cc07320904b0c8a78e10e4 (patch) | |
| tree | acc0927b50ade613cb03bd331af291c44a6d6f71 | |
| parent | 90b6cc257a135cdeafbc542d2ec368250f0ec69d (diff) | |
move patches and resources to scheme
| -rw-r--r-- | xmake/core/package/package.lua | 68 | ||||
| -rw-r--r-- | xmake/core/package/scheme.lua | 81 |
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 |
