commit: 49c8c7afd9b25b0dde8051d9bbbe62f5ff510ae7
Author: Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
AuthorDate: Sun Oct 12 21:34:57 2025 +0000
Commit: Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
CommitDate: Thu Oct 16 19:14:24 2025 +0000
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=49c8c7af
cmake.eclass: List CMake files being warned about future compat removal
- _cmake_minreqver-check():
New _CMAKE_MINREQVER_CMAKE310 array contains a list of <file>:<version>
tuples with cmake_minimum_required version below 3.10, on top of those
that weren't already saved in _CMAKE_MINREQVER_CMAKE305.
- _cmake_minreqver-info():
Future CMake <3.10 compat removal is prefixed as "QA Notice" *only* if the
preceding CMake <3.5 QA Notice didn't strike already. This is done to avoid
spamming the bug tracker twice per package about outdated minimum versions.
Signed-off-by: Andreas Sturmlechner <asturm <AT> gentoo.org>
eclass/cmake.eclass | 81 ++++++++++++++++++++++++++++++++++++++++++++---------
1 file changed, 68 insertions(+), 13 deletions(-)
diff --git a/eclass/cmake.eclass b/eclass/cmake.eclass
index 91928b65b974..3535a95da4aa 100644
--- a/eclass/cmake.eclass
+++ b/eclass/cmake.eclass
@@ -132,6 +132,15 @@ fi
# version lower than 3.5.
_CMAKE_MINREQVER_CMAKE305=()
+# @ECLASS_VARIABLE: _CMAKE_MINREQVER_CMAKE310
+# @DEFAULT_UNSET
+# @DESCRIPTION:
+# Internal array containing <file>:<version> tuples detected by
+# _cmake_minreqver-check() for any CMakeLists.txt with cmake_minimum_required
+# version lower than 3.10 (causes CMake warnings as of 4.0) on top of those
+# already added to _CMAKE_MINREQVER_CMAKE305.
+_CMAKE_MINREQVER_CMAKE310=()
+
# @ECLASS_VARIABLE: CMAKE_QA_SRC_DIR_READONLY
# @USER_VARIABLE
# @DEFAULT_UNSET
@@ -363,6 +372,11 @@ _cmake_minreqver-check() {
_CMAKE_MINREQVER_CMAKE305+=( "${file}":"${ver}" )
chk=0
fi
+ # we don't want duplicates that were already flagged
+ if [[ $chk != 0 ]] && ver_test "${ver}" -lt "3.10"; then
+ _CMAKE_MINREQVER_CMAKE310+=( "${file}":"${ver}" )
+ chk=0
+ fi
fi
return ${chk}
}
@@ -370,21 +384,62 @@ _cmake_minreqver-check() {
# @FUNCTION: _cmake_minreqver-info
# @INTERNAL
# @DESCRIPTION:
-# QA Notice and file listing for any CMakeLists.txt file unsupported w/
CMake-4.
+# QA Notice and file listings for any CMakeLists.txt file not meeting various
+# minimum standards for cmake_minimum_required.
_cmake_minreqver-info() {
- local info
- if [[ -n ${_CMAKE_MINREQVER_CMAKE305[@]} ]]; then
- eqawarn "QA Notice: Compatibility with CMake < 3.5 has been
removed from CMake 4,"
- eqawarn "${CATEGORY}/${PN} will fail to build w/o a fix."
- eqawarn "See also tracker bug #951350; check existing bug or
file a new one for"
- eqawarn "this package, and take it upstream."
- eqawarn
- eqawarn "The following CMakeLists.txt files are causing errors:"
- for info in ${_CMAKE_MINREQVER_CMAKE305[*]}; do
- eqawarn " ${info}"
- done
+ local warnlvl
+ [[ -n ${_CMAKE_MINREQVER_CMAKE305[@]} ]] && warnlvl=305
+ [[ -n ${_CMAKE_MINREQVER_CMAKE310[@]} ]] || [[ ${warnlvl} ]] &&
warnlvl=310
+
+ local weak_qaw="QA Notice: "
+ minreqver_qanotice() {
+ case ${1} in
+ 305)
+ eqawarn "${weak_qaw}Compatibility with CMake <
3.5 has been removed from CMake 4,"
+ eqawarn "${CATEGORY}/${PN} will fail to build
w/o a fix."
+ eqawarn "See also tracker bug #951350; check
existing bug or file a new one for"
+ eqawarn "this package, and take it upstream."
+ ;;
+ 310)
+ eqawarn "${weak_qaw}Compatibility with CMake <
3.10 will be removed in a future release."
+ eqawarn "If not fixed in upstream's code
repository, we should make sure they are aware."
+ eqawarn "See also tracker bug #964405; check
existing or file a new bug for this package."
+ ;;
+ esac
eqawarn
- if has_version -b ">=dev-build/cmake-4"; then
+ weak_qaw="" # weak notice: no "QA Notice" starting with second
call
+ }
+
+ minreqver_listing() {
+ local info
+ case ${1} in
+ 305)
+ eqawarn "The following CMakeLists.txt files are
causing errors:"
+ for info in ${_CMAKE_MINREQVER_CMAKE305[*]}; do
eqawarn " ${info}"; done
+ eqawarn
+ ;;
+ 310)
+ if [[ -n ${_CMAKE_MINREQVER_CMAKE310[@]} ]];
then
+ eqawarn "The following CMakeLists.txt
files are causing warnings:"
+ for info in
${_CMAKE_MINREQVER_CMAKE310[*]}; do eqawarn " ${info}"; done
+ eqawarn
+ fi
+ ;;
+ esac
+ }
+
+ # CMake 4-caused error is highest priority and must always be shown
+ if [[ -n ${_CMAKE_MINREQVER_CMAKE305[@]} ]]; then
+ minreqver_qanotice 305
+ minreqver_listing 305
+ fi
+ # for warnings, we only want the latest relevant one, but list all
flagged files
+ if [[ ${warnlvl} -ge 310 ]]; then
+ minreqver_qanotice ${warnlvl}
+ minreqver_listing 310
+ fi
+ if [[ ${warnlvl} ]]; then
+ if [[ -n ${_CMAKE_MINREQVER_CMAKE305[@]} ]] && has_version -b
">=dev-build/cmake-4"; then
eqawarn "CMake 4 detected; building with
-DCMAKE_POLICY_VERSION_MINIMUM=3.5"
eqawarn "This is merely a workaround to avoid CMake
Error and *not* a permanent fix;"
eqawarn "there may be new build or runtime bugs as a
result."