[Tarantool-patches] [PATCH luajit 1/3] test: add PUC-Rio Lua 5.1 test suite

Sergey Kaplun skaplun at tarantool.org
Fri Mar 19 14:26:37 MSK 2021


Igor,

Thanks for the review!

On 17.03.21, Igor Munkin wrote:
> Sergey,
> 
> Thanks for the patch!
> 
> On 12.03.21, Sergey Kaplun wrote:
> > This patch adds PUC-Rio Lua 5.1 test suite as a part of the LuaJIT
> > test suite. Source code taken verbatim from
> 
> Unfortunately, this is not true. Consider the following:
> | $ md5sum lua5.1-tests.tar.gz
> | b376d315ada7bd9d379ec820d6cc27ed  lua5.1-tests.tar.gz
> | <...>
> | $ pwd
> | /lua5.1-tests
> | $ find . -type f | sort | xargs md5sum > ~/vanilla
> | <...>
> | $ pwd
> | /tarantool-luajit/test/PUC-Lua-5.1-tests
> | $ git remote -v
> | origin  git at github.com:tarantool/luajit (fetch)
> | origin  git at github.com:tarantool/luajit (push)
> | $ git lo -1
> | 19e526e (HEAD) test: add PUC-Rio Lua 5.1 test suite
> | $ find . -type f | sort | xargs md5sum > ~/tarantool
> | $ diff ~/vanilla ~/tarantool
> | 2,3c2,3
> | < 70085c31a4cd70096dea1636e8fb3d9d  ./api.lua
> | < b863b536cfb6114ec70d846c2f2c1a5f  ./attrib.lua
> | ---
> | > 9e9888c13bce8de45b470370cb6f5d11  ./api.lua
> | > f2e3148cbdacf6bd8a06c1744dea3a16  ./attrib.lua
> | 7,12c7,13
> | < 428b214012380dbb8922b70f8e3a174f  ./closure.lua
> | < 580aeb1bf3efd526c8b62efcbb7b7ff2  ./code.lua
> | < f11d5bc5a7809d5d34a4fe0b0a86905b  ./constructs.lua
> | < 29c56553a51f06ec14ebd45ea2789eaa  ./db.lua
> | < 62ef206224896aac4e5998f78305083a  ./errors.lua
> | < 2b2a4688858d7b01ead2d94217705c4f  ./etc/ltests.c
> | ---
> | > 2fe3dc8ae11397c08c8343cad6f251ab  ./closure.lua
> | > cbeb7f7013161dd2d558a7b1adc77327  ./CMakeLists.txt
> | > d72539840341a07aae459cac9991e41f  ./code.lua
> | > 0f0bdf9e2e0cf758e0e76600f7afc700  ./constructs.lua
> | > 596f4340c66fd9f0ff6ecacef955ade0  ./db.lua
> | > a2b968868f2d4b7165f561076639c98b  ./errors.lua
> | > 2b901df9ba9024f0279a7bbfeaf47f1f  ./etc/ltests.c
> | 15c16
> | < fae357bb29cc0ea5ec380a2678674330  ./files.lua
> | ---
> | > 77d39dbfac5abc7a9dcd8e9595ccf517  ./files.lua
> | 18c19
> | < b0536a009fd46b3c54759ce447883cd8  ./libs/lib1.c
> | ---
> | > 1efd07d7bd4efe1b334cc3e11ce83115  ./libs/lib1.c
> | 20,21c21
> | < e27b1cfafb3a4f60cee764beaa761059  ./libs/lib2.c
> | < aa964093a6483e66e434a5ae22816a24  ./libs/makefile
> | ---
> | > b2ac9185c54826707cce0ab1bbfb1289  ./libs/lib2.c
> | 23,24c23,24
> | < e3c8a3668564606e8387ce695229c24f  ./locals.lua
> | < a83fe79ec8c8c21dac7ee4f882344178  ./main.lua
> | ---
> | > e3fdc6da784973cf96d19861f79908b3  ./locals.lua
> | > f99dc272fedc3e9bf21344f06e6fa6b7  ./main.lua
> | 26c26
> | < 41119d8062a9f66b89c30b4ff87a7a1f  ./nextvar.lua
> | ---
> | > 52e9e6bbac229d72a46672aff5e84874  ./nextvar.lua
> 
> Well, as you mentioned in the cover letter, you removed the trailing
> whitespace. Just for the history, I collected everything to the list:
> * api.lua: 1 occurrence
> * attrib.lua: 1 occurrence
> * closure.lua: 1 occurrence
> * code.lua: 1 occurrence
> * constructs.lua: 2 occurrences
> * db.lua: 4 occurrences
> * errors.lua: 2 occurrences
> * etc/ltests.c: 3 occurrences
> * files.lua: 3 occurrences
> * lib/lib1.c: 2 occurrences + luaL_reg fix
> * lib/lib2.c: luaL_reg fix
> * locals.lua: 2 occurrences
> * main.lua: 5 occurrences
> * nextvar.lua: 2 occurrences
> 
> IMHO, this is so neglible, that we can move suite intact, but if it
> makes you happier, I believe we can relax the adopting rule for the case
> with such tiny whitespace changes. At the same time there are also a
> couple of *functional* changes: you adjusted auxiliary C sources
> regarding LuaJIT specifics. This violates the rule we discussed so much.
> 
> As you mentioned below, tests still fail after this commit, so please
> move all functional changes to a separate patch.

