summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2025-09-20 20:37:17 +0800
committerGitHub <[email protected]>2025-09-20 20:37:17 +0800
commit27a68c72136fec6343417534bf9c1f3be98c52aa (patch)
tree6ca901ca9e4474a3768f9d10c7b740512cbe1451
parenta97d95f85a0113fd02bf247f2c675f3b2dc84eaa (diff)
parent95db3720b4aa3f4eaa2006306b7cd12df9eec4e5 (diff)
Merge pull request #6835 from xmake-io/package
fix package extension
-rw-r--r--xmake/modules/private/action/require/impl/actions/download.lua18
-rw-r--r--xmake/modules/utils/archive/extension.lua5
2 files changed, 18 insertions, 5 deletions
diff --git a/xmake/modules/private/action/require/impl/actions/download.lua b/xmake/modules/private/action/require/impl/actions/download.lua
index 979c17971..47690273e 100644
--- a/xmake/modules/private/action/require/impl/actions/download.lua
+++ b/xmake/modules/private/action/require/impl/actions/download.lua
@@ -34,6 +34,17 @@ import("net.proxy")
import("devel.git")
import("utils.archive")
+-- get url extension
+function _url_extension(url)
+ local extension = archive.extension(url)
+ if extension == "" then
+ -- maybe non-archive file, e.g. .exe, .sh, ..
+ local urlpath = url:split('?', {plain = true})[1]
+ extension = path.extension(urlpath)
+ end
+ return extension
+end
+
-- checkout codes from git
function _checkout(package, url, sourcedir, opt)
opt = opt or {}
@@ -153,7 +164,7 @@ function _download(package, url, sourcedir, opt)
if not packagefile then
packagefile = url_filename(url)
if not os.isfile(packagefile) then -- we need to be compatible with the old file names
- packagefile = package:name() .. "-" .. package:version_str() .. archive.extension(packagefile)
+ packagefile = package:name() .. "-" .. package:version_str() .. _url_extension(packagefile)
end
end
@@ -181,7 +192,7 @@ function _download(package, url, sourcedir, opt)
os.cp(url, packagefile)
else
local localfile
- local searchnames = {package:name() .. "-" .. package:version_str() .. archive.extension(url),
+ local searchnames = {package:name() .. "-" .. package:version_str() .. _url_extension(url),
packagefile}
-- match github name mangling https://github.com/xmake-io/xmake/issues/1343
@@ -267,6 +278,7 @@ function _download(package, url, sourcedir, opt)
raise(errors or string.format("cannot extract %s, maybe missing extractor or invalid package file!", packagefile))
else
-- if it is not archive file, we only need to create empty source directory and use package:originfile()
+ -- e.g. .exe, .sh
os.tryrm(sourcedir)
os.mkdir(sourcedir)
end
@@ -424,7 +436,7 @@ function main(package, opt)
searchnames:insert(package:name() .. archive.extension(url_failed))
searchnames:insert(path.basename(url_filename(url_failed)))
else
- local extension = archive.extension(url_failed)
+ local extension = _url_extension(url_failed)
if extension then
searchnames:insert(package:name() .. "-" .. package:version_str() .. extension)
end
diff --git a/xmake/modules/utils/archive/extension.lua b/xmake/modules/utils/archive/extension.lua
index aff579bd3..2dd7d4c97 100644
--- a/xmake/modules/utils/archive/extension.lua
+++ b/xmake/modules/utils/archive/extension.lua
@@ -22,9 +22,10 @@
import("core.base.hashset")
-- get the archive extension
-function main(archivefile)
+function main(url)
+ local urlpath = url:split('?', {plain = true})[1]
local extension = ""
- local filename = path.filename(archivefile)
+ local filename = path.filename(urlpath)
local extensionset = hashset.from({
".xmz", -- xmake compression format
".zip", ".7z", ".gz", ".xz", ".zst", ".tgz",