summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2021-02-03 00:39:01 +0800
committerruki <[email protected]>2021-02-03 00:39:01 +0800
commita76aab983d3acb30cf8138bffbc4f755c649fb30 (patch)
tree4efaec3d4f72ccc37791f3ebd2d1fc8a94898801
parent8caf1c9c6a3481e933a74bd5977eb3448c56c4c8 (diff)
improve extractor
-rw-r--r--tests/projects/package/toolchain_muslcc/src/main.c7
-rw-r--r--tests/projects/package/toolchain_muslcc/xmake.lua7
-rw-r--r--xmake/modules/utils/archive/extract.lua44
-rw-r--r--xmake/toolchains/cross/check.lua14
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})