diff options
| author | ruki <[email protected]> | 2021-02-03 00:39:01 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2021-02-03 00:39:01 +0800 |
| commit | a76aab983d3acb30cf8138bffbc4f755c649fb30 (patch) | |
| tree | 4efaec3d4f72ccc37791f3ebd2d1fc8a94898801 | |
| parent | 8caf1c9c6a3481e933a74bd5977eb3448c56c4c8 (diff) | |
improve extractor
| -rw-r--r-- | tests/projects/package/toolchain_muslcc/src/main.c | 7 | ||||
| -rw-r--r-- | tests/projects/package/toolchain_muslcc/xmake.lua | 7 | ||||
| -rw-r--r-- | xmake/modules/utils/archive/extract.lua | 44 | ||||
| -rw-r--r-- | xmake/toolchains/cross/check.lua | 14 |
4 files changed, 58 insertions, 14 deletions
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 <stdio.h> + +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}) |
