diff options
| author | ruki <[email protected]> | 2017-01-05 14:01:58 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2017-01-06 17:20:08 +0800 |
| commit | a79375f2e32977068e783ac4edf881bd6ccfaaaa (patch) | |
| tree | da7b5949cac05ee74f8b6e8fc74f2959666c6f65 | |
| parent | 63463f04bee8ea369c2bbe0306f1e9316333f0dc (diff) | |
move some c/c++ apis to language
| -rw-r--r-- | xmake/core/language/language.lua | 5 | ||||
| -rw-r--r-- | xmake/core/project/project.lua | 129 | ||||
| -rw-r--r-- | xmake/core/sandbox/modules/import/core/project/option.lua | 38 | ||||
| -rw-r--r-- | xmake/languages/c++/api.lua | 202 | ||||
| -rw-r--r-- | xmake/languages/c++/load.lua | 54 |
5 files changed, 247 insertions, 181 deletions
diff --git a/xmake/core/language/language.lua b/xmake/core/language/language.lua index 566b1ccdc..ad5c64367 100644 --- a/xmake/core/language/language.lua +++ b/xmake/core/language/language.lua @@ -231,18 +231,19 @@ function language.apis() os.raise(errors) end - -- merge apis for each language - local apis = {values = {}, pathes = {}} + local apis = {values = {}, pathes = {}, custom = {}} 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)) table.join2(apis.pathes, table.wrap(instance_apis.pathes)) + table.join2(apis.custom, table.wrap(instance_apis.custom)) end end apis.values = table.unique(apis.values) apis.pathes = table.unique(apis.pathes) + apis.custom = table.unique(apis.custom) -- ok return apis diff --git a/xmake/core/project/project.lua b/xmake/core/project/project.lua index 9622e2277..a11cf9ca6 100644 --- a/xmake/core/project/project.lua +++ b/xmake/core/project/project.lua @@ -128,128 +128,6 @@ function project._api_is_option(interp, ...) end end --- add c function -function project._api_add_cfunc(interp, module, alias, links, includes, checkinfo) - - -- check - assert(interp) - - -- parse the check code - local checkname, checkcode = option.checkinfo(checkinfo) - assert(checkname and checkcode) - - -- make the option name - local name = nil - if module ~= nil then - name = string.format("__%s_%s", module, checkname) - else - name = string.format("__%s", checkname) - end - - -- uses the alias name - if alias ~= nil then - checkname = alias - end - - -- make the option define - local define = nil - if module ~= nil then - define = string.format("$(prefix)_%s_HAVE_%s", module:upper(), checkname:upper()) - else - define = string.format("$(prefix)_HAVE_%s", checkname:upper()) - end - - -- save the current scope - local scope = interp:scope_save() - - -- check option - interp:api_call("option", name) - interp:api_call("set_category", "cfuncs") - interp:api_call("add_cfuncs", checkinfo) - if links then interp:api_call("add_links", links) end - if includes then interp:api_call("add_cincludes", includes) end - interp:api_call("add_defines_h_if_ok", define) - - -- restore the current scope - interp:scope_restore(scope) - - -- add this option - interp:api_call("add_options", name) -end - --- add c functions -function project._api_add_cfuncs(interp, module, links, includes, ...) - - -- check - assert(interp) - - -- done - for _, checkinfo in ipairs({...}) do - project._api_add_cfunc(interp, module, nil, links, includes, checkinfo) - end -end - --- add c++ function -function project._api_add_cxxfunc(interp, module, alias, links, includes, checkinfo) - - -- check - assert(interp and module) - - -- parse the check code - local checkname, checkcode = option.checkinfo(checkinfo) - assert(checkname and checkcode) - - -- make the option name - local name = nil - if module ~= nil then - name = string.format("__%s_%s", module, checkname) - else - name = string.format("__%s", checkname) - end - - -- uses the alias name - if alias ~= nil then - checkname = alias - end - - -- make the option define - local define = nil - if module ~= nil then - define = string.format("$(prefix)_%s_HAVE_%s", module:upper(), checkname:upper()) - else - define = string.format("$(prefix)_HAVE_%s", checkname:upper()) - end - - -- save the current scope - local scope = interp:scope_save() - - -- check option - interp:api_call("option", name) - interp:api_call("set_category", "cxxfuncs") - interp:api_call("add_cxxfuncs", checkinfo) - if links then interp:api_call("add_links", links) end - if includes then interp:api_call("add_cxxincludes", includes) end - interp:api_call("add_defines_h_if_ok", define) - - -- restore the current scope - interp:scope_restore(scope) - - -- add this option - interp:api_call("add_options", name) -end - --- add c++ functions -function project._api_add_cxxfuncs(interp, module, links, includes, ...) - - -- check - assert(interp and module) - - -- done - for _, checkinfo in ipairs({...}) do - project._api_add_cxxfunc(interp, module, nil, links, includes, checkinfo) - end -end - -- load all packages from the given directories function project._api_add_pkgdirs(interp, ...) @@ -371,13 +249,8 @@ function project._interpreter() } , 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_os", project._api_is_os } , {"is_kind", project._api_is_kind } , {"is_mode", project._api_is_mode } , {"is_plat", project._api_is_plat } diff --git a/xmake/core/sandbox/modules/import/core/project/option.lua b/xmake/core/sandbox/modules/import/core/project/option.lua new file mode 100644 index 000000000..9dec6f46c --- /dev/null +++ b/xmake/core/sandbox/modules/import/core/project/option.lua @@ -0,0 +1,38 @@ +--!The Make-like Build Utility based on Lua +-- +-- XMake is free software; you can redistribute it and/or modify +-- it under the terms of the GNU Lesser General Public License as published by +-- the Free Software Foundation; either version 2.1 of the License, or +-- (at your option) any later version. +-- +-- XMake is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU Lesser General Public License for more details. +-- +-- You should have received a copy of the GNU Lesser General Public License +-- along with XMake; +-- If not, see <a href="http://www.gnu.org/licenses/"> http://www.gnu.org/licenses/</a> +-- +-- Copyright (C) 2015 - 2016, ruki All rights reserved. +-- +-- @author ruki +-- @file option.lua +-- + +-- define module +local sandbox_core_project_option = sandbox_core_project_option or {} + +-- load modules +local option = require("project/option") +local raise = require("sandbox/modules/raise") + +-- parse checkinfo +function sandbox_core_project_option.checkinfo(checkinfo) + + -- parse it + return option.checkinfo(checkinfo) +end + +-- return module +return sandbox_core_project_option diff --git a/xmake/languages/c++/api.lua b/xmake/languages/c++/api.lua new file mode 100644 index 000000000..d2fd552af --- /dev/null +++ b/xmake/languages/c++/api.lua @@ -0,0 +1,202 @@ +--!The Make-like Build Utility based on Lua +-- +-- XMake is free software; you can redistribute it and/or modify +-- it under the terms of the GNU Lesser General Public License as published by +-- the Free Software Foundation; either version 2.1 of the License, or +-- (at your option) any later version. +-- +-- XMake is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU Lesser General Public License for more details. +-- +-- You should have received a copy of the GNU Lesser General Public License +-- along with XMake; +-- If not, see <a href="http://www.gnu.org/licenses/"> http://www.gnu.org/licenses/</a> +-- +-- Copyright (C) 2015 - 2016, ruki All rights reserved. +-- +-- @author ruki +-- @file apis.lua +-- + +-- imports +import("core.project.option") + +-- add c function +function _api_add_cfunc(interp, module, alias, links, includes, checkinfo) + + -- parse the check code + local checkname, checkcode = option.checkinfo(checkinfo) + + -- make the option name + local name = nil + if module ~= nil then + name = format("__%s_%s", module, checkname) + else + name = format("__%s", checkname) + end + + -- uses the alias name + if alias ~= nil then + checkname = alias + end + + -- make the option define + local define = nil + if module ~= nil then + define = format("$(prefix)_%s_HAVE_%s", module:upper(), checkname:upper()) + else + define = format("$(prefix)_HAVE_%s", checkname:upper()) + end + + -- save the current scope + local scope = interp:scope_save() + + -- check option + interp:api_call("option", name) + interp:api_call("set_category", "cfuncs") + interp:api_call("add_cfuncs", checkinfo) + if links then interp:api_call("add_links", links) end + if includes then interp:api_call("add_cincludes", includes) end + interp:api_call("add_defines_h_if_ok", define) + + -- restore the current scope + interp:scope_restore(scope) + + -- add this option + interp:api_call("add_options", name) +end + +-- add c functions +function _api_add_cfuncs(interp, module, links, includes, ...) + + -- done + for _, checkinfo in ipairs({...}) do + _api_add_cfunc(interp, module, nil, links, includes, checkinfo) + end +end + +-- add c++ function +function _api_add_cxxfunc(interp, module, alias, links, includes, checkinfo) + + -- parse the check code + local checkname, checkcode = option.checkinfo(checkinfo) + + -- make the option name + local name = nil + if module ~= nil then + name = format("__%s_%s", module, checkname) + else + name = format("__%s", checkname) + end + + -- uses the alias name + if alias ~= nil then + checkname = alias + end + + -- make the option define + local define = nil + if module ~= nil then + define = format("$(prefix)_%s_HAVE_%s", module:upper(), checkname:upper()) + else + define = format("$(prefix)_HAVE_%s", checkname:upper()) + end + + -- save the current scope + local scope = interp:scope_save() + + -- check option + interp:api_call("option", name) + interp:api_call("set_category", "cxxfuncs") + interp:api_call("add_cxxfuncs", checkinfo) + if links then interp:api_call("add_links", links) end + if includes then interp:api_call("add_cxxincludes", includes) end + interp:api_call("add_defines_h_if_ok", define) + + -- restore the current scope + interp:scope_restore(scope) + + -- add this option + interp:api_call("add_options", name) +end + +-- add c++ functions +function _api_add_cxxfuncs(interp, module, links, includes, ...) + + -- done + for _, checkinfo in ipairs({...}) do + _api_add_cxxfunc(interp, module, nil, links, includes, checkinfo) + end +end + + +-- get apis +function apis() + + -- init apis + _g.values = + { + -- target.set_xxx + "target.set_config_h_prefix" + -- target.add_xxx + , "target.add_links" + , "target.add_cflags" + , "target.add_cxflags" + , "target.add_cxxflags" + , "target.add_ldflags" + , "target.add_arflags" + , "target.add_shflags" + , "target.add_defines" + , "target.add_undefines" + , "target.add_defines_h" + , "target.add_undefines_h" + -- option.add_xxx + , "option.add_cincludes" + , "option.add_cxxincludes" + , "option.add_cfuncs" + , "option.add_cxxfuncs" + , "option.add_ctypes" + , "option.add_cxxtypes" + , "option.add_links" + , "option.add_cflags" + , "option.add_cxflags" + , "option.add_cxxflags" + , "option.add_ldflags" + , "option.add_arflags" + , "option.add_shflags" + , "option.add_defines" + , "option.add_defines_if_ok" + , "option.add_defines_h_if_ok" + , "option.add_undefines" + , "option.add_undefines_if_ok" + , "option.add_undefines_h_if_ok" + } + _g.pathes = + { + -- target.set_xxx + "target.set_headerdir" + , "target.set_config_h" + -- target.add_xxx + , "target.add_headers" + , "target.add_linkdirs" + , "target.add_includedirs" + -- option.add_xxx + , "option.add_linkdirs" + , "option.add_includedirs" + } + _g.custom = + { + -- target.add_xxx + {"target.add_cfunc", _api_add_cfunc } + , {"target.add_cfuncs", _api_add_cfuncs } + , {"target.add_cxxfunc", _api_add_cxxfunc } + , {"target.add_cxxfuncs", _api_add_cxxfuncs } + } + + -- ok + return _g +end + + diff --git a/xmake/languages/c++/load.lua b/xmake/languages/c++/load.lua index b13b81bb4..9cc80d7e6 100644 --- a/xmake/languages/c++/load.lua +++ b/xmake/languages/c++/load.lua @@ -21,6 +21,7 @@ -- -- imports +import("api") -- load it @@ -35,58 +36,9 @@ function main() _g.shflags = {} -- init apis - _g.apis = {} - _g.apis.values = - { - -- target.set_xxx - "target.set_config_h_prefix" - -- target.add_xxx - , "target.add_links" - , "target.add_cflags" - , "target.add_cxflags" - , "target.add_cxxflags" - , "target.add_ldflags" - , "target.add_arflags" - , "target.add_shflags" - , "target.add_defines" - , "target.add_undefines" - , "target.add_defines_h" - , "target.add_undefines_h" - -- option.add_xxx - , "option.add_cincludes" - , "option.add_cxxincludes" - , "option.add_cfuncs" - , "option.add_cxxfuncs" - , "option.add_ctypes" - , "option.add_cxxtypes" - , "option.add_links" - , "option.add_cflags" - , "option.add_cxflags" - , "option.add_cxxflags" - , "option.add_ldflags" - , "option.add_arflags" - , "option.add_shflags" - , "option.add_defines" - , "option.add_defines_if_ok" - , "option.add_defines_h_if_ok" - , "option.add_undefines" - , "option.add_undefines_if_ok" - , "option.add_undefines_h_if_ok" - } - _g.apis.pathes = - { - -- target.set_xxx - "target.set_headerdir" - , "target.set_config_h" - -- target.add_xxx - , "target.add_headers" - , "target.add_linkdirs" - , "target.add_includedirs" - -- option.add_xxx - , "option.add_linkdirs" - , "option.add_includedirs" - } + _g.apis = api.apis() + -- ok return _g end |