Yep, moved to the separate patch.

> 
> > https://www.lua.org/tests/lua5.1-tests.tar.gz.
> > 
> > <lib1.c> and <lib2.c> is slightly modified to be consistent with the
> > current LuaJIT's LuaC API.
> > 
> > Some tests may fail after this commit. They will be disabled
> > or adapted in the next patches.
> > 
> > Part of tarantool/tarantool#5845
> > Part of tarantool/tarantool#4473
> > ---
> >  .luacheckrc                           |    5 +-
> >  test/CMakeLists.txt                   |    4 +-
> >  test/PUC-Lua-5.1-tests/CMakeLists.txt |   89 ++
> >  test/PUC-Lua-5.1-tests/README         |   41 +
> >  test/PUC-Lua-5.1-tests/all.lua        |  137 +++
> >  test/PUC-Lua-5.1-tests/api.lua        |  711 +++++++++++++++
> >  test/PUC-Lua-5.1-tests/attrib.lua     |  339 ++++++++
> >  test/PUC-Lua-5.1-tests/big.lua        |  381 ++++++++
> >  test/PUC-Lua-5.1-tests/calls.lua      |  294 +++++++
> >  test/PUC-Lua-5.1-tests/checktable.lua |   77 ++
> >  test/PUC-Lua-5.1-tests/closure.lua    |  422 +++++++++
> >  test/PUC-Lua-5.1-tests/code.lua       |  143 +++
> >  test/PUC-Lua-5.1-tests/constructs.lua |  240 ++++++
> >  test/PUC-Lua-5.1-tests/db.lua         |  499 +++++++++++
> >  test/PUC-Lua-5.1-tests/errors.lua     |  250 ++++++
> >  test/PUC-Lua-5.1-tests/etc/ltests.c   | 1147 +++++++++++++++++++++++++
> >  test/PUC-Lua-5.1-tests/etc/ltests.h   |   92 ++
> >  test/PUC-Lua-5.1-tests/events.lua     |  360 ++++++++
> >  test/PUC-Lua-5.1-tests/files.lua      |  324 +++++++
> >  test/PUC-Lua-5.1-tests/gc.lua         |  312 +++++++
> >  test/PUC-Lua-5.1-tests/libs/lib1.c    |   40 +
> >  test/PUC-Lua-5.1-tests/libs/lib11.c   |   18 +
> >  test/PUC-Lua-5.1-tests/libs/lib2.c    |   28 +
> >  test/PUC-Lua-5.1-tests/libs/lib21.c   |   18 +
> >  test/PUC-Lua-5.1-tests/literals.lua   |  176 ++++
> >  test/PUC-Lua-5.1-tests/locals.lua     |  127 +++
> >  test/PUC-Lua-5.1-tests/main.lua       |  159 ++++
> >  test/PUC-Lua-5.1-tests/math.lua       |  208 +++++
> >  test/PUC-Lua-5.1-tests/nextvar.lua    |  396 +++++++++
> >  test/PUC-Lua-5.1-tests/pm.lua         |  273 ++++++
> >  test/PUC-Lua-5.1-tests/sort.lua       |   74 ++
> >  test/PUC-Lua-5.1-tests/strings.lua    |  176 ++++
> >  test/PUC-Lua-5.1-tests/vararg.lua     |  126 +++
> >  test/PUC-Lua-5.1-tests/verybig.lua    |  100 +++
> >  34 files changed, 7783 insertions(+), 3 deletions(-)
> >  create mode 100644 test/PUC-Lua-5.1-tests/CMakeLists.txt
> >  create mode 100644 test/PUC-Lua-5.1-tests/README
> >  create mode 100755 test/PUC-Lua-5.1-tests/all.lua
> >  create mode 100644 test/PUC-Lua-5.1-tests/api.lua
> >  create mode 100644 test/PUC-Lua-5.1-tests/attrib.lua
> >  create mode 100644 test/PUC-Lua-5.1-tests/big.lua
> >  create mode 100644 test/PUC-Lua-5.1-tests/calls.lua
> >  create mode 100644 test/PUC-Lua-5.1-tests/checktable.lua
> >  create mode 100644 test/PUC-Lua-5.1-tests/closure.lua
> >  create mode 100644 test/PUC-Lua-5.1-tests/code.lua
> >  create mode 100644 test/PUC-Lua-5.1-tests/constructs.lua
> >  create mode 100644 test/PUC-Lua-5.1-tests/db.lua
> >  create mode 100644 test/PUC-Lua-5.1-tests/errors.lua
> >  create mode 100644 test/PUC-Lua-5.1-tests/etc/ltests.c
> >  create mode 100644 test/PUC-Lua-5.1-tests/etc/ltests.h
> >  create mode 100644 test/PUC-Lua-5.1-tests/events.lua
> >  create mode 100644 test/PUC-Lua-5.1-tests/files.lua
> >  create mode 100644 test/PUC-Lua-5.1-tests/gc.lua
> >  create mode 100644 test/PUC-Lua-5.1-tests/libs/lib1.c
> >  create mode 100644 test/PUC-Lua-5.1-tests/libs/lib11.c
> >  create mode 100644 test/PUC-Lua-5.1-tests/libs/lib2.c
> >  create mode 100644 test/PUC-Lua-5.1-tests/libs/lib21.c
> >  create mode 100644 test/PUC-Lua-5.1-tests/literals.lua
> >  create mode 100644 test/PUC-Lua-5.1-tests/locals.lua
> >  create mode 100644 test/PUC-Lua-5.1-tests/main.lua
> >  create mode 100644 test/PUC-Lua-5.1-tests/math.lua
> >  create mode 100644 test/PUC-Lua-5.1-tests/nextvar.lua
> >  create mode 100644 test/PUC-Lua-5.1-tests/pm.lua
> >  create mode 100644 test/PUC-Lua-5.1-tests/sort.lua
> >  create mode 100644 test/PUC-Lua-5.1-tests/strings.lua
> >  create mode 100644 test/PUC-Lua-5.1-tests/vararg.lua
> >  create mode 100644 test/PUC-Lua-5.1-tests/verybig.lua
> > 
> 
> <snipped>
> 
> > diff --git a/test/PUC-Lua-5.1-tests/CMakeLists.txt b/test/PUC-Lua-5.1-tests/CMakeLists.txt
> > new file mode 100644
> > index 0000000..08bee36
> > --- /dev/null
> > +++ b/test/PUC-Lua-5.1-tests/CMakeLists.txt
> > @@ -0,0 +1,89 @@
> > +# Test suite that has been added from PUC-Rio Lua 5.1 test archive
> > +# in scope of https://github.com/tarantool/tarantool/issues/4473.
> > +
> > +# See the rationale in the root CMakeLists.txt.
> > +cmake_minimum_required(VERSION 3.1 FATAL_ERROR)
> > +
> > +set(TEST_RUNNER  ${CMAKE_CURRENT_SOURCE_DIR}/all.lua)
> 
> I guess this variable is excess: there is no special variable for runner
> in LuaJIT-tests/CMakeLists.txt, so let's also follow this practice here.
> 
> Moreover, the following part (from here to the line of dashes) should be
> moved to a new CMakeLists.txt in libs subdirectory.

