summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2017-01-03 22:30:35 +0800
committerruki <[email protected]>2017-01-06 17:20:08 +0800
commitc2dc890bc38a34c10fd01afa01fb92d3da1587f2 (patch)
treeb7624ef8c10d58105845f90345eaee236d211da3
parent9c225acafa782821f6ec50eaa0f2060735fc7b7d (diff)
define custom api
-rw-r--r--xmake/core/base/interpreter.lua66
-rw-r--r--xmake/core/project/project.lua40
2 files changed, 62 insertions, 44 deletions
diff --git a/xmake/core/base/interpreter.lua b/xmake/core/base/interpreter.lua
index 86f57ebb2..f8ecef041 100644
--- a/xmake/core/base/interpreter.lua
+++ b/xmake/core/base/interpreter.lua
@@ -1101,12 +1101,16 @@ end
-- , "target.add_ldflags"
-- , "target.add_arflags"
-- , "target.add_shflags"
+--
-- -- option.add_xxx
-- , "option.add_links"
-- , "option.add_goflags"
-- , "option.add_ldflags"
-- , "option.add_arflags"
-- , "option.add_shflags"
+--
+-- -- is_xxx
+-- , {"is_os", function (interp, ...) end}
-- }
-- , pathes =
-- {
@@ -1125,6 +1129,18 @@ function interpreter:api_define(apis)
for apitype, apifuncs in pairs(apis) do
for _, apifunc in ipairs(apifuncs) do
+ -- is {"apifunc", apiscipt}?
+ local apiscript = nil
+ if type(apifunc) == "table" then
+
+ -- check
+ assert(#apifunc == 2 and type(apifunc[2]) == "function")
+
+ -- get function and script
+ apiscript = apifunc[2]
+ apifunc = apifunc[1]
+ end
+
-- get api function
local apiscope = nil
local funcname = nil
@@ -1138,33 +1154,39 @@ function interpreter:api_define(apis)
end
assert(funcname)
- -- get function prefix
- local prefix = nil
- for _, name in ipairs({"set", "add", "on", "before", "after"}) do
- if funcname:startswith(name .. "_") then
- prefix = name
- break
+ -- register api script directly
+ if apiscript ~= nil then
+ self:api_register(apiscope, funcname, apiscript)
+ else
+
+ -- get function prefix
+ local prefix = nil
+ for _, name in ipairs({"set", "add", "on", "before", "after"}) do
+ if funcname:startswith(name .. "_") then
+ prefix = name
+ break
+ end
end
- end
- assert(prefix)
+ assert(prefix)
- -- get function name
- funcname = funcname:sub(#prefix + 2)
+ -- get function name
+ funcname = funcname:sub(#prefix + 2)
- -- get register
- local register = self[string.format("api_register_%s_%s", prefix, apitype)]
- if not register then
- os.raise("interp:api_register_%s_%s() is unknown!", prefix, apitype)
- end
+ -- get register
+ local register = self[string.format("api_register_%s_%s", prefix, apitype)]
+ if not register then
+ os.raise("interp:api_register_%s_%s() is unknown!", prefix, apitype)
+ end
- -- register scope first
- if apiscope ~= nil and not scopes[apiscope] then
- self:api_register_scope(apiscope)
- scopes[apiscope] = true
+ -- register scope first
+ if apiscope ~= nil and not scopes[apiscope] then
+ self:api_register_scope(apiscope)
+ scopes[apiscope] = true
+ end
+
+ -- register api
+ register(self, apiscope, funcname)
end
-
- -- register api
- register(self, apiscope, funcname)
end
end
end
diff --git a/xmake/core/project/project.lua b/xmake/core/project/project.lua
index 044cbdff3..9622e2277 100644
--- a/xmake/core/project/project.lua
+++ b/xmake/core/project/project.lua
@@ -369,33 +369,29 @@ function project._interpreter()
-- target.on_xxx
, "task.on_run"
}
+ , custom =
+ {
+ -- target.add_xxx
+ {"target.add_cfunc", project._api_add_cfunc }
+ , {"target.add_cfuncs", project._api_add_cfuncs }
+ , {"target.add_cxxfunc", project._api_add_cxxfunc }
+ , {"target.add_cxxfuncs", project._api_add_cxxfuncs }
+ -- is_xxx
+ , {"is_os", project._api_is_os }
+ , {"is_kind", project._api_is_kind }
+ , {"is_mode", project._api_is_mode }
+ , {"is_plat", project._api_is_plat }
+ , {"is_arch", project._api_is_arch }
+ , {"is_option", project._api_is_option }
+ -- add_xxx
+ , {"add_packagedirs", project._api_add_pkgdirs }
+ , {"add_plugindirs", project._api_add_plugindirs }
+ }
}
- -- register api: add_cfunc() and add_cfuncs() to target
- interp:api_register("target", "add_cfunc", project._api_add_cfunc)
- interp:api_register("target", "add_cfuncs", project._api_add_cfuncs)
-
- -- register api: add_cxxfunc() and add_cxxfuncs() to target
- interp:api_register("target", "add_cxxfunc", project._api_add_cxxfunc)
- interp:api_register("target", "add_cxxfuncs", project._api_add_cxxfuncs)
-
-- register api: add_packages() to target
interp:api_register_builtin("add_packages", interp:_api_within_scope("target", "add_options"))
- -- register api: is_xxx() to root
- interp:api_register(nil, "is_os", project._api_is_os)
- interp:api_register(nil, "is_kind", project._api_is_kind)
- interp:api_register(nil, "is_mode", project._api_is_mode)
- interp:api_register(nil, "is_plat", project._api_is_plat)
- interp:api_register(nil, "is_arch", project._api_is_arch)
- interp:api_register(nil, "is_option", project._api_is_option)
-
- -- register api: add_packagedirs() to root
- interp:api_register(nil, "add_packagedirs", project._api_add_pkgdirs)
-
- -- register api: add_plugindirs() to root
- interp:api_register(nil, "add_plugindirs", project._api_add_plugindirs)
-
-- register api: deprecated
deprecated_project.api_register(interp)