summaryrefslogtreecommitdiff
path: root/xmake/modules/utils
diff options
context:
space:
mode:
authorruki <[email protected]>2021-08-13 22:26:38 +0800
committerGitHub <[email protected]>2021-08-13 22:26:38 +0800
commit69535ad5754a5f9ec30bb599b5f45688f398b43c (patch)
tree6a21d1a9d228196330b27b66551948583e1c26b8 /xmake/modules/utils
parent26c6499f97244bc6c663777b2f765bf594a290d5 (diff)
Update extract.lua
Diffstat (limited to 'xmake/modules/utils')
-rw-r--r--xmake/modules/utils/archive/extract.lua37
1 files changed, 14 insertions, 23 deletions
diff --git a/xmake/modules/utils/archive/extract.lua b/xmake/modules/utils/archive/extract.lua
index f8f348bcb..dd09df9ac 100644
--- a/xmake/modules/utils/archive/extract.lua
+++ b/xmake/modules/utils/archive/extract.lua
@@ -43,16 +43,23 @@ function _extract_using_tar(archivefile, outputdir, extension, opt)
return false
end
- -- on msys2/cygwin? we need translate input path to cygwin-like path
- if is_subhost("msys", "cygwin") then
- archivefile = path.cygwin_path(archivefile)
- end
-
-- init argv
local argv = {}
- if is_subhost("windows") then
+ if is_host("windows") then
-- force "x:\\xx" as local file
- table.insert(argv, "--force-local")
+ local force_local = _g.force_local
+ if force_local == nil then
+ force_local = try {function ()
+ local result = os.iorunv(program, {"--help"})
+ if result and result:find("--force-local", 1, true) then
+ return true
+ end
+ end}
+ _g.force_local = force_local or false
+ end
+ if force_local then
+ table.insert(argv, "--force-local")
+ end
end
table.insert(argv, option.get("verbose") and "-xvf" or "-xf")
table.insert(argv, archivefile)
@@ -84,8 +91,6 @@ function _extract_using_tar(archivefile, outputdir, extension, opt)
else
os.vrunv(program, argv)
end
-
- -- ok
return true
end
@@ -157,8 +162,6 @@ function _extract_using_7z(archivefile, outputdir, extension, opt)
return _extract(tarfile, outputdir_old, ".tar", {_extract_using_7z, _extract_using_tar}, opt)
end
end
-
- -- ok
return true
end
@@ -214,8 +217,6 @@ function _extract_using_gzip(archivefile, outputdir, extension, opt)
return _extract(tarfile, outputdir_old, ".tar", {_extract_using_7z, _extract_using_tar}, opt)
end
end
-
- -- ok
return true
end
@@ -271,8 +272,6 @@ function _extract_using_xz(archivefile, outputdir, extension, opt)
return _extract(tarfile, outputdir_old, ".tar", {_extract_using_7z, _extract_using_tar}, opt)
end
end
-
- -- ok
return true
end
@@ -326,8 +325,6 @@ function _extract_using_unzip(archivefile, outputdir, extension, opt)
return _extract(tarfile, outputdir_old, ".tar", {_extract_using_tar, _extract_using_7z}, opt)
end
end
-
- -- ok
return true
end
@@ -388,22 +385,16 @@ function _extract_using_bzip2(archivefile, outputdir, extension, opt)
return _extract(tarfile, outputdir_old, ".tar", {_extract_using_7z, _extract_using_tar}, opt)
end
end
-
- -- ok
return true
end
-- extract archive file using extractors
function _extract(archivefile, outputdir, extension, extractors, opt)
-
- -- extract it
for _, extract in ipairs(extractors) do
if extract(archivefile, outputdir, extension, opt) then
return true
end
end
-
- -- failed
return false
end