Fixed, thanks.

> 
> > +set(LIB_SOURCES  ${CMAKE_CURRENT_SOURCE_DIR}/libs)
> > +set(TESTLIB_PATH ${CMAKE_CURRENT_BINARY_DIR}/libs)
> 
> After moving this part into a separate CMakeLists.txt this variables
> become excess.

Yep, done.

> 
> > +
> > +# XXX: -fPIC is required to linking with static library.
> > +if(NOT BUILDMODE STREQUAL "static")
> 
> What does block you from building the libs against the static build? I
> don't get the reason and it looks like everything works fine (at least
> on my working station).

Yes, if we don't need linking with library instead dynamic lookup.
Fixed.

> 
> > +  # Build additional C libraries for tests.
> > +  macro(build_lib lib sources)
> 
> Consider CMake macro naming convention in LuaJIT.

Yep, done.

> 
> > +    add_library(${lib} SHARED EXCLUDE_FROM_ALL ${sources})
> > +    target_include_directories(${lib} PRIVATE
> > +      ${LUAJIT_SOURCE_DIR}
> > +    )
> > +    set_target_properties(${lib} PROPERTIES
> > +      LIBRARY_OUTPUT_DIRECTORY "${TESTLIB_PATH}"
> > +      PREFIX ""
> > +    )
> > +    if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
> > +      set_target_properties(${lib} PROPERTIES
> > +        LINK_FLAGS "-undefined dynamic_lookup"
> > +      )
> > +    endif()
> > +    target_link_libraries(${lib} PRIVATE libluajit_shared)
> 
> This looks to be excess, doesn't it?

