summaryrefslogtreecommitdiff
path: root/xmake/core/package/component.lua
diff options
context:
space:
mode:
Diffstat (limited to 'xmake/core/package/component.lua')
-rw-r--r--xmake/core/package/component.lua30
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)