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