diff options
| author | ruki <[email protected]> | 2021-08-13 22:26:38 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2021-08-13 22:26:38 +0800 |
| commit | 69535ad5754a5f9ec30bb599b5f45688f398b43c (patch) | |
| tree | 6a21d1a9d228196330b27b66551948583e1c26b8 /xmake/modules/utils | |
| parent | 26c6499f97244bc6c663777b2f765bf594a290d5 (diff) | |
Update extract.lua
Diffstat (limited to 'xmake/modules/utils')
| -rw-r--r-- | xmake/modules/utils/archive/extract.lua | 37 |
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 |
