We need to ramp up detection of unsupported CMake build systems with CMake 4. This will detect CMakeLists.txt files setting insufficient cmake_minimum_required VERSION level even in project subdirectories, putting out appropriate eqawarn message about the need to fix ${PN}.
That makes us not rely on tinderbox runs w/ unmasked cmake-4 slowly being able to build everything up to leaf packages, and also helps detect insufficient subproject minimums that could otherwise be masked by USE flag choice. Bug: https://bugs.gentoo.org/951350 Signed-off-by: Andreas Sturmlechner <ast...@gentoo.org> --- eclass/cmake.eclass | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/eclass/cmake.eclass b/eclass/cmake.eclass index 083b566d26..8a3f2db7c4 100644 --- a/eclass/cmake.eclass +++ b/eclass/cmake.eclass @@ -243,6 +243,25 @@ _cmake_modify-cmakelists() { # Only edit the files once grep -qs "<<< Gentoo configuration >>>" "${CMAKE_USE_DIR}"/CMakeLists.txt && return 0 + local x re="VERSION( .*\.\.\.| )(([[:digit:]]+)\.([[:digit:]]+))" + local ver isold + for x in $(find "${CMAKE_USE_DIR}" -type f -iname "CMakeLists.txt" -exec \ + grep -li "cmake_minimum_required\s*(.*)" {} \;); do + + [[ $(grep -hi "cmake_minimum_required" $x) =~ $re ]] + ver="${BASH_REMATCH[2]}" + + if ver_test $ver -lt "3.5"; then + isold=true + fi + done + if [[ ${isold} ]]; 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." + fi + # Comment out all set (<some_should_be_user_defined_variable> value) find "${CMAKE_USE_DIR}" -name CMakeLists.txt -exec sed \ -e '/^[[:space:]]*set[[:space:]]*([[:space:]]*CMAKE_BUILD_TYPE\([[:space:]].*)\|)\)/I{s/^/#_cmake_modify_IGNORE /g}' \ @@ -250,7 +269,6 @@ _cmake_modify-cmakelists() { -e '/^[[:space:]]*set[[:space:]]*([[:space:]]*CMAKE_INSTALL_PREFIX[[:space:]].*)/I{s/^/#_cmake_modify_IGNORE /g}' \ -e '/^[[:space:]]*set[[:space:]]*([[:space:]]*CMAKE_VERBOSE_MAKEFILE[[:space:]].*)/I{s/^/#_cmake_modify_IGNORE /g}' \ -i {} + || die "${LINENO}: failed to disable hardcoded settings" - local x for x in $(find "${CMAKE_USE_DIR}" -name CMakeLists.txt -exec grep -l "^#_cmake_modify_IGNORE" {} +;); do einfo "Hardcoded definition(s) removed in $(echo "${x}" | cut -c $((${#CMAKE_USE_DIR}+2))-):" einfo "$(grep -se '^#_cmake_modify_IGNORE' ${x} | cut -c 22-99)" -- 2.49.0
signature.asc
Description: This is a digitally signed message part.