diff options
| author | ruki <[email protected]> | 2021-08-07 10:45:19 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2021-08-07 10:45:19 +0800 |
| commit | f8fb074b73dd4317dd0f00a07b17cf9e9833f431 (patch) | |
| tree | 3db21476e41286a38afcca3e69519d2c3b5ffe5d | |
| parent | 0f35e8d5248fc56c395a3d03a1ac35a2e3378e63 (diff) | |
| parent | c31dca026e2fd927b0719a03adf4d346f1be4662 (diff) | |
Merge pull request #1554 from xmake-io/rule
Improve rule
| -rw-r--r-- | tests/projects/other/bin2c/xmake.lua | 4 | ||||
| -rw-r--r-- | xmake/core/project/target.lua | 29 |
2 files changed, 25 insertions, 8 deletions
diff --git a/tests/projects/other/bin2c/xmake.lua b/tests/projects/other/bin2c/xmake.lua index b5517a54e..b4c71e705 100644 --- a/tests/projects/other/bin2c/xmake.lua +++ b/tests/projects/other/bin2c/xmake.lua @@ -2,9 +2,9 @@ add_rules("mode.debug", "mode.release") target("test") set_kind("binary") - add_rules("utils.bin2c", {linewidth = 16}) + add_rules("utils.bin2c", {linewidth = 16, extensions = {".bin", ".png"}}) add_files("src/*.c") add_files("src/*.bin") - add_files("src/*.png", {rules = "utils.bin2c"}) + add_files("src/*.png") diff --git a/xmake/core/project/target.lua b/xmake/core/project/target.lua index 3eed0cdad..ac9b63a0c 100644 --- a/xmake/core/project/target.lua +++ b/xmake/core/project/target.lua @@ -1116,11 +1116,15 @@ function _instance:filerules(sourcefile) if not key2rules then key2rules = {} for _, r in pairs(table.wrap(self:rules())) do - for _, sourcekind in ipairs(table.wrap(r:get("sourcekinds"))) do + -- we can also get sourcekinds from add_rules("xxx", {sourcekinds = "cxx"}) + local rule_sourcekinds = self:extraconf("rules", r:name(), "sourcekinds") or r:get("sourcekinds") + for _, sourcekind in ipairs(table.wrap(rule_sourcekinds)) do key2rules[sourcekind] = key2rules[sourcekind] or {} table.insert(key2rules[sourcekind], r) end - for _, extension in ipairs(table.wrap(r:get("extensions"))) do + -- we can also get extensions from add_rules("xxx", {extensions = ".cpp"}) + local rule_extensions = self:extraconf("rules", r:name(), "extensions") or r:get("extensions") + for _, extension in ipairs(table.wrap(rule_extensions)) do extension = extension:lower() key2rules[extension] = key2rules[extension] or {} table.insert(key2rules[extension], r) @@ -1130,13 +1134,26 @@ function _instance:filerules(sourcefile) end -- get target rules from the given sourcekind or extension + local rules_override = {} local filename = path.filename(sourcefile):lower() for _, r in ipairs(table.wrap(key2rules[path.extension(filename, 2)] or - key2rules[path.extension(filename)] or - key2rules[self:sourcekind_of(filename)])) do - table.insert(rules, r) + key2rules[path.extension(filename)])) do + if self:extraconf("rules", r:name(), "override") then + table.insert(rules_override, r) + else + table.insert(rules, r) + end + end + for _, r in ipairs(table.wrap(key2rules[self:sourcekind_of(filename)])) do + if self:extraconf("rules", r:name(), "override") then + table.insert(rules_override, r) + else + table.insert(rules, r) + end end - return rules + + -- we will use overrided rules first, e.g. add_rules("xxx", {override = true}) + return #rules_override > 0 and rules_override or rules end -- get the config info of the given source file |
