summaryrefslogtreecommitdiff
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
parent63463f04bee8ea369c2bbe0306f1e9316333f0dc (diff)
move some c/c++ apis to language
-rw-r--r--xmake/core/language/language.lua5
-rw-r--r--xmake/core/project/project.lua129
-rw-r--r--xmake/core/sandbox/modules/import/core/project/option.lua38
-rw-r--r--xmake/languages/c++/api.lua202
-rw-r--r--xmake/languages/c++/load.lua54
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