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 <[email protected]>
> > ---
> > 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
