diff options
| author | ruki <[email protected]> | 2017-01-03 22:30:35 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2017-01-06 17:20:08 +0800 |
| commit | c2dc890bc38a34c10fd01afa01fb92d3da1587f2 (patch) | |
| tree | b7624ef8c10d58105845f90345eaee236d211da3 | |
| parent | 9c225acafa782821f6ec50eaa0f2060735fc7b7d (diff) | |
define custom api
| -rw-r--r-- | xmake/core/base/interpreter.lua | 66 | ||||
| -rw-r--r-- | xmake/core/project/project.lua | 40 |
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) |
