diff options
| author | ruki <[email protected]> | 2020-07-17 16:02:19 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2020-07-17 16:02:19 +0800 |
| commit | f9a4493f60eeb9078c00a112734d8caa7e29604e (patch) | |
| tree | 9fd76a4b3ee0fea7eaa28dbf0df3976c3db36b34 | |
| parent | c3dd85b98492c012fc4eb1b46fac824051a1b92a (diff) | |
| parent | 6b3cf4e5239f3f041501d0d8ee32471f33010708 (diff) | |
Merge pull request #894 from xmake-io/json
Add Json Support
| -rw-r--r-- | .gitmodules | 3 | ||||
| -rw-r--r-- | NOTICE.md | 14 | ||||
| -rw-r--r-- | core/src/demo/makefile | 4 | ||||
| m--------- | core/src/lua-cjson/lua-cjson | 0 | ||||
| -rw-r--r-- | core/src/lua-cjson/makefile | 30 | ||||
| -rw-r--r-- | core/src/lua-cjson/xmake.lua | 16 | ||||
| -rw-r--r-- | core/src/makefile | 2 | ||||
| -rw-r--r-- | core/src/xmake/engine.c | 9 | ||||
| -rw-r--r-- | core/src/xmake/xmake.lua | 2 | ||||
| -rw-r--r-- | core/xmake.lua | 8 | ||||
| -rw-r--r-- | xmake/core/base/dlist.lua | 4 | ||||
| -rw-r--r-- | xmake/core/base/json.lua | 29 | ||||
| -rw-r--r-- | xmake/core/sandbox/modules/import/core/base/json.lua | 24 | ||||
| -rw-r--r-- | xmake/core/ui/panel.lua | 2 |
14 files changed, 136 insertions, 11 deletions
diff --git a/.gitmodules b/.gitmodules index 22ed3f533..ac5f4dde3 100644 --- a/.gitmodules +++ b/.gitmodules @@ -10,3 +10,6 @@ [submodule "core/src/pdcurses/pdcurses"] path = core/src/pdcurses/pdcurses url = ../../xmake-io/xmake-core-pdcurses.git +[submodule "core/src/lua-cjson/lua-cjson"] + path = core/src/lua-cjson/lua-cjson + url = ../../xmake-io/xmake-core-lua-cjson.git @@ -5,6 +5,14 @@ This product includes software developed by The TBOOX Open Source Group (https:/ ------------------------------------------------------------------------------- +This product depends on 'lua-cjson', The Lua CJSON module provides JSON support for Lua, +which can be obtained at: + + * LICENSE: + * core/src/lua-cjson/lua-cjson/LICENSE (MIT License) + * HOMEPAGE: + * https://www.kyne.com.au/~mark/software/lua-cjson.php + This product depends on 'pdcurses', an implementation of X/Open curses for multiple platforms, which can be obtained at: @@ -25,7 +33,7 @@ This product depends on 'libsv', Public domain semantic versioning in c, which can be obtained at: * LICENSE: - * core/src/sv/repo/UNLICENSE (Public Domain License) + * core/src/sv/sv/UNLICENSE (Public Domain License) * HOMEPAGE: * https://github.com/uael/sv @@ -33,7 +41,7 @@ This product depends on 'LuaJIT', a Just-In-Time Compiler for Lua, which can be obtained at: * LICENSE: - * core/src/luajit/repo/COPYRIGHT (MIT License) + * core/src/luajit/luajit/COPYRIGHT (MIT License) * HOMEPAGE: * http://luajit.org/ @@ -41,7 +49,7 @@ This product depends on 'tbox', The Treasure Box Library, which can be obtained at: * LICENSE: - * core/src/tbox/repo/LICENSE.md (Apache License 2.0) + * core/src/tbox/tbox/LICENSE.md (Apache License 2.0) * HOMEPAGE: * https://tboox.org/ diff --git a/core/src/demo/makefile b/core/src/demo/makefile index 4ab0e2dba..160174661 100644 --- a/core/src/demo/makefile +++ b/core/src/demo/makefile @@ -14,9 +14,9 @@ demo_C_FILES += xmake demo_PKGS-$(BASE) += base # others -demo_LIBS += xmake$(DTYPE) lcurses$(DTYPE) tbox$(DTYPE) luajit$(DTYPE) sv$(DTYPE) $(BASE_LIBS) +demo_LIBS += xmake$(DTYPE) lcurses$(DTYPE) tbox$(DTYPE) luajit$(DTYPE) sv$(DTYPE) lua-cjson$(DTYPE) $(BASE_LIBS) demo_INC_DIRS += ../ ../tbox/tbox/src ../tbox/inc/$(PLAT) ../luajit/luajit/src ../sv/sv/include -demo_LIB_DIRS += ../xmake ../tbox ../luajit ../sv ../lcurses +demo_LIB_DIRS += ../xmake ../tbox ../luajit ../sv ../lcurses ../lua-cjson demo_CXFLAGS += -D__tb_prefix__=\"xmake\" # suffix diff --git a/core/src/lua-cjson/lua-cjson b/core/src/lua-cjson/lua-cjson new file mode 160000 +Subproject ddd218d35f65a3e0a9f45de5e897f5c319ee4a8 diff --git a/core/src/lua-cjson/makefile b/core/src/lua-cjson/makefile new file mode 100644 index 000000000..0a4263f03 --- /dev/null +++ b/core/src/lua-cjson/makefile @@ -0,0 +1,30 @@ +# prefix +include $(PRO_DIR)/prefix.mak + +# module name +NAMES = lua-cjson + +# module type +lua-cjson_TYPE = LIB + +# config +lua-cjson_CONFIG = n + +# core files +lua-cjson_C_FILES += \ + lua-cjson/dtoa \ + lua-cjson/g_fmt \ + lua-cjson/strbuf \ + lua-cjson/lua_cjson + +# cflags +# Use internal strtod() / g_fmt() code for performance and disable multi-thread +lua-cjson_CFLAGS += -DNDEBUG -DUSE_INTERNAL_FPCONV + +# includes +lua-cjson_INC_DIRS += \ + ../luajit/luajit/src + +# suffix +include $(PRO_DIR)/suffix.mak + diff --git a/core/src/lua-cjson/xmake.lua b/core/src/lua-cjson/xmake.lua new file mode 100644 index 000000000..b25640cae --- /dev/null +++ b/core/src/lua-cjson/xmake.lua @@ -0,0 +1,16 @@ +target("lua-cjson") + set_kind("static") + set_warnings("all") + add_deps("luajit") + if is_plat("windows") then + set_languages("c89") + end + add_files("lua-cjson/*.c|fpconv.c") + -- Use internal strtod() / g_fmt() code for performance and disable multi-thread + add_defines("NDEBUG", "USE_INTERNAL_FPCONV") + if is_plat("windows") then + -- Windows sprintf()/strtod() handle NaN/inf differently. Not supported. + add_defines("DISABLE_INVALID_NUMBERS") + add_defines("inline=__inline") + end + diff --git a/core/src/makefile b/core/src/makefile index 5793c13b7..21a06ed5a 100644 --- a/core/src/makefile +++ b/core/src/makefile @@ -3,7 +3,7 @@ include $(PRO_DIR)/prefix.mak # projects SUB_PROS += demo -DEP_PROS += lcurses sv luajit tbox xmake +DEP_PROS += lcurses sv luajit lua-cjson tbox xmake # suffix include $(PRO_DIR)/suffix.mak diff --git a/core/src/xmake/engine.c b/core/src/xmake/engine.c index cf361a8c5..fb6205ac5 100644 --- a/core/src/xmake/engine.c +++ b/core/src/xmake/engine.c @@ -224,6 +224,11 @@ tb_int_t xm_semver_select(lua_State* lua); tb_int_t xm_curses_register(lua_State* lua); #endif +// open cjson +__tb_extern_c_enter__ +tb_int_t luaopen_cjson(lua_State *l); +__tb_extern_c_leave__ + /* ////////////////////////////////////////////////////////////////////////////////////// * globals */ @@ -849,6 +854,10 @@ xm_engine_ref_t xm_engine_init(tb_char_t const* name, xm_engine_lni_initalizer_c lua_setglobal(engine->lua, "curses"); #endif + // bind json + luaopen_cjson(engine->lua); + lua_setglobal(engine->lua, "json"); + // init host xm_engine_init_host(engine); diff --git a/core/src/xmake/xmake.lua b/core/src/xmake/xmake.lua index d85b2802f..eb2cc62b9 100644 --- a/core/src/xmake/xmake.lua +++ b/core/src/xmake/xmake.lua @@ -8,7 +8,7 @@ target("xmake") if has_config("curses") or has_config("pdcurses") then add_deps("lcurses") end - add_deps("sv", "luajit", "tbox") + add_deps("sv", "luajit", "lua-cjson", "tbox") -- add defines add_defines("__tb_prefix__=\"xmake\"") diff --git a/core/xmake.lua b/core/xmake.lua index 2f1f43957..4ce9c637b 100644 --- a/core/xmake.lua +++ b/core/xmake.lua @@ -15,6 +15,12 @@ set_languages("c99", "cxx11") -- add release and debug modes add_rules("mode.release", "mode.debug") +if is_mode("release") then + set_optimize("smallest") + if is_plat("windows") then + add_ldflags("/LTCG") + end +end -- disable some compiler errors add_cxflags("-Wno-error=deprecated-declarations", "-fno-strict-aliasing", "-Wno-error=nullability-completeness", "-Wno-error=parentheses-equality") @@ -76,7 +82,7 @@ if is_plat("windows") then end -- add projects -includes("src/lcurses", "src/sv","src/luajit", "src/tbox", "src/xmake", "src/demo") +includes("src/lua-cjson", "src/lcurses", "src/sv","src/luajit", "src/tbox", "src/xmake", "src/demo") if is_plat("windows") then includes("src/pdcurses") end diff --git a/xmake/core/base/dlist.lua b/xmake/core/base/dlist.lua index 0657538e7..5d616c6c8 100644 --- a/xmake/core/base/dlist.lua +++ b/xmake/core/base/dlist.lua @@ -206,8 +206,8 @@ function dlist:ritems() end -- new dlist -function dlist:new() - return self() +function dlist.new() + return dlist() end -- return module: dlist diff --git a/xmake/core/base/json.lua b/xmake/core/base/json.lua new file mode 100644 index 000000000..26dbce173 --- /dev/null +++ b/xmake/core/base/json.lua @@ -0,0 +1,29 @@ +--!A cross-platform build utility based on Lua +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- +-- Copyright (C) 2015-2020, TBOOX Open Source Group. +-- +-- @author ruki +-- @file json.lua +-- + +-- define module: json +local json = json or {} + +-- hide some cjson members +json._VERSION = nil +json._NAME = nil + +-- return module: json +return json diff --git a/xmake/core/sandbox/modules/import/core/base/json.lua b/xmake/core/sandbox/modules/import/core/base/json.lua new file mode 100644 index 000000000..c8f428298 --- /dev/null +++ b/xmake/core/sandbox/modules/import/core/base/json.lua @@ -0,0 +1,24 @@ +--!A cross-platform build utility based on Lua +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- +-- Copyright (C) 2015-2020, TBOOX Open Source Group. +-- +-- @author ruki +-- @file json.lua +-- + +-- load modules +return require("base/json") + + diff --git a/xmake/core/ui/panel.lua b/xmake/core/ui/panel.lua index 7cff86eff..c876aa412 100644 --- a/xmake/core/ui/panel.lua +++ b/xmake/core/ui/panel.lua @@ -43,7 +43,7 @@ function panel:init(name, bounds) self:option_set("selectable", true) -- init child views - self._VIEWS = dlist:new() + self._VIEWS = dlist.new() -- init views cache self._VIEWS_CACHE = {} |
