summaryrefslogtreecommitdiff
path: root/xmake/core/project/target.lua
diff options
context:
space:
mode:
authorruki <[email protected]>2019-05-10 22:53:49 +0800
committerruki <[email protected]>2019-05-10 11:22:55 +0800
commit13e02d0fa943dfd9ea3a0f4c2184a3df46058a20 (patch)
tree9be65f482df4d26dc16606ef19a80f0b10511a5a /xmake/core/project/target.lua
parent6f3d4c780f2bb0f7334f808f70189e98d0d9e49c (diff)
improve package:script()
Diffstat (limited to 'xmake/core/project/target.lua')
-rw-r--r--xmake/core/project/target.lua35
1 files changed, 21 insertions, 14 deletions
diff --git a/xmake/core/project/target.lua b/xmake/core/project/target.lua
index cebbfec7d..86b86fe70 100644
--- a/xmake/core/project/target.lua
+++ b/xmake/core/project/target.lua
@@ -1332,26 +1332,33 @@ function _instance:script(name, generic)
result = script
elseif type(script) == "table" then
- -- match script for special plat and arch
- local plat = (config.get("plat") or "")
- local pattern = plat .. '|' .. (config.get("arch") or "")
+ -- get plat and arch
+ local plat = config.get("plat") or ""
+ local arch = config.get("arch") or ""
+
+ -- match pattern
+ --
+ -- `@macosx,linux`
+ -- `android@macosx,linux`
+ -- `android|armv7-a@macosx,linux`
+ --
for _pattern, _script in pairs(script) do
- if not _pattern:startswith("__") and pattern:find('^' .. _pattern .. '$') then
+ local hosts = {}
+ local hosts_spec = false
+ _pattern = _pattern:gsub("@(.+)", function (v)
+ for _, host in ipairs(v:split(',')) do
+ hosts[host] = true
+ hosts_spec = true
+ end
+ return ""
+ end)
+ if not _pattern:startswith("__") and (not hosts_spec or hosts[os.host()])
+ and (_pattern:trim() == "" or (plat .. '|' .. arch):find('^' .. _pattern .. '$') or plat:find('^' .. _pattern .. '$')) then
result = _script
break
end
end
- -- match script for special plat
- if result == nil then
- for _pattern, _script in pairs(script) do
- if not _pattern:startswith("__") and plat:find('^' .. _pattern .. '$') then
- result = _script
- break
- end
- end
- end
-
-- get generic script
result = result or script["__generic__"] or generic
end