summaryrefslogtreecommitdiff
path: root/xmake/languages/c++/api.lua
diff options
context:
space:
mode:
authorruki <[email protected]>2017-01-05 14:01:58 +0800
committerruki <[email protected]>2017-01-06 17:20:08 +0800
commita79375f2e32977068e783ac4edf881bd6ccfaaaa (patch)
treeda7b5949cac05ee74f8b6e8fc74f2959666c6f65 /xmake/languages/c++/api.lua
parent63463f04bee8ea369c2bbe0306f1e9316333f0dc (diff)
move some c/c++ apis to language
Diffstat (limited to 'xmake/languages/c++/api.lua')
-rw-r--r--xmake/languages/c++/api.lua202
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
+
+