From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from [87.239.111.99] (localhost [127.0.0.1]) by dev.tarantool.org (Postfix) with ESMTP id F2E957037D; Thu, 11 Aug 2022 14:28:39 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org F2E957037D DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tarantool.org; s=dev; t=1660217320; bh=Ff4+Y8HVKY/MDB0uO7cIpP0ZbcmgAojH8aNYROKEPKQ=; h=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=afFGaTjTglb1Yyz0voOqx2lwIQy4MMKexWquaAOuGidwccQgJ/NDMCpIVG2wuj0nh ivTHe68HBUau5MBo40WXgBcw/bUmYkZETl2HQf2TJ52L4KLbtj5G+G0hxtDe4DwYnS Z7Rhqm+x6RfsH8mouq8X3NtEHaJkWQhjsC9KP5yg= Received: from smtpng2.i.mail.ru (smtpng2.i.mail.ru [94.100.179.3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id 56A4A7037D for ; Thu, 11 Aug 2022 14:27:39 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 56A4A7037D Received: by smtpng2.m.smailru.net with esmtpa (envelope-from ) id 1oM6Li-0002YE-E0; Thu, 11 Aug 2022 14:27:38 +0300 To: Sergey Kaplun , Sergey Bronnikov Date: Thu, 11 Aug 2022 14:17:41 +0300 Message-Id: <1d05bbecc9c9ae57250ec563e202a8e103f86fa4.1660216002.git.imun@tarantool.org> X-Mailer: git-send-email 2.34.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Mailru-Src: smtp X-4EC0790: 10 X-7564579A: 646B95376F6C166E X-77F55803: 4F1203BC0FB41BD999D8F08CF16C6CA7AE777BCDF00156E450145138C04977EA00894C459B0CD1B9781D20C2924F6BFF6E29FDA2889CF6671C9930A848CFA68E45849E6DFAE0F427 X-7FA49CB5: FF5795518A3D127A4AD6D5ED66289B5278DA827A17800CE76ABD3380F320B62CEA1F7E6F0F101C67BD4B6F7A4D31EC0BCC500DACC3FED6E28638F802B75D45FF8AA50765F79006376C2B935BE6E4DEC88638F802B75D45FF36EB9D2243A4F8B5A6FCA7DBDB1FC311F39EFFDF887939037866D6147AF826D86AB7BA89D02085E482311E32E9C8AD3A117882F4460429724CE54428C33FAD305F5C1EE8F4F765FC11A27A05CE189FECA471835C12D1D9774AD6D5ED66289B52BA9C0B312567BB23117882F446042972877693876707352026055571C92BF10FC26CFBAC0749D213D2E47CDBA5A96583BA9C0B312567BB231DD303D21008E29813377AFFFEAFD269A417C69337E82CC2E827F84554CEF50127C277FBC8AE2E8BA83251EDC214901ED5E8D9A59859A8B60A62CEF541B197C8089D37D7C0E48F6C5571747095F342E88FB05168BE4CE3AF X-C1DE0DAB: C20DE7B7AB408E4181F030C43753B8186998911F362727C41E93BD56E7067354307CAA32FF218580205367B2BCC23E5B0D53CE0FDF8446B28329FE0B6AC8C886CFC4036BBF6A4EA9BF8C51168CD8EBDB5FC25ED3FCEC3375BCD5413C93A139628A5251AA20633D26296C473AB1E14218358DF15703B05F807866D6147AF826D86AB7BA89D02085E482311E32E9C8AD3AF972CCD2F8FE1EF1CFC4036BBF6A4EA9EDCF5861DED71B2F3D58D961240FA4EF6DABF04D5057A81F1E618B5D5F965AFDB936CB490224F2464EEA7BD89490CAC0EDDA962BC3F61961 X-C8649E89: 4E36BF7865823D7055A7F0CF078B5EC49A30900B95165D340EEB18E4918315719F0F6B9A977F7601A8160075E9D06FBA88D24654AAB0A6CA09402AE14591DD781D7E09C32AA3244C1DE54673441F255E950714D33134399EB038C9161EF167A1927AC6DF5659F194 X-D57D3AED: 3ZO7eAau8CL7WIMRKs4sN3D3tLDjz0dLbV79QFUyzQ2Ujvy7cMT6pYYqY16iZVKkSc3dCLJ7zSJH7+u4VD18S7Vl4ZUrpaVfd2+vE6kuoey4m4VkSEu530nj6fImhcD4MUrOEAnl0W826KZ9Q+tr5ycPtXkTV4k65bRjmOUUP8cvGozZ33TWg5HZplvhhXbhDGzqmQDTd6OAevLeAnq3Ra9uf7zvY2zzsIhlcp/Y7m53TZgf2aB4JOg4gkr2biojfXJM3siCnClvApobGlbisg== X-Mailru-Sender: 689FA8AB762F7393CC2E0F076E87284EADBC591CA6DCA460D1EB5230BF0CA549A7C8D0F45F857DBFE9F1EFEE2F478337FB559BB5D741EB964C8C2C849690F8E70A04DAD6CC59E3365FEEDEB644C299C0ED14614B50AE0675 X-Mras: Ok Subject: [Tarantool-patches] [PATCH luajit 2/8] test: introduce MakeLuaPath.cmake helper X-BeenThere: tarantool-patches@dev.tarantool.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Igor Munkin via Tarantool-patches Reply-To: Igor Munkin Cc: tarantool-patches@dev.tarantool.org Errors-To: tarantool-patches-bounces@dev.tarantool.org Sender: "Tarantool-patches" While extending test suites it is often required to append additional path where Lua or Lua-C auxiliary modules are located to LUA_PATH or LUA_CPATH environment variables. Due to insane semicolon interpolation in CMake strings (that converts such string to a list as a result), we need to escape semicolon in LUA_PATH/LUA_CPATH strings while building the resulting value. After the years of struggling MakeLuaPath.cmake module is introduced to make LUA_PATH and LUA_CPATH definition convenient with helper. This function takes all paths given as a variable list argument, joins them in a reverse order by a semicolon and yields the resulting string to a specified CMake variable. Signed-off-by: Igor Munkin --- cmake/MakeLuaPath.cmake | 46 +++++++++++++++++++++++ test/CMakeLists.txt | 2 + test/PUC-Rio-Lua-5.1-tests/CMakeLists.txt | 8 +++- test/lua-Harness-tests/CMakeLists.txt | 16 +++++--- test/tarantool-tests/CMakeLists.txt | 28 ++++++++------ 5 files changed, 81 insertions(+), 19 deletions(-) create mode 100644 cmake/MakeLuaPath.cmake diff --git a/cmake/MakeLuaPath.cmake b/cmake/MakeLuaPath.cmake new file mode 100644 index 00000000..9a5a3bb8 --- /dev/null +++ b/cmake/MakeLuaPath.cmake @@ -0,0 +1,46 @@ +# make_lua_path provides a convenient way to define LUA_PATH and +# LUA_CPATH variables. +# +# Example usage: +# +# make_lua_path(LUA_PATH +# PATH +# ${CMAKE_CURRENT_SOURCE_DIR}/?.lua +# ${CMAKE_BINARY_DIR}/?.lua +# ./?.lua +# ) +# +# This will give you the string: +# "./?.lua;${CMAKE_BINARY_DIR}/?.lua;${CMAKE_CURRENT_SOURCE_DIR}/?.lua;;" +# XXX: Mind the reverse order of the entries in the result string. + +function(make_lua_path path) + set(prefix ARG) + set(noValues) + set(singleValues) + set(multiValues PATHS) + + # FIXME: if we update to CMake >= 3.5, can remove this line. + include(CMakeParseArguments) + cmake_parse_arguments(${prefix} + "${noValues}" + "${singleValues}" + "${multiValues}" + ${ARGN}) + + # XXX: This is the sentinel semicolon having special meaning + # for LUA_PATH and LUA_CPATH variables. For more info, see the + # link below: + # https://www.lua.org/manual/5.1/manual.html#pdf-LUA_PATH + set(result "\;") + + foreach(inc ${ARG_PATHS}) + # XXX: If one joins two strings with semicolon, the value + # automatically becomes a list. I found a single working + # solution to make result variable be a string via "escaping" + # the semicolon right in string interpolation. + set(result "${inc}\;${result}") + endforeach() + + set(${path} "${result}" PARENT_SCOPE) +endfunction() diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index ba25af54..a8262b12 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -3,6 +3,8 @@ # See the rationale in the root CMakeLists.txt. cmake_minimum_required(VERSION 3.1 FATAL_ERROR) +include(MakeLuaPath) + find_program(LUACHECK luacheck) if(LUACHECK) # XXX: The tweak below relates to luacheck problem with paths. diff --git a/test/PUC-Rio-Lua-5.1-tests/CMakeLists.txt b/test/PUC-Rio-Lua-5.1-tests/CMakeLists.txt index 8e825f55..b95e7852 100644 --- a/test/PUC-Rio-Lua-5.1-tests/CMakeLists.txt +++ b/test/PUC-Rio-Lua-5.1-tests/CMakeLists.txt @@ -14,7 +14,11 @@ cmake_minimum_required(VERSION 3.1 FATAL_ERROR) # 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") +make_lua_path(LUA_PATH + PATHS + ${CMAKE_CURRENT_SOURCE_DIR}/?.lua + "?" +) # Establish PUC-Rio-Lua-5.1-tests-prepare target that contains # rules for libraries compilation and creates @@ -38,7 +42,7 @@ add_custom_command(TARGET PUC-Rio-Lua-5.1-tests COMMENT "Running PUC-Rio Lua 5.1 tests" COMMAND env - LUA_PATH="${LUA_PATH}\;\;" + LUA_PATH="${LUA_PATH}" ${LUAJIT_TEST_COMMAND} ${CMAKE_CURRENT_SOURCE_DIR}/all.lua WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} ) diff --git a/test/lua-Harness-tests/CMakeLists.txt b/test/lua-Harness-tests/CMakeLists.txt index 12476171..a57104a5 100644 --- a/test/lua-Harness-tests/CMakeLists.txt +++ b/test/lua-Harness-tests/CMakeLists.txt @@ -10,10 +10,16 @@ if(NOT PROVE) return() endif() -# Tests create temporary files (see 303-package.t and 411-luajit.t for -# example) to require. Also, they require some files from original test -# source directory. -set(LUA_PATH "./?.lua\;${CMAKE_CURRENT_SOURCE_DIR}/?.lua\;${LUAJIT_SOURCE_DIR}/?.lua\;${LUAJIT_BINARY_DIR}/?.lua") +# Tests create temporary files (see 303-package.t and 411-luajit.t +# for example) to be required. Also, they require some files from +# the original test source directory. +make_lua_path(LUA_PATH + PATHS + ${CMAKE_CURRENT_SOURCE_DIR}/?.lua + ${LUAJIT_BINARY_DIR}/?.lua + ${LUAJIT_SOURCE_DIR}/?.lua + ./?.lua +) set(LUA_TEST_FLAGS --failures --shuffle) if(CMAKE_VERBOSE_MAKEFILE) @@ -25,7 +31,7 @@ add_custom_command(TARGET lua-Harness-tests COMMENT "Running lua-Harness tests" COMMAND env - LUA_PATH="${LUA_PATH}\;" + LUA_PATH="${LUA_PATH}" ${PROVE} ${CMAKE_CURRENT_SOURCE_DIR} --exec '${LUAJIT_TEST_COMMAND} -l profile_luajit21' --jobs ${CMAKE_BUILD_PARALLEL_LEVEL} diff --git a/test/tarantool-tests/CMakeLists.txt b/test/tarantool-tests/CMakeLists.txt index ecda2e63..27866869 100644 --- a/test/tarantool-tests/CMakeLists.txt +++ b/test/tarantool-tests/CMakeLists.txt @@ -43,14 +43,11 @@ macro(BuildTestCLib lib sources) # semicolon. If one finds the normal way to make it work, feel # free to reach me. set(TESTLIBS "${lib};${TESTLIBS}" PARENT_SCOPE) - # Add the directory where the lib is built to the LUA_CPATH - # environment variable, so LuaJIT can find and load it. - # XXX: Here we see the other side of the coin. If one joins two - # strings with semicolon, the value automatically becomes a - # list. I found a single working solution to make LUA_CPATH be - # a string via "escaping" the semicolon right in string - # interpolation. - set(LUA_CPATH "${CMAKE_CURRENT_BINARY_DIR}/?${CMAKE_SHARED_LIBRARY_SUFFIX}\;${LUA_CPATH}" PARENT_SCOPE) + # Add the directory where the lib is built to the list with + # entries for LUA_CPATH environment variable, so LuaJIT can find + # and load it. See the comment about extending the list in the + # parent scope few lines above. + set(LUA_CPATHS "${CMAKE_CURRENT_BINARY_DIR}/?${CMAKE_SHARED_LIBRARY_SUFFIX};${LUA_CPATHS}" PARENT_SCOPE) # Also add this directory to LD_LIBRARY_PATH environment # variable, so FFI machinery can find and load it. set(LD_LIBRARY_PATH "${CMAKE_CURRENT_BINARY_DIR}:${LD_LIBRARY_PATH}" PARENT_SCOPE) @@ -76,14 +73,21 @@ add_subdirectory(misclib-sysprof-capi) # in src/ directory and auxiliary tests-related modules are # located in the current directory (but tests are run in the # binary directory), so LUA_PATH need to be updated. -set(LUA_PATH - "${CMAKE_CURRENT_SOURCE_DIR}/?.lua\;${PROJECT_SOURCE_DIR}/tools/?.lua\;${PROJECT_SOURCE_DIR}/src/?.lua" +make_lua_path(LUA_PATH + PATHS + ${CMAKE_CURRENT_SOURCE_DIR}/?.lua + ${PROJECT_SOURCE_DIR}/tools/?.lua + ${PROJECT_SOURCE_DIR}/src/?.lua ) +# Update LUA_CPATH with the library paths collected within +# macro. +make_lua_path(LUA_CPATH PATHS ${LUA_CPATHS}) + set(LUA_TEST_SUFFIX .test.lua) set(LUA_TEST_FLAGS --failures --shuffle) set(LUA_TEST_ENV - "LUA_PATH=\"${LUA_PATH}\;\;\"" - "LUA_CPATH=\"${LUA_CPATH}\;\;\"" + "LUA_PATH=\"${LUA_PATH}\"" + "LUA_CPATH=\"${LUA_CPATH}\"" ) if(CMAKE_VERBOSE_MAKEFILE) -- 2.34.0