On Sat, May 17, 2025 at 04:42:30PM -0400, Ionen Wolkens wrote: > On Sat, May 17, 2025 at 10:04:16PM +0200, Andreas Sturmlechner wrote: > > 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 \ > > Just to note, may be rare so guess not a big deal but, while crawling > all sub-directories, it could pickup some extra CMakeLists.txt that are > entirely unused (by us) and don't need attention downstream. Some > packages keep a lot of weird unused stuff, or bits that we disable or > unbundle, e.g. qtwebengine adds BUILD.gn files for 3rdparty stuff but > the (unused) upstream CMakeLists.txt are often left there and I wouldn't > want a QA bug filed over that if any were bad. > > May be hard to get the real picture without just testing with cmake-4. > > That aside, there "could" be spaces in all the subdirs, I'd suggest > a `while IFS= read -r -d '' x; do [...] done < <(find [...] -print0) > loop instead, or mapfile. > > > + grep -li "cmake_minimum_required\s*(.*)" {} \;); do > > + > > + [[ $(grep -hi "cmake_minimum_required" $x) =~ $re ]]
Missing quotes on "$x" for spaces too. Haven't looked at that closely code-wise though, it'd be nicer to avoid doing grep twice. > > + 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 > > > > -- > ionen -- ionen
signature.asc
Description: PGP signature