diff options
| author | ruki <[email protected]> | 2017-11-10 23:47:15 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2017-11-10 16:43:32 +0800 |
| commit | 24bdac45ba26a318fd07b2bad0baa6d1bdc28fa9 (patch) | |
| tree | b0fa91fc30d3dd6804966f5b4950c5a6ea785877 /xmake/core/project/project.lua | |
| parent | 5605084d64edb44917f7e69752335d1fdf979515 (diff) | |
improve ar.lua on windows cmd
Diffstat (limited to 'xmake/core/project/project.lua')
| -rw-r--r-- | xmake/core/project/project.lua | 63 |
1 files changed, 62 insertions, 1 deletions
diff --git a/xmake/core/project/project.lua b/xmake/core/project/project.lua index 488aa5c61..2dfa53d7a 100644 --- a/xmake/core/project/project.lua +++ b/xmake/core/project/project.lua @@ -35,6 +35,7 @@ local global = require("base/global") local process = require("base/process") local deprecated = require("base/deprecated") local interpreter = require("base/interpreter") +local rule = require("project/rule") local target = require("project/target") local config = require("project/config") local option = require("project/option") @@ -197,6 +198,9 @@ function project.interpreter() -- set root scope interp:rootscope_set("target") + -- define apis for rule + interp:api_define(rule.apis()) + -- define apis for target interp:api_define(target.apis()) @@ -353,6 +357,41 @@ function project._load_deps(target, targets, deps, orderdeps) end end +-- load rules +function project._load_rules() + + -- get interpreter + local interp = project.interpreter() + assert(interp) + + -- enter the project directory + local oldir, errors = os.cd(os.projectdir()) + if not oldir then + return nil, errors + end + + -- load rules + local results, errors = interp:load(project.file(), "rule", true, true) + if not results then + return nil, errors + end + + -- leave the project directory + local ok, errors = os.cd(oldir) + if not ok then + return nil, errors + end + + -- make rules + local rules = {} + for rulename, ruleinfo in pairs(results) do + rules[rulename] = rule.new(rulename, ruleinfo) + end + + -- ok + return rules +end + -- load targets function project._load_targets() @@ -564,11 +603,33 @@ function project.clear() opt:clear() end - -- clear targets and options + -- clear rules, targets and options + project._RULES = nil project._TARGETS = nil project._OPTIONS = nil end +-- get the given rule +function project.rule(name) + return project.rules()[name] +end + +-- get the current configure for rules +function project.rules() + + -- load rules + if not project._RULES then + local rules, errors = project._load_RULES() + if not rules then + os.raise(errors) + end + project._RULES = rules + end + + -- ok + return project._RULES +end + -- get the given target function project.target(name) return project.targets()[name] |
