diff options
| author | ruki <[email protected]> | 2016-12-23 08:44:49 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2017-01-06 17:20:08 +0800 |
| commit | 41b436bf13e65ea0a9eb3e826d944a626e387df2 (patch) | |
| tree | 9c0b16f1a065e1a8429e20a5e5d68ab8d02672ee | |
| parent | b068b2c7639c75d3c599d1e4851de87b7bc70cfd (diff) | |
add api define for interpreter
| -rw-r--r-- | xmake/core/base/interpreter.lua | 67 | ||||
| -rw-r--r-- | xmake/core/language/language.lua | 6 | ||||
| -rw-r--r-- | xmake/core/project/project.lua | 59 | ||||
| -rwxr-xr-x | xmake/languages/c++/xmake.lua | 6 |
4 files changed, 80 insertions, 58 deletions
diff --git a/xmake/core/base/interpreter.lua b/xmake/core/base/interpreter.lua index 2c7a23cf0..af21e9b82 100644 --- a/xmake/core/base/interpreter.lua +++ b/xmake/core/base/interpreter.lua @@ -1088,6 +1088,73 @@ function interpreter:api_register_add_pathes(scope_kind, ...) self:_api_register_xxx_values(scope_kind, "add", implementation, ...) end +-- define apis +-- +-- @code +-- interp:api_define +-- { +-- values = +-- { +-- -- target.add_xxx +-- "target.add_links" +-- , "target.add_goflags" +-- , "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" +-- } +-- , pathes = +-- { +-- -- target.add_xxx +-- "target.add_linkdirs" +-- -- option.add_xxx +-- , "option.add_linkdirs" +-- } +-- } +-- @endcode +-- +function interpreter:api_define(apis) + + -- register language apis + for apitype, apifuncs in pairs(apis) do + for _, apifunc in ipairs(apifuncs) do + + -- get api function + apifunc = apifunc:split('.') + local apiscope = apifunc[1] + local funcname = apifunc[2] + assert(apiscope and 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 + end + end + assert(prefix) + + -- 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 + + -- register api + register(self, apiscope, funcname) + end + end +end + -- the builtin api: add_subdirs() function interpreter:api_builtin_add_subdirs(...) diff --git a/xmake/core/language/language.lua b/xmake/core/language/language.lua index 43b77898e..3800647cc 100644 --- a/xmake/core/language/language.lua +++ b/xmake/core/language/language.lua @@ -272,12 +272,12 @@ function language.apis() -- load all languages local languages, errors = language.load() if not languages then - return nil, errors + os.raise(errors) end - + -- merge apis for each language local apis = {values = {}, pathes = {}} - for _, instance in pairs(languages) do + for name, instance in pairs(languages) do local instance_apis = instance:get("apis") if instance_apis then table.join2(apis.values, table.wrap(instance_apis.values)) diff --git a/xmake/core/project/project.lua b/xmake/core/project/project.lua index fd42e661c..9caacffbc 100644 --- a/xmake/core/project/project.lua +++ b/xmake/core/project/project.lua @@ -299,11 +299,11 @@ function project._interpreter() -- register api: target(), option() and task() interp:api_register_scope("target", "option", "task") --- table.dump(language.apis()) + -- define apis for language + interp:api_define(language.apis()) -- register api: set_values() to target interp:api_register_set_values("target", "kind" - , "config_h_prefix" , "version" , "project" , "strip" @@ -315,35 +315,16 @@ function project._interpreter() -- register api: add_values() to target interp:api_register_add_values("target", "deps" - , "links" - , "cflags" - , "cxflags" - , "cxxflags" - , "mflags" - , "mxflags" - , "mxxflags" - , "ldflags" - , "arflags" - , "shflags" , "options" - , "defines" - , "undefines" - , "defines_h" - , "undefines_h" , "languages" , "vectorexts") -- register api: set_pathes() to target - interp:api_register_set_pathes("target", "headerdir" - , "targetdir" - , "objectdir" - , "config_h") + interp:api_register_set_pathes("target", "targetdir" + , "objectdir") -- register api: add_pathes() to target - interp:api_register_add_pathes("target", "files" - , "headers" - , "linkdirs" - , "includedirs") + interp:api_register_add_pathes("target", "files") -- register api: on_action() to target @@ -380,36 +361,10 @@ function project._interpreter() , "description") -- register api: add_values() to option - interp:api_register_add_values("option", "links" - , "cincludes" - , "cxxincludes" - , "cfuncs" - , "cxxfuncs" - , "ctypes" - , "cxxtypes" - , "cflags" - , "cxflags" - , "cxxflags" - , "mflags" - , "mxflags" - , "mxxflags" - , "ldflags" - , "arflags" - , "shflags" - , "vectorexts" + interp:api_register_add_values("option", "vectorexts" , "bindings" - , "rbindings" - , "defines" - , "defines_if_ok" - , "defines_h_if_ok" - , "undefines" - , "undefines_if_ok" - , "undefines_h_if_ok") + , "rbindings") - -- register api: add_pathes() to option - interp:api_register_add_pathes("option", "linkdirs" - , "includedirs") - -- 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) diff --git a/xmake/languages/c++/xmake.lua b/xmake/languages/c++/xmake.lua index 20c2087bd..7854a6e98 100755 --- a/xmake/languages/c++/xmake.lua +++ b/xmake/languages/c++/xmake.lua @@ -38,8 +38,8 @@ language("c++") _g.shflags = {} -- init apis - _g.api = {} - _g.api.values = + _g.apis = {} + _g.apis.values = { -- target.set_xxx "target.set_config_h_prefix" @@ -76,7 +76,7 @@ language("c++") , "option.add_undefines_if_ok" , "option.add_undefines_h_if_ok" } - _g.api.pathes = + _g.apis.pathes = { -- target.set_xxx "target.set_headerdir" |
