commit:     8a50bc5c4107f462921239170c3ff535a8f0a83d
Author:     Paul Zander <negril.nx+gentoo <AT> gmail <DOT> com>
AuthorDate: Sun Nov 10 17:31:12 2024 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Sun Nov 10 17:43:37 2024 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=8a50bc5c

dev-util/clazy: fix tests

Fiddle with the code to allow testing under gentoo.

- Fix logic that incorrectly adds paths that only work with not installed
builds.
- Use `CMAKE_INSTALL_LIBDIR` from `GNUInstallDirs` to avoid looking up libs with
wrong ABI.
- Install `clazy-standalone` in to the same directory as the corresponding
`clang` binary so it can find headers.
- Skip tests if their dependencies are not satifsfied.
- Don't test qt5, even if installed, so we can ignore the dependencies.

Closes: https://bugs.gentoo.org/811723
Signed-off-by: Paul Zander <negril.nx+gentoo <AT> gmail.com>
Signed-off-by: Sam James <sam <AT> gentoo.org>

 dev-util/clazy/clazy-1.12.ebuild                   | 44 +++++++++++++++++--
 dev-util/clazy/files/clazy-1.12-INCLUDE_DIRS.patch | 42 ++++++++++++++++++
 dev-util/clazy/files/clazy-1.12-LIBRARY_DIRS.patch | 33 ++++++++++++++
 .../clazy-1.12-standalone-install-location.patch   | 50 ++++++++++++++++++++++
 4 files changed, 166 insertions(+), 3 deletions(-)

diff --git a/dev-util/clazy/clazy-1.12.ebuild b/dev-util/clazy/clazy-1.12.ebuild
index b5e819706f76..33919d1d9024 100644
--- a/dev-util/clazy/clazy-1.12.ebuild
+++ b/dev-util/clazy/clazy-1.12.ebuild
@@ -3,7 +3,7 @@
 
 EAPI=8
 
-LLVM_COMPAT=( 15 16 17 18 )
+LLVM_COMPAT=( {15..18} )
 PYTHON_COMPAT=( python3_{10..13} )
 inherit cmake llvm-r1 python-any-r1
 
