diff options
| author | ruki <[email protected]> | 2025-09-20 20:37:17 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-09-20 20:37:17 +0800 |
| commit | 27a68c72136fec6343417534bf9c1f3be98c52aa (patch) | |
| tree | 6ca901ca9e4474a3768f9d10c7b740512cbe1451 | |
| parent | a97d95f85a0113fd02bf247f2c675f3b2dc84eaa (diff) | |
| parent | 95db3720b4aa3f4eaa2006306b7cd12df9eec4e5 (diff) | |
Merge pull request #6835 from xmake-io/package
fix package extension
| -rw-r--r-- | xmake/modules/private/action/require/impl/actions/download.lua | 18 | ||||
| -rw-r--r-- | xmake/modules/utils/archive/extension.lua | 5 |
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", |
