Showing with 3,586 additions and 629 deletions.
  1. +61 −0 .github/workflows/test.yml
  2. +4 −0 .gitignore
  3. +63 −0 .travis.yml
  4. +2 −2 CMakeLists.txt
  5. +18 −17 Makefile
  6. +208 −0 README.md
  7. +2,370 −523 dtoa.c
  8. +5 −1 dtoa_config.h
  9. +9 −3 fpconv.c
  10. +11 −1 fpconv.h
  11. +7 −3 lua-cjson-2.1devel-1.rockspec → lua-cjson-2.1.0.11-1.rockspec
  12. +45 −4 lua/cjson/util.lua
  13. +215 −27 lua_cjson.c
  14. +27 −34 runtests.sh
  15. +1 −1 strbuf.c
  16. +11 −0 strbuf.h
  17. +72 −0 tests/TestLua.pm
  18. +334 −0 tests/agentzh.t
  19. +61 −0 tests/sort_json.lua
  20. +62 −13 tests/test.lua
@@ -0,0 +1,61 @@
name: test

on: [push, pull_request]

jobs:
test:
strategy:
fail-fast: false
matrix:
cc: ["gcc", "clang"]
luaVersion: ["5.1", "5.2", "5.3", "5.4", "luajit", "luajit-openresty"]
include:
- luaVersion: "luajit"
runtestArgs: "LUA_INCLUDE_DIR=.lua/include/luajit-2.1"
runtestEnv: "SKIP_CMAKE=1"
- luaVersion: "luajit-openresty"
runtestArgs: "LUA_INCLUDE_DIR=.lua/include/luajit-2.1"
runtestEnv: "SKIP_CMAKE=1"

runs-on: ubuntu-latest

steps:
- uses: actions/checkout@master

- uses: leafo/gh-actions-lua@master
env:
CC: ${{ matrix.cc }}
with:
luaVersion: ${{ matrix.luaVersion }}
luaCompileFlags: CC=${{ matrix.cc }}

- uses: leafo/gh-actions-luarocks@master

- name: runtests.sh
env:
CC: ${{ matrix.cc }}
run: |
LUA_DIR=.lua ${{ matrix.runtestEnv }} ./runtests.sh PREFIX=.lua ${{ matrix.runtestArgs }}
- name: setup prove
env:
CC: ${{ matrix.cc }}
run: |
make PREFIX=.lua ${{ matrix.runtestArgs }}
sudo apt-get update
sudo apt-get install -q valgrind libipc-run3-perl cppcheck cpanminus
sudo cpanm --notest Test::Base Test::LongString
- name: cppcheck
run: cppcheck -i .lua/ -i .install/ -i dtoa.c --force --error-exitcode=1 --enable=warning .

- name: prove
run: LUA_BIN=lua prove -Itests tests

- name: prove (valgrind)
run: LUA_BIN=lua TEST_LUA_USE_VALGRIND=1 prove -Itests tests

- name: build
run: |
luarocks make
@@ -5,3 +5,7 @@ notes
packages
tags
tests/utf8.dat
*~
*.swp
go
test_case.lua
@@ -0,0 +1,63 @@
sudo: required
dist: Focal

os: linux

language: c

compiler:
- gcc

addons:
apt:
packages:
- cppcheck
- valgrind
- cpanminus
- libipc-run3-perl
- lua5.1
- lua5.1-dev
- cmake

cache:
apt: true

env:
global:
- JOBS=3
- LUAROCKS_VER=2.4.2
matrix:
#- LUA=1 LUA_DIR=/usr LUA_INCLUDE_DIR=$LUA_DIR/include/lua5.1
- LUAJIT=1 LUA_DIR=/usr/local LUA_INCLUDE_DIR=$LUA_DIR/include/luajit-2.1 LUA_SUFFIX=--lua-suffix=jit

install:
- sudo ln -s /usr/bin/cmake /usr/local/bin/cmake
- if [ -n "$LUAJIT" ]; then git clone -b v2.1-agentzh https://github.com/openresty/luajit2.git; fi
- if [ -n "$LUAJIT" ]; then cd ./luajit2; fi
- if [ -n "$LUAJIT" ]; then make -j$JOBS CCDEBUG=-g Q= PREFIX=$LUAJIT_PREFIX CC=$CC XCFLAGS='-DLUA_USE_APICHECK -DLUA_USE_ASSERT' > build.log 2>&1 || (cat build.log && exit 1); fi
- if [ -n "$LUAJIT" ]; then sudo make install > build.log 2>&1 || (cat build.log && exit 1); fi
- if [ -n "$LUAJIT" ]; then cd ..; fi
- if [ -n "$LUAJIT" ]; then sudo ln -s $LUA_DIR/bin/luajit $LUA_DIR/bin/lua; fi
- sudo cpanm --notest Test::Base Test::LongString > build.log 2>&1 || (cat build.log && exit 1)
- wget https://luarocks.github.io/luarocks/releases/luarocks-$LUAROCKS_VER.tar.gz
- tar -zxf luarocks-$LUAROCKS_VER.tar.gz
- cd luarocks-$LUAROCKS_VER
- ./configure --with-lua=$LUA_DIR --with-lua-include=$LUA_INCLUDE_DIR $LUA_SUFFIX
- make build
- sudo make install
- cd ..