Yes, static check gone too.

> 
> > +    list(APPEND TESTLIBS ${lib})
> > +  endmacro()
> > +
> > +  build_lib(lib1  ${LIB_SOURCES}/lib1.c)
> > +  build_lib(lib11 ${LIB_SOURCES}/lib1.c ${LIB_SOURCES}/lib11.c)
> > +  build_lib(lib2  ${LIB_SOURCES}/lib2.c)
> > +  build_lib(lib21 ${LIB_SOURCES}/lib2.c ${LIB_SOURCES}/lib21.c)
> > +
> > +  set(LIB2COPY "${TESTLIB_PATH}/lib2${CMAKE_SHARED_LIBRARY_SUFFIX}")
> > +  set(LIB_COPY "${TESTLIB_PATH}/-lib2${CMAKE_SHARED_LIBRARY_SUFFIX}")
> > +
> > +  add_custom_command(
> > +    COMMENT "Copping lib2 to -lib2 for PUC-Rio Lua 5.1 tests"
> > +    OUTPUT  ${LIB_COPY}
> > +    DEPENDS ${TESTLIBS}
> > +    COMMAND ${CMAKE_COMMAND} -E copy ${LIB2COPY} ${LIB_COPY}
> > +    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
> > +  )
> > +  list(APPEND TESTLIBS ${LIB_COPY})
> > +endif()
> > +
> > +set(CUSTOM_TEST_DIR ${TESTLIB_PATH}/P1)
> > +add_custom_command(
> > +  COMMENT "Create directory for PUC-Rio Lua 5.1 tests"
> > +  OUTPUT  ${CUSTOM_TEST_DIR}
> > +  COMMAND ${CMAKE_COMMAND} -E make_directory ${CUSTOM_TEST_DIR}
> > +  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
> > +)
> 
> --------------------------------------------------------------------------------
> 
> > +
> > +set(LUA_PATH "?\;${CMAKE_CURRENT_SOURCE_DIR}/?.lua")
> 
> It's worth to mention right here, why did you choose this way instead of
> the "better yet" (and the LUA_INIT problem). I see you referred to the
> well-known issue below, but IMHO it's better to group the rationale
> right here.

OK, fixed.

> 
> > +
> > +# TODO: PUC-Rio Lua 5.1 test suite also has special header
> > +# <ltests.h> and <ltests.c> translation unit to check some
> > +# internal behaviour of the Lua implementation (see etc/
> > +# directory). It modifies realloc function to check memory
> > +# consistency and also contains tests for yield in hooks
> > +# and for the Lua C API.
> > +# But, unfortunately, <ltests.c> depends on specific PUC-Rio Lua 5.1
> > +# internal headers and should be adopted for LuaJIT.
> 
> Typo: s/adopted/adapted/ or simply use "adjusted" here.

