summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2016-12-26 08:59:06 +0800
committerruki <[email protected]>2017-01-06 17:20:08 +0800
commitcf15bd5f7162d6f009ff749e4fe6a29bd22cdda2 (patch)
tree82e72a1f6a2a5a84b3cdc8b1ee9d00eeab726a12
parent41b436bf13e65ea0a9eb3e826d944a626e387df2 (diff)
define apis for all scopes again
-rwxr-xr-xREADME.md2
-rwxr-xr-xREADME_zh.md2
-rw-r--r--xmake/core/base/interpreter.lua20
-rw-r--r--xmake/core/language/language.lua22
-rw-r--r--xmake/core/platform/platform.lua50
-rw-r--r--xmake/core/project/project.lua147
-rw-r--r--xmake/core/project/task.lua30
-rw-r--r--xmake/core/project/template.lua33
8 files changed, 163 insertions, 143 deletions
diff --git a/README.md b/README.md
index 64c6c4ae6..5391f682a 100755
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
# A make-like build utility based on Lua
-[![Build Status](https://api.travis-ci.org/waruqi/xmake.svg)](https://travis-ci.org/waruqi/xmake) [![Build status](https://ci.appveyor.com/api/projects/status/cop0jof7vs6as34r?svg=true)](https://ci.appveyor.com/project/waruqi/xmake) [![Join the chat at https://gitter.im/waruqi/tboox](https://badges.gitter.im/waruqi/tboox.svg)](https://gitter.im/waruqi/tboox?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![donate](http://tboox.org/static/img/donate.svg)](http://xmake.io/pages/donation.html#donate)
+[![Build Status](https://api.travis-ci.org/tboox/xmake.svg)](https://travis-ci.org/tboox/xmake) [![Build status](https://ci.appveyor.com/api/projects/status/cop0jof7vs6as34r?svg=true)](https://ci.appveyor.com/project/tboox/xmake) [![Join the chat at https://gitter.im/waruqi/tboox](https://badges.gitter.im/waruqi/tboox.svg)](https://gitter.im/waruqi/tboox?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![donate](http://tboox.org/static/img/donate.svg)](http://xmake.io/pages/donation.html#donate)
## Introduction ([中文](/README_zh.md))
diff --git a/README_zh.md b/README_zh.md
index 26b98e852..2cabac97e 100755
--- a/README_zh.md
+++ b/README_zh.md
@@ -1,6 +1,6 @@
# 一个基于Lua的轻量级跨平台自动构建工具
-[![Build Status](https://api.travis-ci.org/waruqi/xmake.svg)](https://travis-ci.org/waruqi/xmake) [![Build status](https://ci.appveyor.com/api/projects/status/cop0jof7vs6as34r?svg=true)](https://ci.appveyor.com/project/waruqi/xmake) [![Join the chat at https://gitter.im/waruqi/tboox](https://badges.gitter.im/waruqi/tboox.svg)](https://gitter.im/waruqi/tboox?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![donate](http://tboox.org/static/img/donate.svg)](http://xmake.io/pages/donation.html#donate)
+[![Build Status](https://api.travis-ci.org/tboox/xmake.svg)](https://travis-ci.org/tboox/xmake) [![Build status](https://ci.appveyor.com/api/projects/status/cop0jof7vs6as34r?svg=true)](https://ci.appveyor.com/project/tboox/xmake) [![Join the chat at https://gitter.im/waruqi/tboox](https://badges.gitter.im/waruqi/tboox.svg)](https://gitter.im/waruqi/tboox?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![donate](http://tboox.org/static/img/donate.svg)](http://xmake.io/pages/donation.html#donate)
## 简介
diff --git a/xmake/core/base/interpreter.lua b/xmake/core/base/interpreter.lua
index af21e9b82..86f57ebb2 100644
--- a/xmake/core/base/interpreter.lua
+++ b/xmake/core/base/interpreter.lua
@@ -1121,14 +1121,22 @@ end
function interpreter:api_define(apis)
-- register language apis
+ local scopes = {}
for apitype, apifuncs in pairs(apis) do
for _, apifunc in ipairs(apifuncs) do
-- get api function
+ local apiscope = nil
+ local funcname = nil
apifunc = apifunc:split('.')
- local apiscope = apifunc[1]
- local funcname = apifunc[2]
- assert(apiscope and funcname)
+ assert(apifunc)
+ if #apifunc == 2 then
+ apiscope = apifunc[1]
+ funcname = apifunc[2]
+ else
+ funcname = apifunc[1]
+ end
+ assert(funcname)
-- get function prefix
local prefix = nil
@@ -1148,6 +1156,12 @@ function interpreter:api_define(apis)
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
+ end
-- register api
register(self, apiscope, funcname)
diff --git a/xmake/core/language/language.lua b/xmake/core/language/language.lua
index 3800647cc..f1134d614 100644
--- a/xmake/core/language/language.lua
+++ b/xmake/core/language/language.lua
@@ -154,14 +154,20 @@ function language._interpreter()
local interp = interpreter.new()
assert(interp)
- -- register api: language()
- interp:api_register_scope("language")
-
- -- register api: on_load()
- interp:api_register_on_script("language", "load")
-
- -- register api: set_values() to language
- interp:api_register_set_values("language", "sourcekinds")
+ -- define apis
+ interp:api_define
+ {
+ values =
+ {
+ -- language.set_xxx
+ "language.set_sourcekinds"
+ }
+ , script =
+ {
+ -- language.on_xxx
+ "language.on_load"
+ }
+ }
-- save interpreter
language._INTERPRETER = interp
diff --git a/xmake/core/platform/platform.lua b/xmake/core/platform/platform.lua
index 263f2e6e0..a33852866 100644
--- a/xmake/core/platform/platform.lua
+++ b/xmake/core/platform/platform.lua
@@ -206,35 +206,27 @@ function platform._interpreter()
local interp = interpreter.new()
assert(interp)
- -- register api: platform()
- interp:api_register_scope("platform")
-
- -- register api: set_os()
- interp:api_register_set_values("platform", "os")
-
- -- register api: set_hosts()
- interp:api_register_set_values("platform", "hosts")
-
- -- register api: set_archs()
- interp:api_register_set_values("platform", "archs")
-
- -- register api: set_menu()
- interp:api_register_set_values("platform", "menu")
-
- -- register api: set_checker()
- interp:api_register_set_values("platform", "checker")
-
- -- register api: set_tooldirs()
- interp:api_register_set_values("platform", "tooldirs")
-
- -- register api: set_environment()
- interp:api_register_set_values("platform", "environment")
-
- -- register api: set_installer()
- interp:api_register_set_values("platform", "installer")
-
- -- register api: on_load()
- interp:api_register_on_script("platform", "load")
+ -- define apis
+ interp:api_define
+ {
+ values =
+ {
+ -- platform.set_xxx
+ "platform.set_os"
+ , "platform.set_hosts"
+ , "platform.set_archs"
+ , "platform.set_menu"
+ , "platform.set_checker"
+ , "platform.set_tooldirs"
+ , "platform.set_environment"
+ , "platform.set_installer"
+ }
+ , script =
+ {
+ -- platform.on_xxx
+ "platform.on_load"
+ }
+ }
-- save interpreter
platform._INTERPRETER = interp
diff --git a/xmake/core/project/project.lua b/xmake/core/project/project.lua
index 9caacffbc..044cbdff3 100644
--- a/xmake/core/project/project.lua
+++ b/xmake/core/project/project.lua
@@ -296,74 +296,80 @@ function project._interpreter()
-- set root scope
interp:rootscope_set("target")
- -- register api: target(), option() and task()
- interp:api_register_scope("target", "option", "task")
-
-- define apis for language
interp:api_define(language.apis())
- -- register api: set_values() to target
- interp:api_register_set_values("target", "kind"
- , "version"
- , "project"
- , "strip"
- , "options"
- , "symbols"
- , "warnings"
- , "optimize"
- , "languages")
-
- -- register api: add_values() to target
- interp:api_register_add_values("target", "deps"
- , "options"
- , "languages"
- , "vectorexts")
-
- -- register api: set_pathes() to target
- interp:api_register_set_pathes("target", "targetdir"
- , "objectdir")
-
- -- register api: add_pathes() to target
- interp:api_register_add_pathes("target", "files")
-
-
- -- register api: on_action() to target
- interp:api_register_on_script("target", "run"
- , "build"
- , "clean"
- , "package"
- , "install"
- , "uninstall")
-
- -- register api: before_action() to target
- interp:api_register_before_script("target", "run"
- , "build"
- , "clean"
- , "package"
- , "install"
- , "uninstall")
-
- -- register api: after_action() to target
- interp:api_register_after_script("target", "run"
- , "build"
- , "clean"
- , "package"
- , "install"
- , "uninstall")
-
- -- register api: set_values() to option
- interp:api_register_set_values("option", "default"
- , "showmenu"
- , "category"
- , "warnings"
- , "optimize"
- , "languages"
- , "description")
-
- -- register api: add_values() to option
- interp:api_register_add_values("option", "vectorexts"
- , "bindings"
- , "rbindings")
+ -- define apis for target, option and task
+ interp:api_define
+ {
+ values =
+ {
+ -- target.set_xxx
+ "target.set_kind"
+ , "target.set_version"
+ , "target.set_project"
+ , "target.set_strip"
+ , "target.set_options"
+ , "target.set_symbols"
+ , "target.set_warnings"
+ , "target.set_optimize"
+ , "target.set_languages"
+ -- target.add_xxx
+ , "target.add_deps"
+ , "target.add_options"
+ , "target.add_languages"
+ , "target.add_vectorexts"
+ -- option.set_xxx
+ , "option.set_default"
+ , "option.set_showmenu"
+ , "option.set_category"
+ , "option.set_warnings"
+ , "option.set_optimize"
+ , "option.set_languages"
+ , "option.set_description"
+ -- option.add_xxx
+ , "option.add_vectorexts"
+ , "option.add_bindings"
+ , "option.add_rbindings"
+ -- task.set_xxx
+ , "task.set_category"
+ , "task.set_menu"
+ }
+ , pathes =
+ {
+ -- target.set_xxx
+ "target.set_targetdir"
+ , "target.set_objectdir"
+ -- target.add_xxx
+ , "target.add_files"
+ }
+ , script =
+ {
+ -- target.on_xxx
+ "target.on_run"
+ , "target.on_build"
+ , "target.on_clean"
+ , "target.on_package"
+ , "target.on_install"
+ , "target.on_uninstall"
+ -- target.before_xxx
+ , "target.before_run"
+ , "target.before_build"
+ , "target.before_clean"
+ , "target.before_package"
+ , "target.before_install"
+ , "target.before_uninstall"
+ -- target.after_xxx
+ , "target.after_run"
+ , "target.after_build"
+ , "target.after_clean"
+ , "target.after_package"
+ , "target.after_install"
+ , "target.after_uninstall"
+ -- target.on_xxx
+ , "task.on_run"
+ }
+ }
-- register api: add_cfunc() and add_cfuncs() to target
interp:api_register("target", "add_cfunc", project._api_add_cfunc)
@@ -376,17 +382,6 @@ function project._interpreter()
-- register api: add_packages() to target
interp:api_register_builtin("add_packages", interp:_api_within_scope("target", "add_options"))
- -- register api: set_category()
- --
- -- category: main, action, plugin, task (default)
- interp:api_register_set_values("task", "category")
-
- -- register api: set_menu()
- interp:api_register_set_values("task", "menu")
-
- -- register api: on_run()
- interp:api_register_on_script("task", "run")
-
-- 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)
diff --git a/xmake/core/project/task.lua b/xmake/core/project/task.lua
index a0174e9e8..1d1bf37dd 100644
--- a/xmake/core/project/task.lua
+++ b/xmake/core/project/task.lua
@@ -160,20 +160,22 @@ function task._interpreter()
-- init interpreter
local interp = interpreter.new()
assert(interp)
-
- -- register api: task()
- interp:api_register_scope("task")
-
- -- register api: set_category()
- --
- -- category: main, action, plugin, task (default)
- interp:api_register_set_values("task", "category")
-
- -- register api: set_menu()
- interp:api_register_set_values("task", "menu")
-
- -- register api: on_run()
- interp:api_register_on_script("task", "run")
+
+ -- define apis
+ interp:api_define
+ {
+ values =
+ {
+ -- task.set_xxx
+ "task.set_category" -- main, action, plugin, task (default)
+ , "task.set_menu"
+ }
+ , script =
+ {
+ -- task.on_xxx
+ "task.on_run"
+ }
+ }
-- set filter
interp:filter_set(filter.new(function (variable)
diff --git a/xmake/core/project/template.lua b/xmake/core/project/template.lua
index d80283677..5830174d0 100644
--- a/xmake/core/project/template.lua
+++ b/xmake/core/project/template.lua
@@ -47,17 +47,28 @@ function template._interpreter()
local interp = interpreter.new()
assert(interp)
- -- register api: set_description() and set_projectdir()
- interp:api_register_set_values(nil, "description", "projectdir")
-
- -- register api: add_macrofiles()
- interp:api_register_add_values(nil, "macrofiles")
-
- -- register api: add_macros()
- interp:api_register_add_keyvalues(nil, "macros")
-
- -- register api: on_create()
- interp:api_register_on_script(nil, "create")
+ -- define apis (only root scope)
+ interp:api_define
+ {
+ values =
+ {
+ -- set_xxx
+ "set_description"
+ , "set_projectdir"
+ -- add_xxx
+ , "add_macrofiles"
+ }
+ , keyvalues =
+ {
+ -- add_xxx
+ "add_macros"
+ }
+ , script =
+ {
+ -- on_xxx
+ "on_create"
+ }
+ }
-- save interpreter
template._INTERPRETER = interp