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 /xmake/languages/c++/api.lua | |
| parent | 63463f04bee8ea369c2bbe0306f1e9316333f0dc (diff) | |
move some c/c++ apis to language
Diffstat (limited to 'xmake/languages/c++/api.lua')
| -rw-r--r-- | xmake/languages/c++/api.lua | 202 |
1 files changed, 202 insertions, 0 deletions
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 + + |