Fixed.

> 
> > +
> > +add_custom_target(PUC-Lua-5.1-tests
> > +  DEPENDS ${LUAJIT_TEST_BINARY} ${TESTLIBS} ${CUSTOM_TEST_DIR}
> > +)
> > +
> > +add_custom_command(TARGET PUC-Lua-5.1-tests
> > +  COMMENT "Running PUC-Rio Lua 5.1 tests"
> > +  COMMAND
> > +  env
> > +    # Tarantool doesn't support LUA_INIT and most likely it
> > +    # never will.
> > +    # See https://github.com/tarantool/tarantool/issues/5744
> > +    # for more info.
> > +    # LUA_PATH="${CMAKE_CURRENT_BINARY_DIR}/?.lua\;\;"
> > +    # LUA_INIT="package.path='?\;'..package.path"
> > +    # So use less preferable way for tests.
> > +    LUA_PATH="${LUA_PATH}\;\;"
> > +    ${LUAJIT_TEST_COMMAND} ${TEST_RUNNER}
> > +  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
> > +)
> > +
> 
> Consider the fixup patch on my branch[1] and below. I don't run CI for
> this revision, since the queue is overloaded. I'll push the bump in
> Tarantool repo a bit later.

Thanks for the fixup-patch. I've applied it with some modifications:
* drop LUA_CPATH variable as far as it is redundant
* split changes into two separate patches
* add stripping of "-Wl,--no-undefined" linker option (see rationale
  below in the patch
* add comments

Side note: I've fixed missed dot at the end of sentence in a comment, so
the gihtub-ci checked a little bit different commits hashes :).

There is the iterative patch for the first commit:

===================================================================
diff --git a/test/PUC-Lua-5.1-tests/CMakeLists.txt b/test/PUC-Lua-5.1-tests/CMakeLists.txt
index 08bee36..066f668 100644
--- a/test/PUC-Lua-5.1-tests/CMakeLists.txt
+++ b/test/PUC-Lua-5.1-tests/CMakeLists.txt
@@ -1,88 +1,44 @@
 # Test suite that has been added from PUC-Rio Lua 5.1 test archive
-# in scope of https://github.com/tarantool/tarantool/issues/4473.
+# in scope of https://github.com/tarantool/tarantool/issues/5845.
 
 # See the rationale in the root CMakeLists.txt.
 cmake_minimum_required(VERSION 3.1 FATAL_ERROR)
 
