diff options
| author | ruki <[email protected]> | 2022-10-17 23:04:46 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2022-10-17 23:04:46 +0800 |
| commit | 2e160359e659e9760f9c2c2c9a5ea8537dcd56c8 (patch) | |
| tree | 7c306798c204c623203c8ea0c35365ebeaac1962 /xmake/core/package/component.lua | |
| parent | cd0b3f31b288a0676099218677b03456e266fd9f (diff) | |
load components
Diffstat (limited to 'xmake/core/package/component.lua')
| -rw-r--r-- | xmake/core/package/component.lua | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/xmake/core/package/component.lua b/xmake/core/package/component.lua index 6ebaf4a41..780fa06f5 100644 --- a/xmake/core/package/component.lua +++ b/xmake/core/package/component.lua @@ -33,6 +33,7 @@ local hashset = require("base/hashset") local scopeinfo = require("base/scopeinfo") local interpreter = require("base/interpreter") local language = require("language/language") +local sandbox = require("sandbox/sandbox") -- new an instance function _instance.new(name, opt) @@ -88,6 +89,34 @@ function _instance:extraconf_set(name, item, key, value) return self._INFO:extraconf_set(name, item, key, value) end +-- get on_component script +function _instance:_on_component() + local script = self:package():get("component") + local result = nil + if type(script) == "function" then + result = script + elseif type(script) == "table" then + result = script[self:name()] + result = result or script["__generic__"] + end + return result +end + +-- load this component +function _instance:_load() + local loaded = self._LOADED + if not loaded then + local script = self:_on_component() + if script then + local ok, errors = sandbox.load(script, self:package(), self) + if not ok then + os.raise("load component(%s) failed, %s", self:name(), errors or "unknown errors") + end + end + self._LOADED = true + end +end + -- the interpreter function component._interpreter() local interp = component._INTERPRETER @@ -110,7 +139,6 @@ function component.apis() } end - -- new component function component.new(name, opt) return _instance.new(name, opt) |
