diff options
| author | ruki <[email protected]> | 2023-11-03 00:36:46 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2023-11-03 00:36:46 +0800 |
| commit | d92d8ad1fda4d9605d08ae4c44271d9273642a93 (patch) | |
| tree | f4737cb1df283336ed87c32c0962171cd8399331 | |
| parent | 8d73a80b51d05aa81b0aaf6da02824e33352ca57 (diff) | |
improve binary match
| -rw-r--r-- | xmake/core/project/option.lua | 18 | ||||
| -rw-r--r-- | xmake/includes/check/check_sizeof.lua | 13 | ||||
| -rw-r--r-- | xmake/modules/lib/detect/check_cxsnippets.lua | 9 |
3 files changed, 24 insertions, 16 deletions
diff --git a/xmake/core/project/option.lua b/xmake/core/project/option.lua index 4b808bec3..0e4499f57 100644 --- a/xmake/core/project/option.lua +++ b/xmake/core/project/option.lua @@ -113,17 +113,17 @@ function _instance:_do_check_cxsnippets(snippets) local snippets_build = {} local snippets_tryrun = {} local snippets_output = {} - local snippets_binaryfind = {} - local snippet_binaryfind = nil + local snippets_binary_match = {} + local snippet_binary_match = nil if snippets then for name, snippet in pairs(snippets) do if self:extraconf(kind .. "snippets", name, "output") then snippets_output[name] = snippet elseif self:extraconf(kind .. "snippets", name, "tryrun") then snippets_tryrun[name] = snippet - elseif self:extraconf(kind .. "snippets", name, "binaryfind") then - snippets_binaryfind[name] = snippet - snippet_binaryfind = self:extraconf(kind .. "snippets", name, "binaryfind") + elseif self:extraconf(kind .. "snippets", name, "binary_match") then + snippets_binary_match[name] = snippet + snippet_binary_match = self:extraconf(kind .. "snippets", name, "binary_match") else snippets_build[name] = snippet end @@ -178,15 +178,15 @@ function _instance:_do_check_cxsnippets(snippets) end end - -- check snippets (run with binaryfind) - if #table.keys(snippets_binaryfind) > 0 then - local ok, results_or_errors, output = sandbox.load(self._check_cxsnippets, snippets_binaryfind, { + -- check snippets (run with binary_match) + if #table.keys(snippets_binary_match) > 0 then + local ok, results_or_errors, output = sandbox.load(self._check_cxsnippets, snippets_binary_match, { target = self, sourcekind = sourcekind, types = types, funcs = funcs, includes = includes, - binaryfind = snippet_binaryfind}) + binary_match = snippet_binary_match}) if not ok then return false, -1, results_or_errors end diff --git a/xmake/includes/check/check_sizeof.lua b/xmake/includes/check/check_sizeof.lua index c4921fbf9..57db09205 100644 --- a/xmake/includes/check/check_sizeof.lua +++ b/xmake/includes/check/check_sizeof.lua @@ -28,7 +28,7 @@ -- -- configvar_check_sizeof("SIZEOF_LONG", "long") => #define SIZEOF_LONG 4 -- -local binary_match = 'INFO:size%[(%d+)%]' +local binary_match_pattern = 'INFO:size%[(%d+)%]' local check_sizeof_template = [[ #define SIZE (sizeof(${TYPE})) @@ -48,6 +48,13 @@ int main(int argc, char *argv[]) { return require; }]] +function _binary_match(content) + local match = content:match(binary_match_pattern) + if match then + return match:ltrim("0") + end +end + function check_sizeof(definition, typename, opt) opt = opt or {} if opt.number == nil then @@ -58,7 +65,7 @@ function check_sizeof(definition, typename, opt) interp_save_scope() option(optname) set_showmenu(false) - add_csnippets(definition, check_sizeof_template:gsub('${TYPE}', typename), {binaryfind = binary_match}) + add_csnippets(definition, check_sizeof_template:gsub('${TYPE}', typename), {binary_match = _binary_match}) if opt.links then add_links(opt.links) end @@ -107,7 +114,7 @@ function configvar_check_sizeof(definition, typename, opt) interp_save_scope() option(optname) set_showmenu(false) - add_csnippets(definition, check_sizeof_template:gsub('${TYPE}', typename), {binaryfind = binary_match}) + add_csnippets(definition, check_sizeof_template:gsub('${TYPE}', typename), {binary_match = _binary_match}) if opt.default == nil then set_configvar(defname, defval or 1, {quote = opt.quote}) end diff --git a/xmake/modules/lib/detect/check_cxsnippets.lua b/xmake/modules/lib/detect/check_cxsnippets.lua index 912345909..987e7f10e 100644 --- a/xmake/modules/lib/detect/check_cxsnippets.lua +++ b/xmake/modules/lib/detect/check_cxsnippets.lua @@ -240,7 +240,7 @@ function main(snippets, opt) cprint("${dim}> %s", compiler.compcmd(sourcefile, objectfile, opt)) end compiler.compile(sourcefile, objectfile, opt) - if #links > 0 or opt.tryrun or opt.binaryfind then + if #links > 0 or opt.tryrun or opt.binary_match then if option.get("diagnosis") then cprint("${dim}> %s", linker.linkcmd("binary", {"cc", "cxx"}, objectfile, binaryfile, opt)) end @@ -257,10 +257,11 @@ function main(snippets, opt) os.vrun(binaryfile) end end - if opt.binaryfind then + local binary_match = opt.binary_match + if binary_match then local content = io.readfile(binaryfile, {encoding = "binary"}) - local match = content:match(opt.binaryfind) - if match then + local match = type(binary_match) == "function" and binary_match(content) or content:match(binary_match) + if match ~= nil then return true, match end end |
