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

Attachment: signature.asc
Description: PGP signature

Reply via email to