lua-cjson: add build VARIANT for Lua5.3
authorJianhui Zhao <zhaojh329@gmail.com>
Sun, 12 Jan 2025 12:07:48 +0000 (20:07 +0800)
committerRosen Penev <rosenp@gmail.com>
Wed, 5 Feb 2025 04:25:53 +0000 (20:25 -0800)
Signed-off-by: Jianhui Zhao <zhaojh329@gmail.com>
lang/lua-cjson/Makefile
lang/lua-cjson/patches/001-add-support-lua5-3.patch [new file with mode: 0644]

index 9f76b8861459848c334839192bfffa448cb44bc4..1e13d7256f4f6b4f6c1915528439c8361bc4268f 100644 (file)
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=lua-cjson
 PKG_VERSION:=2.1.0
-PKG_RELEASE:=3
+PKG_RELEASE:=4
 PKG_MAINTAINER:=Dirk Chang <dirk@kooiot.com>
 PKG_LICENSE:=MIT
 PKG_LICENSE_FILES:=LICENSE
@@ -18,31 +18,52 @@ PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://kyne.au/~mark/software/download/
 PKG_HASH:=51bc69cd55931e0cba2ceae39e9efa2483f4292da3a88a1ed470eda829f6c778
 
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION)
+
 HOST_BUILD_DEPENDS:=lua/host
 
 include $(INCLUDE_DIR)/host-build.mk
 include $(INCLUDE_DIR)/package.mk
 include $(INCLUDE_DIR)/cmake.mk
 
-define Package/lua-cjson
+define Package/lua-cjson/default
   SUBMENU:=Lua
   SECTION:=lang
   CATEGORY:=Languages
   TITLE:=Lua CJSON parser
   URL:=https://github.com/mpx/lua-cjson
-  DEPENDS:= +lua
 endef
 
-define Package/lua-cjson/description
+define Package/lua-cjson
+  $(Package/lua-cjson/default)
+  DEPENDS+=+liblua
+  VARIANT:=lua-51
+endef
+
+define Package/lua-cjson-lua5.3
+  $(Package/lua-cjson/default)
+  DEPENDS+=+liblua5.3
+  VARIANT:=lua-53
+endef
+
+define Package/lua-cjson/default/description
   Lua CJSON is a fast JSON encoding/parsing module for Lua.
 endef
 
+define Package/lua-cjson-5.3/description
+  Lua5.3 CJSON is a fast JSON encoding/parsing module for Lua.
+endef
+
 CMAKE_OPTIONS += \
        -DUSE_LUA=ON
 
 CMAKE_HOST_OPTIONS += \
        -DLUA_MATH_LIBRARY=m
 
+ifeq ($(BUILD_VARIANT),lua-53)
+  CMAKE_OPTIONS += -DUSE_LUA53=ON
+endif
+
 define Package/lua-cjson/install
        $(INSTALL_DIR) $(1)/usr/lib/lua
        $(INSTALL_BIN) $(PKG_BUILD_DIR)/cjson.so $(1)/usr/lib/lua/
@@ -51,5 +72,11 @@ define Package/lua-cjson/install
        $(INSTALL_DATA) $(PKG_BUILD_DIR)/lua/cjson/util.lua $(1)/usr/lib/lua/cjson
 endef
 
+define Package/lua-cjson-lua5.3/install
+       $(INSTALL_DIR) $(1)/usr/local/lib/lua/5.3
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/cjson.so $(1)/usr/local/lib/lua/5.3
+endef
+
 $(eval $(call HostBuild))
 $(eval $(call BuildPackage,lua-cjson))
+$(eval $(call BuildPackage,lua-cjson-lua5.3))
diff --git a/lang/lua-cjson/patches/001-add-support-lua5-3.patch b/lang/lua-cjson/patches/001-add-support-lua5-3.patch
new file mode 100644 (file)
index 0000000..0fe824e
--- /dev/null
@@ -0,0 +1,65 @@
+--- a/lua_cjson.c
++++ b/lua_cjson.c
+@@ -1227,7 +1227,10 @@ static void json_process_value(lua_State
+         lua_pushlstring(l, token->value.string, token->string_len);
+         break;;
+     case T_NUMBER:
+-        lua_pushnumber(l, token->value.number);
++        if ((lua_Integer)token->value.number == token->value.number)
++            lua_pushinteger(l, (lua_Integer)token->value.number);
++        else
++            lua_pushnumber(l, token->value.number);
+         break;;
+     case T_BOOLEAN:
+         lua_pushboolean(l, token->value.boolean);
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -15,8 +15,19 @@ if(NOT CMAKE_BUILD_TYPE)
+         FORCE)
+ endif()
+-find_package(Lua51 REQUIRED)
+-include_directories(${LUA_INCLUDE_DIR})
++if(USE_LUA53)
++    find_path(LUA53_INCLUDE_DIRS lua.h PATH_SUFFIXES lua5.3)
++    find_library(LUA53_LIBRARIES lua5.3)
++
++    if (NOT LUA53_INCLUDE_DIRS OR NOT LUA53_LIBRARIES)
++        message(FATAL_ERROR "Liblua 5.3 is required.")
++    endif()
++
++    include_directories(${LUA53_INCLUDE_DIRS})
++else()
++    find_package(Lua51 REQUIRED)
++    include_directories(${LUA_INCLUDE_DIR})
++endif()
+ if(NOT USE_INTERNAL_FPCONV)
+     # Use libc number conversion routines (strtod(), sprintf())
+@@ -51,7 +62,12 @@ if(NOT HAVE_ISINF)
+ endif()
+ set(_MODULE_LINK "${CMAKE_THREAD_LIBS_INIT}")
+-get_filename_component(_lua_lib_dir ${LUA_LIBRARY} PATH)
++
++if(USE_LUA53)
++    get_filename_component(_lua_lib_dir ${LUA53_LIBRARIES} PATH)
++else()
++    get_filename_component(_lua_lib_dir ${LUA_LIBRARY} PATH)
++endif()
+ if(APPLE)
+     set(CMAKE_SHARED_MODULE_CREATE_C_FLAGS
+@@ -65,7 +81,11 @@ if(WIN32)
+     # Windows sprintf()/strtod() handle NaN/inf differently. Not supported.
+     add_definitions(-DDISABLE_INVALID_NUMBERS)
+ else()
+-    set(_lua_module_dir "${_lua_lib_dir}/lua/5.1")
++    if(USE_LUA53)
++        set(_lua_module_dir "${_lua_lib_dir}/lua/5.3")
++    else()
++        set(_lua_module_dir "${_lua_lib_dir}/lua/5.1")
++    endif()
+ endif()
+ add_library(cjson MODULE lua_cjson.c strbuf.c ${FPCONV_SOURCES})