> diff --git a/lib/getopt-cdefs.in.h b/lib/getopt-cdefs.in.h
> index a1d304d49e..95f06045f5 100644
> --- a/lib/getopt-cdefs.in.h
> +++ b/lib/getopt-cdefs.in.h
> @@ -47,7 +47,7 @@
>  #endif
>  
>  #ifndef __GNUC_PREREQ
> -# if defined __GNUC__ && defined __GNUC_VERSION__
> +# if defined __GNUC__ && defined __GNUC_MINOR__
>  # define __GNUC_PREREQ(maj, min) \
>          ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
>  # else
> 

What this patch did not fix, is:
  - Misindentation.
  - It does not work with masquerading clang, cf.
    <https://lists.gnu.org/archive/html/bug-gnulib/2024-08/msg00157.html>

I'm therefore committing this:


2024-09-21  Bruno Haible  <br...@clisp.org>

        getopt-posix, crypto/md5-buffer: Fix __GNUC_PREREQ re clang.
        * lib/getopt-cdefs.in.h (__GNUC_PREREQ): Copy definition from
        lib/libc-config.h.
        * lib/md5.h (__GNUC_PREREQ): Likewise.

diff --git a/lib/getopt-cdefs.in.h b/lib/getopt-cdefs.in.h
index 95f06045f5..9d704a9f6e 100644
--- a/lib/getopt-cdefs.in.h
+++ b/lib/getopt-cdefs.in.h
@@ -46,10 +46,14 @@
 # endif
 #endif
 
+#if defined __clang__
+  /* clang really only groks GNU C 4.2, regardless of its value of __GNUC__.  
*/
+# undef __GNUC_PREREQ
+# define __GNUC_PREREQ(maj, min) ((maj) < 4 + ((min) <= 2))
+#endif
 #ifndef __GNUC_PREREQ
 # if defined __GNUC__ && defined __GNUC_MINOR__
-# define __GNUC_PREREQ(maj, min) \
-        ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
+#  define __GNUC_PREREQ(maj, min) ((maj) < __GNUC__ + ((min) <= 
__GNUC_MINOR__))
 # else
 #  define __GNUC_PREREQ(maj, min) 0
 # endif
diff --git a/lib/md5.h b/lib/md5.h
index 2f470703f5..94cc6994cc 100644
--- a/lib/md5.h
+++ b/lib/md5.h
@@ -52,10 +52,14 @@
 #define MD5_DIGEST_SIZE 16
 #define MD5_BLOCK_SIZE 64
 
+#if defined __clang__
+  /* clang really only groks GNU C 4.2, regardless of its value of __GNUC__.  
*/
+# undef __GNUC_PREREQ
+# define __GNUC_PREREQ(maj, min) ((maj) < 4 + ((min) <= 2))
+#endif
 #ifndef __GNUC_PREREQ
 # if defined __GNUC__ && defined __GNUC_MINOR__
-#  define __GNUC_PREREQ(maj, min)                                       \
-  ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
+#  define __GNUC_PREREQ(maj, min) ((maj) < __GNUC__ + ((min) <= 
__GNUC_MINOR__))
 # else
 #  define __GNUC_PREREQ(maj, min) 0
 # endif




Reply via email to