On Thu, Feb 06, 2020 at 07:24:18PM +0100, Klemens Nanni wrote:
> On Thu, Feb 06, 2020 at 07:18:48PM +0100, Klemens Nanni wrote:
> > sparc64 does not have luajit suppport which blocked my update to 5.0.3;
> > I #ifdef'd the bits in src/scripting.c but afaik there were issues with
> > dependent ports on such recent redis versions -- rspamd was probably one
> > of them.
> Found the diffs, but I have currently no way and/or time to test this.
>
> One disables luajit on sparc64, the other removes tests for it, but that
> (test) approach is obviously not suitable for all other arches that have
> luajit.
> $OpenBSD$
>
> luajit is not available on sparc64.
I don't understand. How does this work with the 4.0.14 port? The things
you ifdef out are already there.
>
> Index: src/scripting.c
> --- src/scripting.c.orig
> +++ src/scripting.c
> @@ -830,10 +830,12 @@ void luaLoadLib(lua_State *lua, const char *libname, l
> lua_call(lua, 1, 0);
> }
>
> +#ifdef LUAJIT_H
> LUALIB_API int (luaopen_cjson) (lua_State *L);
> LUALIB_API int (luaopen_struct) (lua_State *L);
> LUALIB_API int (luaopen_cmsgpack) (lua_State *L);
> LUALIB_API int (luaopen_bit) (lua_State *L);
> +#endif /* LUAJIT_H */
>
> void luaLoadLibraries(lua_State *lua) {
> luaLoadLib(lua, "", luaopen_base);
> @@ -841,10 +843,12 @@ void luaLoadLibraries(lua_State *lua) {
> luaLoadLib(lua, LUA_STRLIBNAME, luaopen_string);
> luaLoadLib(lua, LUA_MATHLIBNAME, luaopen_math);
> luaLoadLib(lua, LUA_DBLIBNAME, luaopen_debug);
> +#ifdef LUAJIT_H
> luaLoadLib(lua, "cjson", luaopen_cjson);
> luaLoadLib(lua, "struct", luaopen_struct);
> luaLoadLib(lua, "cmsgpack", luaopen_cmsgpack);
> luaLoadLib(lua, "bit", luaopen_bit);
> +#endif /* LUAJIT_H */
>
> #if 0 /* Stuff that we don't load currently, for sandboxing concerns. */
> luaLoadLib(lua, LUA_LOADLIBNAME, luaopen_package);
> $OpenBSD$
>
> Remove tests for luajit functions.
>
> Index: tests/unit/scripting.tcl
> --- tests/unit/scripting.tcl.orig
> +++ tests/unit/scripting.tcl
> @@ -187,75 +187,6 @@ start_server {tags {"scripting"}} {
> set e
> } {*against a key*}
>
> - test {EVAL - JSON numeric decoding} {
> - # We must return the table as a string because otherwise
> - # Redis converts floats to ints and we get 0 and 1023 instead
> - # of 0.0003 and 1023.2 as the parsed output.
> - r eval {return
> - table.concat(
> - cjson.decode(
> - "[0.0, -5e3, -1, 0.3e-3, 1023.2, 0e10]"), " ")
> - } 0
> - } {0 -5000 -1 0.0003 1023.2 0}
> -
> - test {EVAL - JSON string decoding} {
> - r eval {local decoded = cjson.decode('{"keya": "a", "keyb": "b"}')
> - return {decoded.keya, decoded.keyb}
> - } 0
> - } {a b}
> -
> - test {EVAL - cmsgpack can pack double?} {
> - r eval {local encoded = cmsgpack.pack(0.1)
> - local h = ""
> - for i = 1, #encoded do
> - h = h .. string.format("%02x",string.byte(encoded,i))
> - end
> - return h
> - } 0
> - } {cb3fb999999999999a}
> -
> - test {EVAL - cmsgpack can pack negative int64?} {
> - r eval {local encoded = cmsgpack.pack(-1099511627776)
> - local h = ""
> - for i = 1, #encoded do
> - h = h .. string.format("%02x",string.byte(encoded,i))
> - end
> - return h
> - } 0
> - } {d3ffffff0000000000}
> -
> - test {EVAL - cmsgpack can pack and unpack circular references?} {
> - r eval {local a = {x=nil,y=5}
> - local b = {x=a}
> - a['x'] = b
> - local encoded = cmsgpack.pack(a)
> - local h = ""
> - -- cmsgpack encodes to a depth of 16, but can't encode
> - -- references, so the encoded object has a deep copy recusive
> - -- depth of 16.
> - for i = 1, #encoded do
> - h = h .. string.format("%02x",string.byte(encoded,i))
> - end
> - -- when unpacked, re.x.x != re because the unpack creates
> - -- individual tables down to a depth of 16.
> - -- (that's why the encoded output is so large)
> - local re = cmsgpack.unpack(encoded)
> - assert(re)
> - assert(re.x)
> - assert(re.x.x.y == re.y)
> - assert(re.x.x.x.x.y == re.y)
> - assert(re.x.x.x.x.x.x.y == re.y)
> - assert(re.x.x.x.x.x.x.x.x.x.x.y == re.y)
> - -- maximum working depth:
> - assert(re.x.x.x.x.x.x.x.x.x.x.x.x.x.x.y == re.y)
> - -- now the last x would be b above and has no y
> - assert(re.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x)
> - -- so, the final x.x is at the depth limit and was assigned
> nil
> - assert(re.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x == nil)
> - return {h, re.x.x.x.x.x.x.x.x.y == re.y, re.y == 5}
> - } 0
> - }
> {82a17905a17881a17882a17905a17881a17882a17905a17881a17882a17905a17881a17882a17905a17881a17882a17905a17881a17882a17905a17881a17882a17905a17881a178c0
> 1 1}
> -
> test {EVAL - Numerical sanity check from bitop} {
> r eval {assert(0x7fffffff == 2147483647, "broken hex literals");
> assert(0xffffffff == -1 or 0xffffffff == 2^32-1,