-set(TEST_RUNNER  ${CMAKE_CURRENT_SOURCE_DIR}/all.lua)
-set(LIB_SOURCES  ${CMAKE_CURRENT_SOURCE_DIR}/libs)
-set(TESTLIB_PATH ${CMAKE_CURRENT_BINARY_DIR}/libs)
-
-# XXX: -fPIC is required to linking with static library.
-if(NOT BUILDMODE STREQUAL "static")
-  # Build additional C libraries for tests.
-  macro(build_lib lib sources)
-    add_library(${lib} SHARED EXCLUDE_FROM_ALL ${sources})
-    target_include_directories(${lib} PRIVATE
-      ${LUAJIT_SOURCE_DIR}
-    )
-    set_target_properties(${lib} PROPERTIES
-      LIBRARY_OUTPUT_DIRECTORY "${TESTLIB_PATH}"
-      PREFIX ""
-    )
-    if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
-      set_target_properties(${lib} PROPERTIES
-        LINK_FLAGS "-undefined dynamic_lookup"
-      )
-    endif()
-    target_link_libraries(${lib} PRIVATE libluajit_shared)
-    list(APPEND TESTLIBS ${lib})
-  endmacro()
-
-  build_lib(lib1  ${LIB_SOURCES}/lib1.c)
-  build_lib(lib11 ${LIB_SOURCES}/lib1.c ${LIB_SOURCES}/lib11.c)
-  build_lib(lib2  ${LIB_SOURCES}/lib2.c)
-  build_lib(lib21 ${LIB_SOURCES}/lib2.c ${LIB_SOURCES}/lib21.c)
-
-  set(LIB2COPY "${TESTLIB_PATH}/lib2${CMAKE_SHARED_LIBRARY_SUFFIX}")
-  set(LIB_COPY "${TESTLIB_PATH}/-lib2${CMAKE_SHARED_LIBRARY_SUFFIX}")
-
-  add_custom_command(
-    COMMENT "Copping lib2 to -lib2 for PUC-Rio Lua 5.1 tests"
-    OUTPUT  ${LIB_COPY}
-    DEPENDS ${TESTLIBS}
-    COMMAND ${CMAKE_COMMAND} -E copy ${LIB2COPY} ${LIB_COPY}
-    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
-  )
-  list(APPEND TESTLIBS ${LIB_COPY})
-endif()
-
-set(CUSTOM_TEST_DIR ${TESTLIB_PATH}/P1)
-add_custom_command(
-  COMMENT "Create directory for PUC-Rio Lua 5.1 tests"
-  OUTPUT  ${CUSTOM_TEST_DIR}
-  COMMAND ${CMAKE_COMMAND} -E make_directory ${CUSTOM_TEST_DIR}
-  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
-)
-
+# XXX: There are two ways to set up the proper environment
+# described in the suite's README:
+# * set LUA_PATH to "?;./?.lua"
+# * or, better yet, set LUA_PATH to "./?.lua;;" and LUA_INIT to
+#   "package.path = '?;'..package.path"
+# Unfortunately, Tarantool doesn't support LUA_INIT and most
+# likely it never will. For more info, see
+# https://github.com/tarantool/tarantool/issues/5744.
+# Hence, there is no way other than set LUA_PATH environment
+# variable as proposed in the first case.
 set(LUA_PATH "?\;${CMAKE_CURRENT_SOURCE_DIR}/?.lua")
 
+# Set PUC-Lua-5.1-tests-prepare target that creates <libs/P1>
+# subdirectory.
+add_subdirectory(libs)
+
 # TODO: PUC-Rio Lua 5.1 test suite also has special header
 # <ltests.h> and <ltests.c> translation unit to check some
 # internal behaviour of the Lua implementation (see etc/
 # directory). It modifies realloc function to check memory
 # consistency and also contains tests for yield in hooks
 # and for the Lua C API.
-# But, unfortunately, <ltests.c> depends on specific PUC-Rio Lua 5.1
-# internal headers and should be adopted for LuaJIT.
+# But, unfortunately, <ltests.c> depends on specific PUC-Rio
+# Lua 5.1 internal headers and should be adapted for LuaJIT.
 
 add_custom_target(PUC-Lua-5.1-tests
-  DEPENDS ${LUAJIT_TEST_BINARY} ${TESTLIBS} ${CUSTOM_TEST_DIR}
+  DEPENDS ${LUAJIT_TEST_BINARY} PUC-Lua-5.1-tests-prepare
 )
 
 add_custom_command(TARGET PUC-Lua-5.1-tests
   COMMENT "Running PUC-Rio Lua 5.1 tests"
   COMMAND
   env
-    # Tarantool doesn't support LUA_INIT and most likely it
-    # never will.
-    # See https://github.com/tarantool/tarantool/issues/5744
-    # for more info.
-    # LUA_PATH="${CMAKE_CURRENT_BINARY_DIR}/?.lua\;\;"
-    # LUA_INIT="package.path='?\;'..package.path"
-    # So use less preferable way for tests.
     LUA_PATH="${LUA_PATH}\;\;"
-    ${LUAJIT_TEST_COMMAND} ${TEST_RUNNER}
+    ${LUAJIT_TEST_COMMAND} ${CMAKE_CURRENT_SOURCE_DIR}/all.lua
   WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
 )
 
