From a76aab983d3acb30cf8138bffbc4f755c649fb30 Mon Sep 17 00:00:00 2001 From: ruki Date: Wed, 3 Feb 2021 00:39:01 +0800 Subject: improve extractor --- tests/projects/package/toolchain_muslcc/src/main.c | 7 ++++ tests/projects/package/toolchain_muslcc/xmake.lua | 7 ++++ xmake/modules/utils/archive/extract.lua | 44 +++++++++++++++------- xmake/toolchains/cross/check.lua | 14 ++++++- 4 files changed, 58 insertions(+), 14 deletions(-) create mode 100644 tests/projects/package/toolchain_muslcc/src/main.c create mode 100644 tests/projects/package/toolchain_muslcc/xmake.lua diff --git a/tests/projects/package/toolchain_muslcc/src/main.c b/tests/projects/package/toolchain_muslcc/src/main.c new file mode 100644 index 000000000..9ae580511 --- /dev/null +++ b/tests/projects/package/toolchain_muslcc/src/main.c @@ -0,0 +1,7 @@ +#include + +int main(int argc, char** argv) +{ + printf("hello world!\n"); + return 0; +} diff --git a/tests/projects/package/toolchain_muslcc/xmake.lua b/tests/projects/package/toolchain_muslcc/xmake.lua new file mode 100644 index 000000000..d68fc3301 --- /dev/null +++ b/tests/projects/package/toolchain_muslcc/xmake.lua @@ -0,0 +1,7 @@ +add_rules("mode.debug", "mode.release") +add_requires("muslcc") + +target("test") + set_kind("binary") + add_files("src/*.c") + set_toolchains("muslcc") diff --git a/xmake/modules/utils/archive/extract.lua b/xmake/modules/utils/archive/extract.lua index a707f18dd..35e18f20d 100644 --- a/xmake/modules/utils/archive/extract.lua +++ b/xmake/modules/utils/archive/extract.lua @@ -343,19 +343,37 @@ function main(archivefile, outputdir, opt) opt = opt or {} -- init extractors - local extractors = - { - [".zip"] = {_extract_using_unzip, _extract_using_tar, _extract_using_7z} - , [".7z"] = {_extract_using_7z} - , [".gz"] = {_extract_using_gzip, _extract_using_tar, _extract_using_7z} - , [".xz"] = {_extract_using_xz, _extract_using_tar, _extract_using_7z} - , [".tgz"] = {_extract_using_tar, _extract_using_7z} - , [".bz2"] = {_extract_using_tar, _extract_using_7z} - , [".tar"] = {_extract_using_tar, _extract_using_7z} - , [".tar.gz"] = {_extract_using_tar, _extract_using_7z, _extract_using_gzip} - , [".tar.xz"] = {_extract_using_tar, _extract_using_7z, _extract_using_xz} - , [".tar.bz2"] = {_extract_using_tar, _extract_using_7z} - } + local extractors + if is_host("windows") then + -- we use 7z first, becase xmake package has builtin 7z program on windows + extractors = + { + [".zip"] = {_extract_using_7z, _extract_using_unzip, _extract_using_tar} + , [".7z"] = {_extract_using_7z} + , [".gz"] = {_extract_using_7z, _extract_using_gzip, _extract_using_tar} + , [".xz"] = {_extract_using_7z, _extract_using_xz, _extract_using_tar} + , [".tgz"] = {_extract_using_7z, _extract_using_tar} + , [".bz2"] = {_extract_using_7z, _extract_using_tar} + , [".tar"] = {_extract_using_7z, _extract_using_tar} + , [".tar.gz"] = {_extract_using_7z, _extract_using_tar, _extract_using_gzip} + , [".tar.xz"] = {_extract_using_7z, _extract_using_tar, _extract_using_xz} + , [".tar.bz2"] = {_extract_using_7z, _extract_using_tar} + } + else + extractors = + { + [".zip"] = {_extract_using_unzip, _extract_using_tar, _extract_using_7z} + , [".7z"] = {_extract_using_7z} + , [".gz"] = {_extract_using_gzip, _extract_using_tar, _extract_using_7z} + , [".xz"] = {_extract_using_xz, _extract_using_tar, _extract_using_7z} + , [".tgz"] = {_extract_using_tar, _extract_using_7z} + , [".bz2"] = {_extract_using_tar, _extract_using_7z} + , [".tar"] = {_extract_using_tar, _extract_using_7z} + , [".tar.gz"] = {_extract_using_tar, _extract_using_7z, _extract_using_gzip} + , [".tar.xz"] = {_extract_using_tar, _extract_using_7z, _extract_using_xz} + , [".tar.bz2"] = {_extract_using_tar, _extract_using_7z} + } + end -- get extension local extension = opt.extension or get_archive_extension(archivefile) diff --git a/xmake/toolchains/cross/check.lua b/xmake/toolchains/cross/check.lua index 695c746d2..c4c22bd83 100644 --- a/xmake/toolchains/cross/check.lua +++ b/xmake/toolchains/cross/check.lua @@ -33,8 +33,20 @@ function main(toolchain) return end - -- find cross toolchain + -- find cross toolchain from external envirnoment local cross_toolchain = find_cross_toolchain(sdkdir, {bindir = bindir, cross = cross}) + if not cross_toolchain then + -- find it from packages + for _, package in ipairs(toolchain:packages()) do + local installdir = package:installdir() + if installdir and os.isdir(installdir) then + cross_toolchain = find_cross_toolchain(installdir, {cross = cross}) + if cross_toolchain then + break + end + end + end + end if cross_toolchain then config.set("cross", cross_toolchain.cross, {readonly = true, force = true}) config.set("bin", cross_toolchain.bindir, {readonly = true, force = true}) -- cgit v1.3.1