From f621c95f5994a3acaacbed96f204c285f9b7449b Mon Sep 17 00:00:00 2001 From: ruki Date: Sat, 20 Sep 2025 18:28:56 +0800 Subject: fix package extension --- .../private/action/require/impl/actions/download.lua | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 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..56d529fa5 100644 --- a/xmake/modules/private/action/require/impl/actions/download.lua +++ b/xmake/modules/private/action/require/impl/actions/download.lua @@ -34,6 +34,16 @@ 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, .. + extension = path.extension(url) + end + return extension +end + -- checkout codes from git function _checkout(package, url, sourcedir, opt) opt = opt or {} @@ -153,7 +163,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 +191,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 +277,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 +435,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 -- cgit v1.3.1 From 95db3720b4aa3f4eaa2006306b7cd12df9eec4e5 Mon Sep 17 00:00:00 2001 From: ruki Date: Sat, 20 Sep 2025 18:47:11 +0800 Subject: improve extension again --- xmake/modules/private/action/require/impl/actions/download.lua | 3 ++- xmake/modules/utils/archive/extension.lua | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/xmake/modules/private/action/require/impl/actions/download.lua b/xmake/modules/private/action/require/impl/actions/download.lua index 56d529fa5..47690273e 100644 --- a/xmake/modules/private/action/require/impl/actions/download.lua +++ b/xmake/modules/private/action/require/impl/actions/download.lua @@ -39,7 +39,8 @@ function _url_extension(url) local extension = archive.extension(url) if extension == "" then -- maybe non-archive file, e.g. .exe, .sh, .. - extension = path.extension(url) + local urlpath = url:split('?', {plain = true})[1] + extension = path.extension(urlpath) end return 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", -- cgit v1.3.1