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 E01819E913B; Thu, 21 Mar 2024 14:21:54 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org E01819E913B DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tarantool.org; s=dev; t=1711020115; bh=EwKsx4ySRZ/h4hKSrbGm+8KL6dpbCEbPQDcnB9+8PMk=; h=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=xSjxnJv+mmSMZRO8/bDv5lLYQYsm/bplThhaxXw7oyCfjjcVvZghTG9mWZX+IewUD AfUI0JVK1VaLDyTMrKLohVz/AhuSGJkI4hwz6OsoDbEqWrsIUVsQSOpF8nh4Frj/rQ 3asKwrjB/TjL5Ycjhk3F3nZUZWmBmoAxzw6Y2o+Y= Received: from smtp55.i.mail.ru (smtp55.i.mail.ru [95.163.41.93]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id 19FC49E9100 for ; Thu, 21 Mar 2024 14:21:53 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 19FC49E9100 Received: by smtp55.i.mail.ru with esmtpa (envelope-from ) id 1rnGUZ-0000000GuFy-10BH; Thu, 21 Mar 2024 14:21:52 +0300 Date: Thu, 21 Mar 2024 14:17:53 +0300 To: Sergey Bronnikov Message-ID: References: <62428a61c98eee87dfc91f2d8972988d80589d3e.1710226958.git.sergeyb@tarantool.org> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: X-Mailru-Src: smtp X-4EC0790: 10 X-7564579A: 646B95376F6C166E X-77F55803: 4F1203BC0FB41BD987C0EE6E7F0A597D21AFE2E000C69B1FB60C465D22E5E337182A05F53808504096D91D73A417CD5E479CDAE959BF64245F35135D95705519779F6E843F42CBB6DFC3AC920C90DFFD X-7FA49CB5: FF5795518A3D127A4AD6D5ED66289B5278DA827A17800CE7922FDBD9EBA3C5B4B287FD4696A6DC2FA8DF7F3B2552694A4E2F5AFA99E116B42401471946AA11AF0E30A4C9C8E338DA82BFA309970D60C252120BFB3F63BC185F65E78799B30205C33C3ADAEA971F8E611E41BBFE2FEB2BBD344449F4837DE5264521583148259FC6F68D394026DCB81F5CA3F4567B641C9FA2833FD35BB23D9E625A9149C048EE33AC447995A7AD182CC0D3CB04F14752D2E47CDBA5A96583BD4B6F7A4D31EC0BC014FD901B82EE079FA2833FD35BB23D27C277FBC8AE2E8B2EE5AD8F952D28FBA471835C12D1D977C4224003CC836476EB9C4185024447017B076A6E789B0E975F5C1EE8F4F765FC377718C417CAE7783AA81AA40904B5D9CF19DD082D7633A0C84D3B47A649675F3AA81AA40904B5D98AA50765F7900637673C53DD711933DBD81D268191BDAD3D3666184CF4C3C14F3FC91FA280E0CE3D1A620F70A64A45A98AA50765F7900637F9425D8FA97DB4396D1867E19FE1407959CC434672EE6371089D37D7C0E48F6C8AA50765F790063772BA5C7373F6D986EFF80C71ABB335746BA297DBC24807EABDAD6C7F3747799A X-C1DE0DAB: 0D63561A33F958A546A051FB6CD93C5E5002B1117B3ED69663C4D2FDAC1FA4B0C638DF663A625AFA823CB91A9FED034534781492E4B8EEAD5B606B10FC07407CBDAD6C7F3747799A X-C8649E89: 1C3962B70DF3F0ADBF74143AD284FC7177DD89D51EBB7742424CF958EAFF5D571004E42C50DC4CA955A7F0CF078B5EC49A30900B95165D3473457D764E1CDE7737BFBE77081733DAF3ADCCAD270279B493C9228EAF08EAB5571E92B73E73C0BD1D7E09C32AA3244CA3139803399D970A5DAF20B2795D946761BB4D3D352EF74AEA455F16B58544A2D06CB91D864A7BD2A5AE236DF995FB59829709634694AABAED6A17656DB59BCAD427812AF56FC65B X-D57D3AED: 3ZO7eAau8CL7WIMRKs4sN3D3tLDjz0dLbV79QFUyzQ2Ujvy7cMT6pYYqY16iZVKkSc3dCLJ7zSJH7+u4VD18S7Vl4ZUrpaVfd2+vE6kuoey4m4VkSEu530nj6fImhcD4MUrOEAnl0W826KZ9Q+tr5ycPtXkTV4k65bRjmOUUP8cvGozZ33TWg5HZplvhhXbhDGzqmQDTd6OAevLeAnq3Ra9uf7zvY2zzsIhlcp/Y7m53TZgf2aB4JOg4gkr2biojt33F1wIes27XlBXNSDxvzQ== X-Mailru-Sender: 520A125C2F17F0B1A9638AD358559B59083D2B4B8063E2E2479CDAE959BF64245F35135D95705519B7CBEF92542CD7C88B0A2698F12F5C9EC77752E0C033A69E86920BD37369036789A8C6A0E60D2BB63A5DB60FBEB33A8A0DA7A0AF5A3A8387 X-Mras: Ok Subject: Re: [Tarantool-patches] [PATCH luajit][v3] cmake: replace prove with CTest 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: Sergey Kaplun via Tarantool-patches Reply-To: Sergey Kaplun Cc: Sergey Bronnikov , max.kokryashkin@gmail.com, tarantool-patches@dev.tarantool.org Errors-To: tarantool-patches-bounces@dev.tarantool.org Sender: "Tarantool-patches" Hi, Sergey! Thanks for the fixes! Please consider my concerns below. I suggest moving our conversation forward with the new patch version. On 20.03.24, Sergey Bronnikov wrote: > Sergey, > > thanks for review! > > see my comments below > > On 3/18/24 18:54, Sergey Kaplun wrote: > >> 1. https://cmake.org/cmake/help/latest/manual/ctest.1.html > >> 2. https://cmake.org/cmake/help/book/mastering-cmake/chapter/Testing%20With%20CMake%20and%20CTest.html > >> 3. https://gitlab.kitware.com/cmake/cmake/-/issues/8774 > >> 4. https://cmake.org/cmake/help/latest/prop_test/FIXTURES_REQUIRED.html > >> 5. https://cmake.org/cmake/help/latest/prop_test/FIXTURES_SETUP.html > >> --- > >> Changes v3: > >> - rebased to master > >> - applied fixes suggested by Igor Munkin > >> > >> PR: https://github.com/tarantool/tarantool/pull/9286 > >> Branch: https://github.com/tarantool/luajit/tree/ligurio/enable_test_target > >> > >> .gitignore | 2 + > >> CMakeLists.txt | 11 ++++ > >> test/CMakeLists.txt | 78 +++++++++++++++-------- > >> test/LuaJIT-tests/CMakeLists.txt | 40 +++++++----- > >> test/LuaJIT-tests/src/CMakeLists.txt | 2 +- > >> test/PUC-Rio-Lua-5.1-tests/CMakeLists.txt | 25 +++++--- > >> test/lua-Harness-tests/CMakeLists.txt | 48 ++++++++------ > >> test/tarantool-c-tests/CMakeLists.txt | 56 ++++++++-------- > >> test/tarantool-tests/CMakeLists.txt | 62 ++++++++---------- > >> 9 files changed, 194 insertions(+), 130 deletions(-) > >> > >> diff --git a/.gitignore b/.gitignore > >> index dc5ea5fc..dd1f8888 100644 > >> --- a/.gitignore > >> +++ b/.gitignore > > > > > >> diff --git a/CMakeLists.txt b/CMakeLists.txt > >> index 7f5e2afb..6b2f855f 100644 > >> --- a/CMakeLists.txt > >> +++ b/CMakeLists.txt > >> @@ -345,6 +345,13 @@ set(LUAJIT_TEST_BINARY ${LUAJIT_BINARY} CACHE STRING > >> "Lua implementation to be used for tests. Default is 'luajit'." > >> ) > >> > >> +# If LuaJIT is used in a parent project, provide an option > >> +# to choose what dependencies to be used for running and building > >> +# LuaJIT tests. > >> +set(LUAJIT_TEST_DEPS "luajit-main" CACHE STRING > >> + "A list of target dependencies to be used for tests." > >> +) > > Why do we use luajit-main as a target dependency for tests? > > Why can't LUAJIT_TEST_BINARY be used instead where it is necessary (not > > in tarantool-c-tests)? See my comment below. > > > >> + > >> # FIXME: If LuaJIT is used in parent project, provide an option > >> # to pass Lua code to be run before tests are started. > >> # XXX: Attentive reader might point to LUA_INIT environment > >> @@ -362,6 +369,10 @@ set(LUAJIT_TEST_INIT "${PROJECT_SOURCE_DIR}/test/luajit-test-init.lua" CACHE STR > >> "Lua code need to be run before tests are started." > >> ) > >> > >> +# XXX: Enable testing via CTest. Since CTest expects to find a > >> +# test file in the build directory root, this command should be in > > Nit: I suggest to mentioning that this command generates "test" target. > > Something like the following: > > | # XXX: Enable testing via CTest. This generates `test` target. > > Added: > > --- a/CMakeLists.txt > +++ b/CMakeLists.txt > @@ -369,9 +369,10 @@ set(LUAJIT_TEST_INIT > "${PROJECT_SOURCE_DIR}/test/luajit-test-init.lua" CACHE STR >    "Lua code need to be run before tests are started." >  ) > > -# XXX: Enable testing via CTest. Since CTest expects to find a > -# test file in the build directory root, this command should be in > -# the source directory root (hence, in this CMakeLists.txt). > +# XXX: Enable testing via CTest. This automatically generates > +# `test` target. Since CTest expects to find a test file in Typo: s/`test`/the `test`/ > +# the build directory root, this command should be in the source > +# directory root (hence, in this CMakeLists.txt). >  enable_testing() >  add_subdirectory(test) > > > > > > Unfortunately, this flag does nothing for `make test` command. > > Is there the way to fix it? > > Yes, in CMake 3.17+. This version introduces CMAKE_CTEST_ARGUMENTS that > contains > CTest options and is used by `test` target. As a comment says. > > BTW you can fix it by using CMake workflows and specify any CTest > arguments you want in CMakePreset.json. I got it thanks for the clarification! May you please add a comment with the "FIXME:" mark and mention the CMake version and the CMAKE_CTEST_ARGUMENTS variable? > > > BTW `make LuaJIT-tests` or `make tarantool-tests` work fine. > Sure, these are our own targets and we pass desired CTest options to it. > >> + --output-on-failure > >> + --schedule-random > >> + --parallel ${CMAKE_BUILD_PARALLEL_LEVEL} > > I suppose it will be good to add the `--timeout` option here too. > > 5 minutes as a timeout for the single test sounds more than enough. > > > Added. Unfortunately, as you mentioned offline, for some builds [1], even 5 minutes is not enough: | 211/211 Test #109: test/tarantool-tests/lj-1034-tabov-error-frame.test.lua ........................***Timeout 300.54 sec I suggest increasing the timeout to 30 minutes. > >> +) > >> +if(CMAKE_VERBOSE_MAKEFILE) > >> + list(APPEND TEST_FLAGS --verbose) > >> +endif() > >> + > >> +function(add_test_suite_target target) > >> + set(prefix ARG) > >> + set(noValues) > >> + set(singleValues LABEL) > >> + set(multiValues DEPENDS) > >> + > >> + # FIXME: if we update to CMake >= 3.5, can remove this line. > >> + include(CMakeParseArguments) > >> + cmake_parse_arguments(${prefix} > >> + "${noValues}" > >> + "${singleValues}" > >> + "${multiValues}" > >> + ${ARGN}) > >> + > >> + set(_DEPS_TARGET ${target}-deps) > >> + > >> + add_custom_target(${_DEPS_TARGET} DEPENDS ${ARG_DEPENDS}) > >> + > >> + add_test(${_DEPS_TARGET} > > Should the NAME parameter be ${target} instead? > > Added. Sorry, I've misguided you with my comment. I thought that we should name the test as "${target}", not "${_DEPS_TARGET}" (I hadn't gotten the idea of proxy targets before, but I'm OK with it now). Please revert this change. My bad. Also, please add the comment that this proxy test allows us to be sure that all prerequisites must be built or generated before the main test execution. > > > > Or, maybe this line > > should be ommitted since it is also used for normal test targets with > > several tests. > > CMake test for a target with dependencies must be generated, > > otherwise dependencies will not be built. > > > > > For now `ctest -N` output looks a little bit inconsistent: > > > > | Test project /home/burii/reviews/luajit/ctest > > | Test #1: LuaJIT-tests-deps > > | Test #2: test/LuaJIT-tests > > | Test #3: PUC-Rio-Lua-5.1-tests-deps > > | Test #4: test/PUC-Rio-Lua-5.1 > > | Test #5: lua-Harness-tests-deps > > | Test #6: test/lua-Harness-tests/000-sanity.t > > | ... > > | Test #56: tarantool-c-tests-deps > > | Test #57: test/tarantool-c-tests/fix-yield-c-hook.c_test > > | ... > > | Test #67: tarantool-tests-deps > > | Test #68: test/tarantool-tests/arm64-ccall-fp-convention.test.lua > > | ... > > > > If tests like the following are needed to run tests, I suggest naming > > them like `LuaJIT-tests-build` to avoid confusion. > > AFAIR this naming was suggested by Igor. > > What kind of confusion you observe? For me something like That we are really testing something with this strange name. OK, my bad ignore it. > > `LuaJIT-tests-build`  much more confusing than "xxx-deps". > > > | Test #1: LuaJIT-tests-deps OK, let's leave it as it is. > > > >> -add_custom_target(${PROJECT_NAME}-test DEPENDS > >> - LuaJIT-tests > >> - PUC-Rio-Lua-5.1-tests > >> - lua-Harness-tests > >> - tarantool-c-tests > >> - tarantool-tests > >> +add_custom_target(${PROJECT_NAME}-test > >> + COMMAND ${CMAKE_CTEST_COMMAND} ${TEST_FLAGS} > > Why do we need to use custom command for this test? > > IINM, all "subtargets" are used the same ${TEST_FLAGS} > > See also Igor's comment about this test. > > Answered to Igor. > > because output will be ugly in that case, > > just change as you suggest and run LuaJIT-test. Please, mention the desired output format in the comment. > > > > >> > >> set(LD_LIBRARY_PATH "${CMAKE_CURRENT_BINARY_DIR}/src/:") > >> @@ -50,10 +46,11 @@ if(LUAJIT_USE_ASAN) > >> if(CMAKE_C_COMPILER_ID STREQUAL "GNU") > >> LibRealPath(LIB_ASAN libasan.so) > >> # XXX: Don't use " " (separator in LD_PRELOAD) in `list()`. > >> - # ";" will expand to " " as we want. > >> - list(APPEND LUAJIT_TESTS_ENV LD_PRELOAD="${LIB_ASAN};${LIB_STDCPP}") > >> + # ";" will expand to " " as we want after wrapping > > This is not true. After these changes the environment variable > > `LD_PRELOAD` is the following: > > | LD_PRELOAD=/usr/lib/gcc/x86_64-pc-linux-gnu/13/libasan.so.8.0.0;/usr/lib/gcc/x86_64-pc-linux-gnu/13/libstdc++.so.6.0.32 > > But it should be: > > | LD_PRELOAD="/usr/lib/gcc/x86_64-pc-linux-gnu/13/libasan.so.8.0.0 /usr/lib/gcc/x86_64-pc-linux-gnu/13/libstdc++.so.6.0.32" > > This is why this quotes is used. > > For some reason, with the debug flags, paths are separated via \n: > > | 2: LD_PRELOAD=/usr/lib/gcc/x86_64-pc-linux-gnu/13/libasan.so.8.0.0 > > | 2: /usr/lib/gcc/x86_64-pc-linux-gnu/13/libstdc++.so.6.0.32 > > > > So, I got the following error, when I build LuaJIT with GCC and use the > > flag `-DLUAJIT_ENABLE_ASAN`: > > | AddressSanitizer: CHECK failed: asan_interceptors.cpp:335 "((__interception::real___cxa_throw)) != (0)" (0x0, 0x0) (tid=28264) > > | #0 0x7f0c5d13b545 in CheckUnwind /var/tmp/portage/sys-devel/gcc-13.2.1_p20240113-r1/work/gcc-13-20240113/libsanitizer/asan/asan_rtl.cpp:69 > > > Fixed. > > Unfortunately there is a yet another test that will never worked in > configuration GCC + ASAN. > > Currently it is disabled when LUAJIT_USE_ASAN is enabled. I can try to > fix it, but as > > it was never worked before we don't need to do it in scope of ctest support. It works in our CI, where we use the clang build. For now, we may just disable this test for GCC + clang build with the link to the issue. On branch, you're using global LD_PRELOAD from the aforementioned test (lj-802-panic-at-mcode-protfail.test.lua). As a result, tons of tests fail with the following error: | got: PANIC: unprotected error in call to Lua API (runtime code generation failed, restricted kernel?) May be it is better to proxy parent LD_PRELOAD to the test instead? > diff --git a/test/LuaJIT-tests/CMakeLists.txt > b/test/LuaJIT-tests/CMakeLists.txt > index 0c85f15c..4c9cf901 100644 > --- a/test/LuaJIT-tests/CMakeLists.txt > +++ b/test/LuaJIT-tests/CMakeLists.txt > @@ -29,27 +29,39 @@ if(LUAJIT_USE_ASAN) >    # https://github.com/google/sanitizers/issues/934. >    macro(LibRealPath output lib) >      execute_process( > -      COMMAND ${CMAKE_CXX_COMPILER} -print-file-name=${lib} > +      COMMAND ${CMAKE_C_COMPILER} -print-file-name=${lib} Please mention in the comment that the C++ and C compilers use the same tooling, so the returned library path is the same. >        OUTPUT_VARIABLE LIB_LINK >        OUTPUT_STRIP_TRAILING_WHITESPACE > +      TIMEOUT 5 Why do we need timeout here? (*) > +      RESULT_VARIABLE RES >      ) > +    if (${LIB_LINK} STREQUAL ${lib}) > +      message(FATAL_ERROR "library ${lib} is not found") > +    endif() > +    if (NOT RES EQUAL 0) > +      message(FATAL_ERROR "Executing ${CMAKE_C_COMPILER} has failed") Nit: the message is not very informative. I still don't know how to rewrite it, since compilers just print the input for unexisting files. Hence, I am not sure: do we really need this error message, since the given command is valid? > +    endif() > + >      # Fortunately, we are not interested in macOS here, so we can >      # use realpath. > +    # Beware, builtin command returns exit code equal to 0, > +    # we cannot check is it failed or not. >      execute_process( >        COMMAND realpath ${LIB_LINK} >        OUTPUT_VARIABLE ${output} >        OUTPUT_STRIP_TRAILING_WHITESPACE > +      TIMEOUT 5 (*) And here? >      ) >    endmacro() >    LibRealPath(LIB_STDCPP libstdc++.so) > -  # XXX: GCC requires both. Clang requires only libstdc++. >    if(CMAKE_C_COMPILER_ID STREQUAL "GNU") >      LibRealPath(LIB_ASAN libasan.so) > -    # XXX: Don't use " " (separator in LD_PRELOAD) in `list()`. > -    # ";" will expand to " " as we want. > -    list(APPEND LUAJIT_TESTS_ENV LD_PRELOAD="${LIB_ASAN};${LIB_STDCPP}") > +    # XXX: The items of the list in LD_PRELOAD can be separated > +    # by spaces or colons, and there is no support for escaping > +    # either separator, see ld.so(8). > +    list(APPEND LUAJIT_TESTS_ENV LD_PRELOAD=${LIB_ASAN}:${LIB_STDCPP}) >    else() > -    list(APPEND LUAJIT_TESTS_ENV LD_PRELOAD="${LIB_STDCPP}") > +    list(APPEND LUAJIT_TESTS_ENV LD_PRELOAD=${LIB_STDCPP}) >    endif() >  endif() Minor: Maybe it is better to move this change to a separate patch. Feel free to ignore. > >> +add_test_suite_target(LuaJIT-tests > >> + LABEL ${TEST_SUITE_NAME} > >> + DEPENDS ${LUAJIT_TEST_DEPS} LuaJIT-tests-deps-libs > > Why don't use `${LUAJIT_TEST_BINARY}` here? > > > AFAIR we decided with Igor in a verbal conversation > > to use ${LUAJIT_TEST_DEPS} instead of ${LUAJIT_TEST_BINARY}. > > LUAJIT_TEST_BINARY is a single target that can be used as a command, > > see for example tests in test/tarantool-tests/. LUAJIT_TEST_DEPS is a > list of targets > > that should be build before running tests. Yes, but we are now setting LUAJIT_TEST_DEPS unconditionally. Also, as I mentioned above for tarantool-c-tests, there is no need to build the luajit-main target -- libluajit is enough. Hence, this change may be dropped. CC imun@ here. > > > > >> +) > >> + > >> +# The test suite has its own test runner > >> +# (test/LuaJIT-tests/test.lua), it is not possible to run these > >> +# tests one-by-one by CTest. > >> +add_test(NAME "test/LuaJIT-tests" > > Why don't use just LuaJIT-tests as a test name here? > For consistency with other test titles. Side note: It looks inconsistent anyway (partially): | Start 1: LuaJIT-tests-deps | 1/211 Test #1: LuaJIT-tests-deps .............................................................. Passed 0.29 sec | Start 2: test/LuaJIT-tests | 2/211 Test #2: test/LuaJIT-tests .............................................................. Passed 3.56 sec | Start 3: PUC-Rio-Lua-5.1-tests-deps | 3/211 Test #3: PUC-Rio-Lua-5.1-tests-deps ..................................................... Passed 0.35 sec | Start 4: test/PUC-Rio-Lua-5.1 As you can see, *-deps targets have no test in their name. But I can't come up with something meaningful, so feel free to ignore it. > > The same question to the tests below. > > > >> + COMMAND ${LUAJIT_TEST_COMMAND} ${CMAKE_CURRENT_SOURCE_DIR}/test.lua > >> + +slow +ffi +bit +jit ${LUAJIT_TEST_TAGS_EXTRA} > >> WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} > >> ) > >> +set_tests_properties("test/LuaJIT-tests" PROPERTIES > >> + LABELS ${TEST_SUITE_NAME} > >> + ENVIRONMENT "${LUAJIT_TESTS_ENV}" > >> + DEPENDS LuaJIT-tests-deps > >> +) > >> diff --git a/test/LuaJIT-tests/src/CMakeLists.txt b/test/LuaJIT-tests/src/CMakeLists.txt > >> index 2f90da86..f0e639e1 100644 > >> --- a/test/LuaJIT-tests/src/CMakeLists.txt > >> +++ b/test/LuaJIT-tests/src/CMakeLists.txt > >> + set(test_title "test/${TEST_SUITE_NAME}/${test_name}") > > I suppose, that general part "test/" may be ommited from the title. > I would left as is. The main idea is to map test title to a file/dir on > the filesystem. > > It's kind of obvious to me that tests are placed in the directory "test". I'm not insisting, but the names of the tests are already long enough, it will be nicer to decrease their length with unnecessary information. The "test" directory is still the root directory for all tests. OTOH, it is more convenient to copy-paste the filenames, but for sure, we must use the whole filename to be consistent with the prove's output we are replacing. > >> +# To workaround this, we glob source files and generated tests > >> +# with paths to executable binaries. > >> +file(GLOB tests ${CMAKE_CURRENT_SOURCE_DIR} "*.test.c") > > Please use `${CTEST_SRC_SUFFIX}` instead of "*.test.c". > > > > You may use the cycle above, which adds build targets. > > This is a good idea, but anyway we need two loops. > > First should build a list TESTS_COMPILED that is used in > add_test_suite_target. > > The second one should generate  CMake tests. > > If you are still want to have a single loop for everything then > > we need to build -deps target and CMake test for each tarantool C test. Shouldn't it be enough to set | DEPENDS ${LUAJIT_TEST_DEPS} libluajit libtest ${exe} for each test? But, yes, in this way, the order of compilation and execution isn't sequential... Maybe we should use the proxy target here. In the loop, we append a dependency for this target and set it as a dependency for each test target. May it work? > > Left without changes. May you please add a comment about it to avoid confusion in the future? > > >> +set(TEST_SUITE_NAME "tarantool-tests") > >> + > >> +# XXX: The call produces both test and target > >> +# as a side effect. > >> +add_test_suite_target(tarantool-tests > >> + LABEL ${TEST_SUITE_NAME} > >> + DEPENDS ${LUAJIT_TEST_DEPS} tarantool-tests-deps-libs > >> ) > >> > >> +# LUA_CPATH and LD_LIBRARY_PATH variables and also TESTLIBS list > >> +# with dependencies are set in scope of BuildTestLib macro. > >> +set(TEST_ENV "LUA_PATH=${LUA_PATH};\;\;;LUA_CPATH=${LUA_CPATH}\;\;;${LUA_TEST_ENV_MORE}") > >> +file(GLOB_RECURSE tests ${CMAKE_CURRENT_SOURCE_DIR} "*${LUA_TEST_SUFFIX}") > > Why do we need GLOB_RECURSE here, instead of GLOB? > > > it is better to search test files recursively, no one can guarantee that > files always will be in a top testsuite dir. Ok, thanks for the clarification. -- Best regards, Sergey Kaplun