diff --git a/test/PUC-Lua-5.1-tests/libs/CMakeLists.txt b/test/PUC-Lua-5.1-tests/libs/CMakeLists.txt
new file mode 100644
index 0000000..f24e7f3
--- /dev/null
+++ b/test/PUC-Lua-5.1-tests/libs/CMakeLists.txt
@@ -0,0 +1,18 @@
+# Test suite that has been added from PUC-Rio Lua 5.1 test archive
+# in scope of https://github.com/tarantool/tarantool/issues/5845.
+
+# See the rationale in the root CMakeLists.txt.
+cmake_minimum_required(VERSION 3.1 FATAL_ERROR)
+
+# The original tarball contains subdirectory "libs" with an empty
+# subdirectory "libs/P1", to be used by tests.
+# Instead of tracking empty directory with some anchor-file for
+# git, create this directory via CMake.
+add_custom_target(PUC-Lua-5.1-tests-prepare)
+add_custom_command(TARGET PUC-Lua-5.1-tests-prepare
+  COMMENT "Create directory for PUC-Rio Lua 5.1 tests"
+  COMMAND ${CMAKE_COMMAND} -E make_directory P1
+  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+)
+
+# vim: expandtab tabstop=2 shiftwidth=2
diff --git a/test/PUC-Lua-5.1-tests/libs/lib1.c b/test/PUC-Lua-5.1-tests/libs/lib1.c
index 22fe6de..812bb9a 100644
--- a/test/PUC-Lua-5.1-tests/libs/lib1.c
+++ b/test/PUC-Lua-5.1-tests/libs/lib1.c
@@ -14,7 +14,7 @@ static int id (lua_State *L) {
 }
 
 