script:
- cppcheck -i ./luajit2 --force --error-exitcode=1 --enable=warning . > build.log 2>&1 || (cat build.log && exit 1)
- bash runtests.sh
- make
- prove -Itests tests
- TEST_LUA_USE_VALGRIND=1 prove -Itests tests > build.log 2>&1; export e=$?
- cat build.log
- grep -E '^==[0-9]+==' build.log; if [ "$?" == 0 ]; then exit 1; else exit $e; fi
- cmake -DUSE_INTERNAL_FPCONV=1 .
- make
- prove -Itests tests
- TEST_LUA_USE_VALGRIND=1 prove -Itests tests > build.log 2>&1; export e=$?
- cat build.log
- grep -E '^==[0-9]+==' build.log; if [ "$?" == 0 ]; then exit 1; else exit $e; fi
@@ -4,7 +4,7 @@
# Windows: set LUA_DIR=c:\lua51

project(lua-cjson C)
cmake_minimum_required(VERSION 2.6)
cmake_minimum_required(VERSION 2.8.12)

option(USE_INTERNAL_FPCONV "Use internal strtod() / g_fmt() code for performance")
option(MULTIPLE_THREADS "Support multi-threaded apps with internal fpconv - recommended" ON)
@@ -15,7 +15,7 @@ if(NOT CMAKE_BUILD_TYPE)
FORCE)
endif()

find_package(Lua51 REQUIRED)
find_package(Lua REQUIRED)
include_directories(${LUA_INCLUDE_DIR})

if(NOT USE_INTERNAL_FPCONV)
@@ -15,13 +15,13 @@ LUA_VERSION = 5.1
TARGET = cjson.so
PREFIX = /usr/local
#CFLAGS = -g -Wall -pedantic -fno-inline
CFLAGS = -O3 -Wall -pedantic -DNDEBUG
CFLAGS = -O3 -Wall -pedantic -DNDEBUG -g
CJSON_CFLAGS = -fpic
CJSON_LDFLAGS = -shared
LUA_INCLUDE_DIR = $(PREFIX)/include
LUA_CMODULE_DIR = $(PREFIX)/lib/lua/$(LUA_VERSION)
LUA_MODULE_DIR = $(PREFIX)/share/lua/$(LUA_VERSION)
LUA_BIN_DIR = $(PREFIX)/bin
LUA_INCLUDE_DIR ?= $(PREFIX)/include
LUA_CMODULE_DIR ?= $(PREFIX)/lib/lua/$(LUA_VERSION)
LUA_MODULE_DIR ?= $(PREFIX)/share/lua/$(LUA_VERSION)
LUA_BIN_DIR ?= $(PREFIX)/bin

##### Platform overrides #####
##
@@ -100,20 +100,21 @@ $(TARGET): $(OBJS)
$(CC) $(LDFLAGS) $(CJSON_LDFLAGS) -o $@ $(OBJS)

install: $(TARGET)
mkdir -p $(DESTDIR)/$(LUA_CMODULE_DIR)
cp $(TARGET) $(DESTDIR)/$(LUA_CMODULE_DIR)
chmod $(EXECPERM) $(DESTDIR)/$(LUA_CMODULE_DIR)/$(TARGET)
mkdir -p $(DESTDIR)$(LUA_CMODULE_DIR)
rm -f $(DESTDIR)$(LUA_CMODULE_DIR)/$(TARGET)
cp $(TARGET) $(DESTDIR)$(LUA_CMODULE_DIR)
chmod $(EXECPERM) $(DESTDIR)$(LUA_CMODULE_DIR)/$(TARGET)

install-extra:
mkdir -p $(DESTDIR)/$(LUA_MODULE_DIR)/cjson/tests \
$(DESTDIR)/$(LUA_BIN_DIR)
cp lua/cjson/util.lua $(DESTDIR)/$(LUA_MODULE_DIR)/cjson
chmod $(DATAPERM) $(DESTDIR)/$(LUA_MODULE_DIR)/cjson/util.lua
cp lua/lua2json.lua $(DESTDIR)/$(LUA_BIN_DIR)/lua2json$(LUA_BIN_SUFFIX)
chmod $(EXECPERM) $(DESTDIR)/$(LUA_BIN_DIR)/lua2json$(LUA_BIN_SUFFIX)
cp lua/json2lua.lua $(DESTDIR)/$(LUA_BIN_DIR)/json2lua$(LUA_BIN_SUFFIX)
chmod $(EXECPERM) $(DESTDIR)/$(LUA_BIN_DIR)/json2lua$(LUA_BIN_SUFFIX)
cd tests; cp $(TEST_FILES) $(DESTDIR)/$(LUA_MODULE_DIR)/cjson/tests
mkdir -p $(DESTDIR)$(LUA_MODULE_DIR)/cjson/tests \
$(DESTDIR)$(LUA_BIN_DIR)
cp lua/cjson/util.lua $(DESTDIR)$(LUA_MODULE_DIR)/cjson
chmod $(DATAPERM) $(DESTDIR)$(LUA_MODULE_DIR)/cjson/util.lua
cp lua/lua2json.lua $(DESTDIR)$(LUA_BIN_DIR)/lua2json$(LUA_BIN_SUFFIX)
chmod $(EXECPERM) $(DESTDIR)$(LUA_BIN_DIR)/lua2json$(LUA_BIN_SUFFIX)
cp lua/json2lua.lua $(DESTDIR)$(LUA_BIN_DIR)/json2lua$(LUA_BIN_SUFFIX)
chmod $(EXECPERM) $(DESTDIR)$(LUA_BIN_DIR)/json2lua$(LUA_BIN_SUFFIX)
cd tests; cp $(TEST_FILES) $(DESTDIR)$(LUA_MODULE_DIR)/cjson/tests
cd tests; chmod $(DATAPERM) $(TEST_FILES); chmod $(EXECPERM) *.lua *.pl

clean: