On Mon, 2025-05-19 at 20:44 +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 | 19 +++++++++++++++++++
>  1 file changed, 19 insertions(+)
> 
> diff --git a/eclass/cmake.eclass b/eclass/cmake.eclass
> index 083b566d26..ca6c03f335 100644
> --- a/eclass/cmake.eclass
> +++ b/eclass/cmake.eclass
> @@ -362,6 +362,18 @@ cmake_src_configure() {
>       # Fix xdg collision with sandbox
>       xdg_environment_reset
>  
> +     local file re="cmake_minimum_required *\( *VERSION( .*\.\.\.| 
> )(([[:digit:]]+)\.([[:digit:]]+))"
> +     local ver cmreq_isold
> +     while read -d '' -r file ; do
> +             [[ $(grep -hi "cmake_minimum_required" "$file") =~ $re ]]
> +             ver="${BASH_REMATCH[2]}"

So... you're using grep to find a line containing
"cmake_minimum_required", then applying another regexp to that line? 
This really looks like a case for a single sed call.

> +             echo $file $ver

Is this leftover debug?

> +
> +             if [[ -n $ver ]] && ver_test $ver -lt "3.5"; then
> +                     cmreq_isold=true
> +             fi
> +     done < <(find "${CMAKE_USE_DIR}" -type f -iname "CMakeLists.txt" 
> -print0)

|| die

> +
>       # Prepare Gentoo override rules (set valid compiler, append CPPFLAGS 
> etc.)
>       local build_rules=${BUILD_DIR}/gentoo_rules.cmake
>  
> @@ -543,6 +555,13 @@ cmake_src_configure() {
>               cmakeargs+=( -C "${CMAKE_EXTRA_CACHE_FILE}" )
>       fi
>  
> +     if [[ ${cmreq_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
> +
>       pushd "${BUILD_DIR}" > /dev/null || die
>       debug-print "${LINENO} ${ECLASS} ${FUNCNAME}: mycmakeargs is 
> ${mycmakeargs_local[*]}"
>       echo "${CMAKE_BINARY}" "${cmakeargs[@]}" "${CMAKE_USE_DIR}"

-- 
Best regards,
Michał Górny

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to