-static const struct luaL_Reg funcs[] = {
+static const struct luaL_reg funcs[] = {
   {"id", id},
   {NULL, NULL}
 };
diff --git a/test/PUC-Lua-5.1-tests/libs/lib2.c b/test/PUC-Lua-5.1-tests/libs/lib2.c
index 876a212..9972cbe 100644
--- a/test/PUC-Lua-5.1-tests/libs/lib2.c
+++ b/test/PUC-Lua-5.1-tests/libs/lib2.c
@@ -12,7 +12,7 @@ static int id (lua_State *L) {
 }
 
 
-static const struct luaL_Reg funcs[] = {
+static const struct luaL_reg funcs[] = {
   {"id", id},
   {NULL, NULL}
 };
===================================================================

And here is the second patch to add lib\d+ compilation and tests.

===================================================================
commit 54f575819a7790abc932b992e2ff13c3e6177d81
Author: Sergey Kaplun <skaplun at tarantool.org>
Date:   Wed Mar 17 19:28:47 2021 +0300

    test: add compiling for C libs from PUC-Rio-Lua5.1

    This patch adds commands to create additional LuaC libraries for tests
    in <attrib.lua>. Also, it renames `luaL_reg` to `luaL_Reg` in <lib1.c>
    and <lib2.c> to be consistent with the current LuaJIT's LuaC API.

    Part of tarantool/tarantool#5845
    Part of tarantool/tarantool#4473

diff --git a/test/PUC-Lua-5.1-tests/CMakeLists.txt b/test/PUC-Lua-5.1-tests/CMakeLists.txt
index 066f668..2015936 100644
--- a/test/PUC-Lua-5.1-tests/CMakeLists.txt
+++ b/test/PUC-Lua-5.1-tests/CMakeLists.txt
@@ -16,7 +16,8 @@ cmake_minimum_required(VERSION 3.1 FATAL_ERROR)
 # variable as proposed in the first case.
 set(LUA_PATH "?\;${CMAKE_CURRENT_SOURCE_DIR}/?.lua")
 
-# Set PUC-Lua-5.1-tests-prepare target that creates <libs/P1>
+# Set PUC-Lua-5.1-tests-prepare target that contains rules
+# for <libs/*> libraries compilation and creates <libs/P1>
 # subdirectory.
 add_subdirectory(libs)
 
diff --git a/test/PUC-Lua-5.1-tests/libs/CMakeLists.txt b/test/PUC-Lua-5.1-tests/libs/CMakeLists.txt
index f24e7f3..aa64a44 100644
--- a/test/PUC-Lua-5.1-tests/libs/CMakeLists.txt
+++ b/test/PUC-Lua-5.1-tests/libs/CMakeLists.txt
@@ -4,11 +4,57 @@
 # See the rationale in the root CMakeLists.txt.
 cmake_minimum_required(VERSION 3.1 FATAL_ERROR)
 
+# Build additional C libraries for tests.
+macro(BuildTestCLib lib sources)
+  add_library(${lib} SHARED EXCLUDE_FROM_ALL ${sources})
+  target_include_directories(${lib} PRIVATE
+    ${LUAJIT_SOURCE_DIR}
+  )
+  set_target_properties(${lib} PROPERTIES
+    LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
+    PREFIX ""
+  )
+  # XXX: The dynamic libraries are loaded with LuaJIT binary and
+  # use symbols from it. So it is totally OK to have unresolved
+  # symbols at build time.
+  if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
+    set_target_properties(${lib} PROPERTIES
+      LINK_FLAGS "-undefined dynamic_lookup"
+    )
+  elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
+    # XXX: This is necessary mostly for openSUSE builds, see also
+    # https://bugzilla.suse.com/show_bug.cgi?id=1012388.
+    # Just strip out the linker flag to suppress this linker
+    # option.
+    string(REPLACE "-Wl,--no-undefined" ""
+      CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}"
+    )
+  endif()
+  list(APPEND TESTLIBS ${lib})
+endmacro()
+
+BuildTestCLib(lib1  lib1.c)
+BuildTestCLib(lib11 lib1.c lib11.c)
+BuildTestCLib(lib2  lib2.c)
+BuildTestCLib(lib21 lib2.c lib21.c)
+
+# Create exact copy of the lib2 library for tests in attrib.lua.
+set(LIB2ORIG "${CMAKE_CURRENT_BINARY_DIR}/lib2${CMAKE_SHARED_LIBRARY_SUFFIX}")
+set(LIB2COPY "${CMAKE_CURRENT_BINARY_DIR}/-lib2${CMAKE_SHARED_LIBRARY_SUFFIX}")
+add_custom_command(
+  OUTPUT ${LIB2COPY}
+  COMMENT "Copying lib2 to -lib2 for PUC-Rio Lua 5.1 tests"
+  COMMAND ${CMAKE_COMMAND} -E copy ${LIB2ORIG} ${LIB2COPY}
+  DEPENDS ${TESTLIBS}
+  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+)
+list(APPEND TESTLIBS ${LIB2COPY})
+
 # The original tarball contains subdirectory "libs" with an empty
 # subdirectory "libs/P1", to be used by tests.
 # Instead of tracking empty directory with some anchor-file for
 # git, create this directory via CMake.
-add_custom_target(PUC-Lua-5.1-tests-prepare)
+add_custom_target(PUC-Lua-5.1-tests-prepare DEPENDS ${TESTLIBS})
 add_custom_command(TARGET PUC-Lua-5.1-tests-prepare
   COMMENT "Create directory for PUC-Rio Lua 5.1 tests"
   COMMAND ${CMAKE_COMMAND} -E make_directory P1
diff --git a/test/PUC-Lua-5.1-tests/libs/lib1.c b/test/PUC-Lua-5.1-tests/libs/lib1.c
index 812bb9a..22fe6de 100644
--- a/test/PUC-Lua-5.1-tests/libs/lib1.c
+++ b/test/PUC-Lua-5.1-tests/libs/lib1.c
@@ -14,7 +14,7 @@ static int id (lua_State *L) {
 }
 
 
-static const struct luaL_reg funcs[] = {
+static const struct luaL_Reg funcs[] = {
   {"id", id},
   {NULL, NULL}
 };
diff --git a/test/PUC-Lua-5.1-tests/libs/lib2.c b/test/PUC-Lua-5.1-tests/libs/lib2.c
index 9972cbe..876a212 100644
--- a/test/PUC-Lua-5.1-tests/libs/lib2.c
+++ b/test/PUC-Lua-5.1-tests/libs/lib2.c
@@ -12,7 +12,7 @@ static int id (lua_State *L) {
 }
 
 
-static const struct luaL_reg funcs[] = {
+static const struct luaL_Reg funcs[] = {
   {"id", id},
   {NULL, NULL}
 };
===================================================================

> 
> ================================================================================

<snipped>

> ================================================================================
> 
> > +# vim: expandtab tabstop=2 shiftwidth=2
> 
> <snipped>
> 
> > -- 
> > 2.28.0
> > 
> 
> [1]: https://github.com/tarantool/luajit/commit/c0c53e8
> 
> -- 
> Best regards,
> IM

-- 
Best regards,
Sergey Kaplun


More information about the Tarantool-patches mailing list