@@ -30,6 +30,10 @@ PATCHES=(
        "${FILESDIR}"/${P}-llvm-18.patch
        # Pending: https://invent.kde.org/sdk/clazy/-/merge_requests/131
        "${FILESDIR}"/${P}-clang-16-no-src-root.patch
+
+       "${FILESDIR}"/${P}-LIBRARY_DIRS.patch
+       "${FILESDIR}"/${P}-INCLUDE_DIRS.patch
+       "${FILESDIR}"/${P}-standalone-install-location.patch
 )
 
 pkg_setup() {
@@ -45,13 +49,47 @@ src_prepare() {
 }
 
 src_configure() {
-       export LLVM_ROOT="$(get_llvm_prefix -d)"
+       local -x LLVM_ROOT="$(get_llvm_prefix -d)"
+
+       export CI_JOB_NAME_SLUG="qt6"
 
        cmake_src_configure
 }
 
 src_test() {
+       # clazy-standalone wants to be installed in the directory of the clang 
binary,
+       # so it can find the llvm/clang via relative paths.
+       # Requires the standalone-install-location.patch.
+       # Setup the directories and symlink the system include dir for that.
+       local -x LLVM_ROOT="$(get_llvm_prefix -d)"
+       local -x CLANG_ROOT="${LLVM_ROOT//llvm/clang}"
+       mkdir -p "${BUILD_DIR}${CLANG_ROOT}" || die
+
+       ln -s "${CLANG_ROOT}/include" "${BUILD_DIR}${CLANG_ROOT}/include" || die
+
        # Run tests against built copy, not installed
        # bug #811723
-       PATH="${BUILD_DIR}/bin:${PATH}" LD_LIBRARY_PATH="${BUILD_DIR}/lib" 
cmake_src_test
+       local -x PATH="${BUILD_DIR}/${LLVM_ROOT}/bin:${BUILD_DIR}/bin:${PATH}"
+       local -x LD_LIBRARY_PATH="${BUILD_DIR}/lib"
+
+       # NOTE or DEPEND on "test? ( dev-qt/qtscxml:6[qml] )"
+       local -x CMAKE_SKIP_TESTS=()
+
+       if ! has_version dev-qt/qtscxml:6; then
+               CMAKE_SKIP_TESTS+=(
+                       # cannot find -lQt6StateMachine: No such file or 
directory
+                       "old-style-connect"
+               )
+       fi
+
+       if ! has_version dev-qt/qtdeclarative:6; then
+               CMAKE_SKIP_TESTS+=(
+                       # lowercase-qml-type-name/main.cpp:3:10: fatal error: 
'QtQml/QQmlEngine' file not found
+                       "lowercase-qml-type-name"
+                       # no-module-include/main.cpp:5:10: fatal error: 
'QtQml/QtQml' file not found
+                       "no-module-include"
+               )
+       fi
+
+       cmake_src_test
 }

diff --git a/dev-util/clazy/files/clazy-1.12-INCLUDE_DIRS.patch 
b/dev-util/clazy/files/clazy-1.12-INCLUDE_DIRS.patch
new file mode 100644
index 000000000000..23641828804f
--- /dev/null
+++ b/dev-util/clazy/files/clazy-1.12-INCLUDE_DIRS.patch
@@ -0,0 +1,42 @@
+From 6e17217d7b77a27bdf77da2c20044e89f112e9b1 Mon Sep 17 00:00:00 2001
+From: Paul Zander <[email protected]>
+Date: Sun, 10 Nov 2024 17:19:56 +0100
+Subject: do not inject include dirs with installed llvm
+
+`string(FIND returns` returns `-1` on failure not `FALSE`.
+If `_llvmSourceRoot` is equal to to first directory in `LLVM_INCLUDE_DIRS` 
+this would include non-existant directories.
+
+Signed-off-by: Paul Zander <[email protected]>
+
+diff --git a/cmake/FindClang.cmake b/cmake/FindClang.cmake
+index b4f0b0a..eda8bb5 100644
+--- a/cmake/FindClang.cmake
++++ b/cmake/FindClang.cmake
+@@ -95,8 +95,7 @@ if(CLANG_FOUND)
+     OUTPUT_VARIABLE _llvmSourceRoot
+     OUTPUT_STRIP_TRAILING_WHITESPACE
+   )
+-  string(FIND "${LLVM_INCLUDE_DIRS}" "${_llvmSourceRoot}" _llvmIsInstalled)
+-  if (NOT _llvmIsInstalled)
++  if(NOT "${_llvmSourceRoot}" IN_LIST LLVM_INCLUDE_DIRS)
+     message(STATUS "Detected that llvm-config comes from a build-tree, adding 
more include directories for Clang")
+     list(APPEND CLANG_INCLUDE_DIRS
+          "${LLVM_INSTALL_PREFIX}/tools/clang/include" # build dir
+diff --git a/cmake/FindLLVM.cmake b/cmake/FindLLVM.cmake
+index c625eeb..1e1e902 100644
+--- a/cmake/FindLLVM.cmake
++++ b/cmake/FindLLVM.cmake
+@@ -140,8 +140,7 @@ if (LLVM_FOUND)
+     OUTPUT_VARIABLE _llvmSourceRoot
+     OUTPUT_STRIP_TRAILING_WHITESPACE
+   )
+-  string(FIND "${LLVM_INCLUDE_DIRS}" "${_llvmSourceRoot}" _llvmIsInstalled)
+-  if (NOT _llvmIsInstalled)
++  if(NOT "${_llvmSourceRoot}" IN_LIST LLVM_INCLUDE_DIRS)
+     list(APPEND LLVM_INCLUDE_DIRS "${LLVM_INSTALL_PREFIX}/include")
+   endif()
+ endif()
+-- 
+2.47.0
+

diff --git a/dev-util/clazy/files/clazy-1.12-LIBRARY_DIRS.patch 
b/dev-util/clazy/files/clazy-1.12-LIBRARY_DIRS.patch
new file mode 100644
index 000000000000..44d59ce9c3f9
--- /dev/null
+++ b/dev-util/clazy/files/clazy-1.12-LIBRARY_DIRS.patch
@@ -0,0 +1,33 @@
+From d04f0203febdeac38c4b085babb1183747c2edfb Mon Sep 17 00:00:00 2001
+From: Paul Zander <[email protected]>
+Date: Sun, 10 Nov 2024 17:19:20 +0100
+Subject: do not inject lib dirs with installed llvm
+
+Including `${LLVM_INSTALL_PREFIX}/lib` in the `LINK_DIRECTORIES` only works,
+when lib is the correct LIBDIR for the current arch.
+Normally you would use `CMAKE_INSTALL_LIBDIR`, unless you know better.
+
+As a bonus we avoid duplicates.
+
+Signed-off-by: Paul Zander <[email protected]>
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4215e49..9f77fb3 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -106,7 +106,11 @@ include(ClazySources.cmake)
+ 
+ include_directories(${CMAKE_BINARY_DIR})
+ include_directories(${CLANG_INCLUDE_DIRS} ${CMAKE_CURRENT_LIST_DIR} 
${CMAKE_CURRENT_LIST_DIR}/src)
+-link_directories("${LLVM_INSTALL_PREFIX}/lib" ${LLVM_LIBRARY_DIRS})
++link_directories(${LLVM_LIBRARY_DIRS})
++
++if(NOT "${LLVM_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}" IN_LIST 
LLVM_LIBRARY_DIRS)
++  link_directories("${LLVM_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}")
++endif()
+ 
+ set(clang_tooling_refactoring_lib clangToolingRefactoring)
+ 
+-- 
+2.47.0
+

diff --git a/dev-util/clazy/files/clazy-1.12-standalone-install-location.patch 
b/dev-util/clazy/files/clazy-1.12-standalone-install-location.patch
new file mode 100644
index 000000000000..76ff787a1bea
--- /dev/null
+++ b/dev-util/clazy/files/clazy-1.12-standalone-install-location.patch
@@ -0,0 +1,50 @@
+From 3912afc2e9cec14299e9866014a709a55a07be2e Mon Sep 17 00:00:00 2001
+From: Paul Zander <[email protected]>
+Date: Sun, 10 Nov 2024 17:20:42 +0100
+Subject: Install clazy-standalone so relative path look-up works
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+fatal error: ‘stddef.h’ file not found, while using clazy-standalone Be sure 
the
+clazy-standalone binary is located in the same folder as the
+clang binary.
+
+Signed-off-by: Paul Zander <[email protected]>
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 9f77fb3..c67065e 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -199,6 +199,12 @@ endmacro()
+ 
+ set(SYMBOL_FILE Lazy.exports)
+ 
++execute_process(
++  COMMAND ${LLVM_CONFIG_EXECUTABLE} --bindir
++  OUTPUT_VARIABLE LLVM_BIN_DIR
++  OUTPUT_STRIP_TRAILING_WHITESPACE
++)
++
+ if (NOT CLAZY_BUILD_WITH_CLANG)
+   set(CLAZY_MINI_AST_DUMPER_SRCS src/MiniAstDumper.cpp)
+   add_clang_plugin(ClazyPlugin ${CLAZY_PLUGIN_SRCS} 
${CLAZY_MINI_AST_DUMPER_SRCS})
+@@ -315,9 +321,14 @@ else()
+ 
+   target_link_libraries(clazy-standalone clazyPlugin)
+ 
+-  install(TARGETS clazy-standalone DESTINATION bin PERMISSIONS OWNER_WRITE 
OWNER_EXECUTE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_READ WORLD_EXECUTE)
++  install(TARGETS clazy-standalone DESTINATION ${LLVM_BIN_DIR} PERMISSIONS 
OWNER_WRITE OWNER_EXECUTE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_READ 
WORLD_EXECUTE)
++
+ endif()
+ 
++set_target_properties(clazy-standalone PROPERTIES
++  RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${LLVM_BIN_DIR}"
++)
++
+ function(to_raw_string_literal input_string output_string)
+     if (MSVC)
+         # Work around "C2026: string too big, trailing characters truncated"
+-- 
+2.47.0
+

Reply via email to