diff options
Diffstat (limited to 'xmake/core/project/target.lua')
| -rw-r--r-- | xmake/core/project/target.lua | 29 |
1 files changed, 23 insertions, 6 deletions
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 |
