mirror of
https://github.com/gentoo-mirror/gentoo.git
synced 2026-08-24 06:48:18 -07:00
dev-util/clazy: add 1.12 w/o KEYWORDS, enable py3.13, LLVM-18
Reason: 7% tests passed, 92 tests failed out of 99 Most of them fail with: cstddef:50:10: fatal error: 'stddef.h' file not found Bug: https://bugs.gentoo.org/811723 Signed-off-by: Andreas Sturmlechner <asturm@gentoo.org>
This commit is contained in:
@@ -1 +1,2 @@
|
||||
DIST clazy-1.11.tar.xz 404088 BLAKE2B 1a69fe07ef81a0efe3c9db9129083247d60943592967f705d62d3859039cec250673eecc06184f70d134cbab85708d957b0a085beff8b3e46325a69547e005b7 SHA512 6a7c162392dd30aea29669275cea814d6daccf7931b8cdb20997f9bbff5619832d5461a6d0f854ecbc4726e52b6937c4f9cb8651087ffe73676c04239a38ca2b
|
||||
DIST clazy-1.12.tar.xz 427740 BLAKE2B ad2c78a506132b5fd6b3c22a7e9794c38ddd71242cde6f760e48d0250f6215629007d45303f4b35fdc7717865b8221ab1c2f3c6889a44ea1809e112845f16463 SHA512 7a2b4a753098f15936a4731c82c660c1cd4d81949279435e87f00f7f72bef3e32cb574c8991c0707798581278e9fbcae34d354c1e6b77a15a5e26166d658fa9e
|
||||
|
||||
57
dev-util/clazy/clazy-1.12.ebuild
Normal file
57
dev-util/clazy/clazy-1.12.ebuild
Normal file
@@ -0,0 +1,57 @@
|
||||
# Copyright 1999-2024 Gentoo Authors
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI=8
|
||||
|
||||
LLVM_COMPAT=( 15 16 17 18 )
|
||||
PYTHON_COMPAT=( python3_{10..13} )
|
||||
inherit cmake llvm-r1 python-any-r1
|
||||
|
||||
DESCRIPTION="Compiler plugin which allows clang to understand Qt semantics"
|
||||
HOMEPAGE="https://apps.kde.org/clazy"
|
||||
SRC_URI="mirror://kde/stable/${PN}/${PV}/src/${P}.tar.xz"
|
||||
|
||||
LICENSE="LGPL-2+"
|
||||
SLOT="0"
|
||||
# KEYWORDS="~amd64 ~arm64 ~x86"
|
||||
IUSE="test"
|
||||
RESTRICT="!test? ( test )"
|
||||
|
||||
RDEPEND="
|
||||
$(llvm_gen_dep 'sys-devel/clang:${LLVM_SLOT}')
|
||||
$(llvm_gen_dep 'sys-devel/llvm:${LLVM_SLOT}')
|
||||
"
|
||||
DEPEND="${RDEPEND}"
|
||||
BDEPEND="test? ( ${PYTHON_DEPS} )"
|
||||
|
||||
PATCHES=(
|
||||
# git master
|
||||
"${FILESDIR}"/${P}-fix-tests-Qt-detect-{1,2}.patch
|
||||
"${FILESDIR}"/${P}-llvm-18.patch
|
||||
# Pending: https://invent.kde.org/sdk/clazy/-/merge_requests/131
|
||||
"${FILESDIR}"/${P}-clang-16-no-src-root.patch
|
||||
)
|
||||
|
||||
pkg_setup() {
|
||||
use test && python-any-r1_pkg_setup
|
||||
llvm-r1_pkg_setup
|
||||
}
|
||||
|
||||
src_prepare() {
|
||||
cmake_src_prepare
|
||||
|
||||
sed -e '/install(FILES README.md COPYING-LGPL2.txt checks.json DESTINATION/d' \
|
||||
-i CMakeLists.txt || die
|
||||
}
|
||||
|
||||
src_configure() {
|
||||
export LLVM_ROOT="$(get_llvm_prefix -d)"
|
||||
|
||||
cmake_src_configure
|
||||
}
|
||||
|
||||
src_test() {
|
||||
# Run tests against built copy, not installed
|
||||
# bug #811723
|
||||
PATH="${BUILD_DIR}/bin:${PATH}" LD_LIBRARY_PATH="${BUILD_DIR}/lib" cmake_src_test
|
||||
}
|
||||
60
dev-util/clazy/files/clazy-1.12-clang-16-no-src-root.patch
Normal file
60
dev-util/clazy/files/clazy-1.12-clang-16-no-src-root.patch
Normal file
@@ -0,0 +1,60 @@
|
||||
From 4fa1ded456626f9c13f1f77212754d6349d12a8a Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Christoph=20Gr=C3=BCninger?= <foss@grueninger.de>
|
||||
Date: Tue, 27 Feb 2024 21:14:19 +0100
|
||||
Subject: [PATCH] [cmake] Adjust for non-installed LLVM
|
||||
|
||||
In LLVM 16 llvm-config got --src-root removed.
|
||||
Adjust include path for Clang include
|
||||
---
|
||||
cmake/FindClang.cmake | 8 ++++++--
|
||||
cmake/FindLLVM.cmake | 6 +++++-
|
||||
2 files changed, 11 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/cmake/FindClang.cmake b/cmake/FindClang.cmake
|
||||
index e438ea5c..b4f0b0a1 100644
|
||||
--- a/cmake/FindClang.cmake
|
||||
+++ b/cmake/FindClang.cmake
|
||||
@@ -86,8 +86,12 @@ if(CLANG_FOUND)
|
||||
set(CLANG_INCLUDE_DIRS ${LLVM_INCLUDE_DIRS})
|
||||
|
||||
# check whether llvm-config comes from an install prefix
|
||||
+ set(LLVM_CONFIG_INCLUDE_FLAG "--src-root")
|
||||
+ if (${LLVM_VERSION} VERSION_GREATER_EQUAL 16)
|
||||
+ set(LLVM_CONFIG_INCLUDE_FLAG "--includedir")
|
||||
+ endif()
|
||||
execute_process(
|
||||
- COMMAND ${LLVM_CONFIG_EXECUTABLE} --src-root
|
||||
+ COMMAND ${LLVM_CONFIG_EXECUTABLE} ${LLVM_CONFIG_INCLUDE_FLAG}
|
||||
OUTPUT_VARIABLE _llvmSourceRoot
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
@@ -96,7 +100,7 @@ if(CLANG_FOUND)
|
||||
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
|
||||
- "${_llvmSourceRoot}/tools/clang/include" # source dir
|
||||
+ "${_llvmSourceRoot}/../../clang/include" # source dir
|
||||
)
|
||||
endif()
|
||||
|
||||
diff --git a/cmake/FindLLVM.cmake b/cmake/FindLLVM.cmake
|
||||
index da02e006..c625eeb5 100644
|
||||
--- a/cmake/FindLLVM.cmake
|
||||
+++ b/cmake/FindLLVM.cmake
|
||||
@@ -131,8 +131,12 @@ if (LLVM_FOUND)
|
||||
endif()
|
||||
|
||||
# potentially add include dir from binary dir for non-installed LLVM
|
||||
+ set(LLVM_CONFIG_INCLUDE_FLAG "--src-root")
|
||||
+ if (${LLVM_VERSION} VERSION_GREATER_EQUAL 16)
|
||||
+ set(LLVM_CONFIG_INCLUDE_FLAG "--includedir")
|
||||
+ endif()
|
||||
execute_process(
|
||||
- COMMAND ${LLVM_CONFIG_EXECUTABLE} --src-root
|
||||
+ COMMAND ${LLVM_CONFIG_EXECUTABLE} ${LLVM_CONFIG_INCLUDE_FLAG}
|
||||
OUTPUT_VARIABLE _llvmSourceRoot
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
--
|
||||
GitLab
|
||||
|
||||
78
dev-util/clazy/files/clazy-1.12-fix-tests-Qt-detect-1.patch
Normal file
78
dev-util/clazy/files/clazy-1.12-fix-tests-Qt-detect-1.patch
Normal file
@@ -0,0 +1,78 @@
|
||||
From 61b03a0d9cb319173766383216deee74fd6d800e Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Lohnau <alexander.lohnau@gmx.de>
|
||||
Date: Sat, 7 Sep 2024 11:31:22 +0200
|
||||
Subject: [PATCH] Make tests work when clang library is different from system
|
||||
default
|
||||
|
||||
If we have found the clang folder, we can resolve the executable from there.
|
||||
In my case, I was compiling against clang16, but my system default was clang 14.
|
||||
The stacktrace is really confusing and hard to understand. Using the
|
||||
absolute path makes the log also better to understand and to reproduce
|
||||
the test results.
|
||||
---
|
||||
ClazyTests.generated.cmake | 5 ++++-
|
||||
cmake/FindLLVM.cmake | 13 +++++++++++++
|
||||
dev-scripts/generate.py | 5 ++++-
|
||||
3 files changed, 21 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/ClazyTests.generated.cmake b/ClazyTests.generated.cmake
|
||||
index 204f0e5b..49b0f69e 100644
|
||||
--- a/ClazyTests.generated.cmake
|
||||
+++ b/ClazyTests.generated.cmake
|
||||
@@ -2,8 +2,11 @@
|
||||
|
||||
macro(add_clazy_test name)
|
||||
add_test(NAME ${name} COMMAND python3 run_tests.py ${name} --verbose WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/tests/)
|
||||
+ if (CLANG_EXECUTABLE_PATH)
|
||||
+ set(CLANG_CXX_TEST "CLANGXX=${CLANG_EXECUTABLE_PATH};")
|
||||
+ endif()
|
||||
set_property(TEST ${name} PROPERTY
|
||||
- ENVIRONMENT "CLAZYPLUGIN_CXX=$<TARGET_FILE:ClazyPlugin>;CLAZYSTANDALONE_CXX=$<TARGET_FILE:clazy-standalone>;$<$<BOOL:${HAS_STD_FILESYSTEM}>:CLAZY_HAS_FILESYSTEM=>"
|
||||
+ ENVIRONMENT "${CLANG_CXX_TEST}CLAZYPLUGIN_CXX=$<TARGET_FILE:ClazyPlugin>;CLAZYSTANDALONE_CXX=$<TARGET_FILE:clazy-standalone>;$<$<BOOL:${HAS_STD_FILESYSTEM}>:CLAZY_HAS_FILESYSTEM=>"
|
||||
)
|
||||
endmacro()
|
||||
|
||||
diff --git a/cmake/FindLLVM.cmake b/cmake/FindLLVM.cmake
|
||||
index a1fd9e3f..da02e006 100644
|
||||
--- a/cmake/FindLLVM.cmake
|
||||
+++ b/cmake/FindLLVM.cmake
|
||||
@@ -117,6 +117,19 @@ if (LLVM_FOUND)
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
|
||||
+ execute_process(
|
||||
+ COMMAND ${LLVM_CONFIG_EXECUTABLE} --bindir
|
||||
+ OUTPUT_VARIABLE LLVM_BIN_DIR
|
||||
+ OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
+ )
|
||||
+ set(CLANG_EXECUTABLE_PATH "${LLVM_BIN_DIR}/clang")
|
||||
+ if(EXISTS ${CLANG_EXECUTABLE_PATH})
|
||||
+ message(STATUS "Clang found: ${CLANG_EXECUTABLE_PATH}")
|
||||
+ set(CLANG_EXECUTABLE ${CLANG_EXECUTABLE_PATH})
|
||||
+ else()
|
||||
+ message(WARNING "Clang not found in LLVM bin directory: ${LLVM_BIN_DIR}")
|
||||
+ endif()
|
||||
+
|
||||
# potentially add include dir from binary dir for non-installed LLVM
|
||||
execute_process(
|
||||
COMMAND ${LLVM_CONFIG_EXECUTABLE} --src-root
|
||||
diff --git a/dev-scripts/generate.py b/dev-scripts/generate.py
|
||||
index 2678aaba..11fc5bfc 100755
|
||||
--- a/dev-scripts/generate.py
|
||||
+++ b/dev-scripts/generate.py
|
||||
@@ -468,8 +468,11 @@ def generate_ctest(checks):
|
||||
contents = """# This file was autogenerated by running: ./dev-scripts/generate.py --generate\n
|
||||
macro(add_clazy_test name)
|
||||
add_test(NAME ${name} COMMAND python3 run_tests.py ${name} --verbose WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/tests/)
|
||||
+ if (CLANG_EXECUTABLE_PATH)
|
||||
+ set(CLANG_CXX_TEST "CLANGXX=${CLANG_EXECUTABLE_PATH};")
|
||||
+ endif()
|
||||
set_property(TEST ${name} PROPERTY
|
||||
- ENVIRONMENT "CLAZYPLUGIN_CXX=$<TARGET_FILE:ClazyPlugin>;CLAZYSTANDALONE_CXX=$<TARGET_FILE:clazy-standalone>;$<$<BOOL:${HAS_STD_FILESYSTEM}>:CLAZY_HAS_FILESYSTEM=>"
|
||||
+ ENVIRONMENT "${CLANG_CXX_TEST}CLAZYPLUGIN_CXX=$<TARGET_FILE:ClazyPlugin>;CLAZYSTANDALONE_CXX=$<TARGET_FILE:clazy-standalone>;$<$<BOOL:${HAS_STD_FILESYSTEM}>:CLAZY_HAS_FILESYSTEM=>"
|
||||
)
|
||||
endmacro()\n
|
||||
"""
|
||||
--
|
||||
GitLab
|
||||
|
||||
115
dev-util/clazy/files/clazy-1.12-fix-tests-Qt-detect-2.patch
Normal file
115
dev-util/clazy/files/clazy-1.12-fix-tests-Qt-detect-2.patch
Normal file
@@ -0,0 +1,115 @@
|
||||
From fc058479b1d0ab8498b23a68dcbb56be1b38c793 Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Lohnau <alexander.lohnau@gmx.de>
|
||||
Date: Sat, 7 Sep 2024 14:25:45 +0200
|
||||
Subject: [PATCH] Only look for Qt5/Qt6 installs if respective CI job is
|
||||
running
|
||||
|
||||
We may have a qt6 installation even on a Qt5 image
|
||||
|
||||
But in any case, we should only run them on the dedicated im age and not waste CI time otherwise
|
||||
---
|
||||
ClazyTests.generated.cmake | 8 +++++++-
|
||||
dev-scripts/generate.py | 8 +++++++-
|
||||
tests/run_tests.py | 22 ++++++++++++++--------
|
||||
3 files changed, 28 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/ClazyTests.generated.cmake b/ClazyTests.generated.cmake
|
||||
index 49b0f69e..9babc7c5 100644
|
||||
--- a/ClazyTests.generated.cmake
|
||||
+++ b/ClazyTests.generated.cmake
|
||||
@@ -1,7 +1,13 @@
|
||||
# This file was autogenerated by running: ./dev-scripts/generate.py --generate
|
||||
|
||||
+if ($ENV{CI_JOB_NAME_SLUG} MATCHES "qt5")
|
||||
+ set(TEST_VERSION_OPTION "--qt-versions=5")
|
||||
+elseif($ENV{CI_JOB_NAME_SLUG} MATCHES "qt6")
|
||||
+ set(TEST_VERSION_OPTION "--qt-versions=6")
|
||||
+endif()
|
||||
+
|
||||
macro(add_clazy_test name)
|
||||
- add_test(NAME ${name} COMMAND python3 run_tests.py ${name} --verbose WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/tests/)
|
||||
+ add_test(NAME ${name} COMMAND python3 run_tests.py ${name} --verbose ${TEST_VERSION_OPTION} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/tests/)
|
||||
if (CLANG_EXECUTABLE_PATH)
|
||||
set(CLANG_CXX_TEST "CLANGXX=${CLANG_EXECUTABLE_PATH};")
|
||||
endif()
|
||||
diff --git a/dev-scripts/generate.py b/dev-scripts/generate.py
|
||||
index 11fc5bfc..a1233698 100755
|
||||
--- a/dev-scripts/generate.py
|
||||
+++ b/dev-scripts/generate.py
|
||||
@@ -466,8 +466,14 @@ def generate_ctest(checks):
|
||||
filename = clazy_source_path() + 'ClazyTests.generated.cmake'
|
||||
|
||||
contents = """# This file was autogenerated by running: ./dev-scripts/generate.py --generate\n
|
||||
+if ($ENV{CI_JOB_NAME_SLUG} MATCHES "qt5")
|
||||
+ set(TEST_VERSION_OPTION "--qt-versions=5")
|
||||
+elseif($ENV{CI_JOB_NAME_SLUG} MATCHES "qt6")
|
||||
+ set(TEST_VERSION_OPTION "--qt-versions=6")
|
||||
+endif()
|
||||
+
|
||||
macro(add_clazy_test name)
|
||||
- add_test(NAME ${name} COMMAND python3 run_tests.py ${name} --verbose WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/tests/)
|
||||
+ add_test(NAME ${name} COMMAND python3 run_tests.py ${name} --verbose ${TEST_VERSION_OPTION} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/tests/)
|
||||
if (CLANG_EXECUTABLE_PATH)
|
||||
set(CLANG_CXX_TEST "CLANGXX=${CLANG_EXECUTABLE_PATH};")
|
||||
endif()
|
||||
diff --git a/tests/run_tests.py b/tests/run_tests.py
|
||||
index 9fb9d5dc..da54e45a 100755
|
||||
--- a/tests/run_tests.py
|
||||
+++ b/tests/run_tests.py
|
||||
@@ -457,6 +457,8 @@ parser.add_argument("--only-standalone", action='store_true',
|
||||
help='Only run clazy-standalone')
|
||||
parser.add_argument("--dump-ast", action='store_true',
|
||||
help='Dump a unit-test AST to file')
|
||||
+parser.add_argument("--qt-versions", type=int, choices=[5, 6], nargs='+', default=[5, 6],
|
||||
+ help='Specify one or more Qt versions to use (default: 5 and 6)')
|
||||
parser.add_argument(
|
||||
"--exclude", help='Comma separated list of checks to ignore')
|
||||
parser.add_argument("-j", "--jobs", type=int, default=multiprocessing.cpu_count(),
|
||||
@@ -481,10 +483,14 @@ _only_standalone = args.only_standalone
|
||||
_num_threads = args.jobs
|
||||
_lock = threading.Lock()
|
||||
_was_successful = True
|
||||
-_qt6_installation = find_qt_installation(
|
||||
- 6, ["QT_SELECT=6 qmake", "qmake-qt6", "qmake", "qmake6"])
|
||||
-_qt5_installation = find_qt_installation(
|
||||
- 5, ["QT_SELECT=5 qmake", "qmake-qt5", "qmake", "qmake5"])
|
||||
+if 6 in args.qt_versions:
|
||||
+ _qt6_installation = find_qt_installation(6, ["QT_SELECT=6 qmake", "qmake-qt6", "qmake", "qmake6"])
|
||||
+else:
|
||||
+ _qt6_installation = None
|
||||
+if 5 in args.qt_versions:
|
||||
+ _qt5_installation = find_qt_installation(5, ["QT_SELECT=5 qmake", "qmake-qt5", "qmake", "qmake5"])
|
||||
+else:
|
||||
+ _qt5_installation = None
|
||||
_excluded_checks = args.exclude.split(',') if args.exclude is not None else []
|
||||
|
||||
# -------------------------------------------------------------------------------
|
||||
@@ -697,6 +703,8 @@ def run_unit_test(test, is_standalone, cppStandard, qt_major_version):
|
||||
return True
|
||||
|
||||
qt = qt_installation(qt_major_version)
|
||||
+ if qt == None:
|
||||
+ return True # silently skip
|
||||
|
||||
if _verbose:
|
||||
print("Qt major versions required by the test: " + str(test.qt_major_versions))
|
||||
@@ -709,14 +717,12 @@ def run_unit_test(test, is_standalone, cppStandard, qt_major_version):
|
||||
|
||||
if qt.int_version < test.minimum_qt_version or qt.int_version > test.maximum_qt_version or CLANG_VERSION < test.minimum_clang_version:
|
||||
if (_verbose):
|
||||
- print("Skipping " + printableName +
|
||||
- " because required version is not available")
|
||||
+ print("Skipping " + printableName + " because required version is not available")
|
||||
return True
|
||||
|
||||
if test.requires_std_filesystem and not _hasStdFileSystem:
|
||||
if (_verbose):
|
||||
- print("Skipping " + printableName +
|
||||
- " because it requires std::filesystem")
|
||||
+ print("Skipping " + printableName + " because it requires std::filesystem")
|
||||
return True
|
||||
|
||||
if _platform in test.blacklist_platforms:
|
||||
--
|
||||
GitLab
|
||||
|
||||
36
dev-util/clazy/files/clazy-1.12-llvm-18.patch
Normal file
36
dev-util/clazy/files/clazy-1.12-llvm-18.patch
Normal file
@@ -0,0 +1,36 @@
|
||||
From 0d87de91457c3bf2338b997555694953d45e17a4 Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Lohnau <alexander.lohnau@gmx.de>
|
||||
Date: Tue, 10 Sep 2024 13:50:56 +0200
|
||||
Subject: [PATCH] rule-of-three: Fix destructor not being found and thus
|
||||
causing false positive
|
||||
|
||||
This works fine in clang 14, but apparently not in later versions
|
||||
|
||||
The false positive caused a CI failure in https://invent.kde.org/libraries/qca/-/merge_requests/116
|
||||
---
|
||||
src/checks/level2/rule-of-three.cpp | 9 ++++++++-
|
||||
1 file changed, 8 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/checks/level2/rule-of-three.cpp b/src/checks/level2/rule-of-three.cpp
|
||||
index 6996ee1e..f18ff999 100644
|
||||
--- a/src/checks/level2/rule-of-three.cpp
|
||||
+++ b/src/checks/level2/rule-of-three.cpp
|
||||
@@ -56,7 +56,14 @@ void RuleOfThree::VisitDecl(clang::Decl *decl)
|
||||
|
||||
CXXConstructorDecl *copyCtor = Utils::copyCtor(record);
|
||||
CXXMethodDecl *copyAssign = Utils::copyAssign(record);
|
||||
- CXXDestructorDecl *destructor = record->getDestructor();
|
||||
+ CXXDestructorDecl *destructor = nullptr;
|
||||
+ // Getting the destructor using record->getDestructor() does not work for later clang versions, e.g. clang 16
|
||||
+ for (auto *decl : record->decls()) {
|
||||
+ if (auto *destructorDecl = dyn_cast<CXXDestructorDecl>(decl)) {
|
||||
+ destructor = destructorDecl;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
const bool dtorDefaultedByUser = destructor && destructor->isDefaulted() && !destructor->isImplicit();
|
||||
|
||||
const bool hasUserCopyCtor = copyCtor && copyCtor->isUserProvided();
|
||||
--
|
||||
GitLab
|
||||
|
||||
Reference in New Issue
Block a user