summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2022-10-08 00:53:01 +0800
committerruki <[email protected]>2022-10-08 00:53:01 +0800
commit452ada3fd46143d8428eb7eb5186a41e795b6339 (patch)
treef139e5c4d582eb92642c6883a837d7c36990f022
parent29a3268fbf174eafd0b01bc4731a81f72a98570d (diff)
load package rules
-rw-r--r--xmake/actions/config/main.lua35
-rw-r--r--xmake/core/project/package.lua6
2 files changed, 34 insertions, 7 deletions
diff --git a/xmake/actions/config/main.lua b/xmake/actions/config/main.lua
index 1ee187c78..062e21696 100644
--- a/xmake/actions/config/main.lua
+++ b/xmake/actions/config/main.lua
@@ -196,11 +196,32 @@ function _config_targets(targetname)
end
end
--- load rules in the required packages
-function _load_package_rules()
- for _, pkginfo in pairs(project.required_packages()) do
- print(pkginfo:name())
- print(table.keys(pkginfo:rules()))
+-- load rules in the required packages for target
+function _load_package_rules_for_target(target, packages)
+ for _, rulename in ipairs(target:get("rules")) do
+ local packagename = rulename:match("@(.-)/")
+ if packagename then
+ local pkginfo = packages[packagename]
+ if pkginfo then
+ local r = pkginfo:rule(rulename)
+ if r then
+ target:rule_add(r)
+ end
+ end
+ end
+ end
+end
+
+-- load rules in the required packages for targets
+function _load_package_rules_for_targets()
+ local packages = project.required_packages()
+ if not packages then
+ return
+ end
+ for _, target in ipairs(project.ordertargets()) do
+ if target:is_enabled() then
+ _load_package_rules_for_target(target, packages)
+ end
end
end
@@ -450,8 +471,8 @@ force to build in current directory via run `xmake -P .`]], os.projectdir())
_check_target_toolchains()
end
- -- load package rules
- _load_package_rules()
+ -- load package rules for targets
+ _load_package_rules_for_targets()
-- config targets
_config_targets(targetname)
diff --git a/xmake/core/project/package.lua b/xmake/core/project/package.lua
index 8b4e6a28b..388862d91 100644
--- a/xmake/core/project/package.lua
+++ b/xmake/core/project/package.lua
@@ -166,6 +166,11 @@ function _instance:enable(enabled)
self:set("__enabled", enabled)
end
+-- get the given rule
+function _instance:rule(name)
+ return self:rules()[name]
+end
+
-- get package rules
function _instance:rules()
local rules = self._RULES
@@ -190,6 +195,7 @@ function _instance:rules()
-- make rule instances
rules = {}
for rulename, ruleinfo in pairs(ruleinfos) do
+ rulename = "@" .. self:name() .. "/" .. rulename
local instance = rule.new(rulename, ruleinfo)
rules[rulename] = instance
end