> 2024-09-21 Bruno Haible <[email protected]>
>
> getopt-posix, crypto/md5-buffer: Fix __GNUC_PREREQ re clang.
This change causes a compilation error on Solaris 11 OmniOS in C++ mode:
g++ -DHAVE_CONFIG_H -DEXEEXT=\"\" -DEXEEXT=\"\" -I. -I../../gltests -I..
-DGNULIB_STRICT_CHECKING=1 -DIN_GNULIB_TESTS=1 -I. -I../../gltests -I..
-I../../gltests/.. -I../gllib -I../../gltests/../gllib -I/root/include -Wall
-DCONTINUE_AFTER_ASSERT -D_REENTRANT -Wno-error -g -O2 -MT test-list-c++.o -MD
-MP -MF $depbase.Tpo -c -o test-list-c++.o ../../gltests/test-list-c++.cc &&\
mv -f $depbase.Tpo $depbase.Po
In file included from ../gllib/unistd.h:714,
from ../gllib/stdlib.h:120,
from ../../gltests/../gllib/xalloc.h:29,
from ../../gltests/../gllib/gl_xlist.h:28,
from ../../gltests/../gllib/gl_list.hh:22,
from ../../gltests/test-list-c++.cc:20:
../config.h:7953:25: error: declaration of 'int rpl_getopt(int, char* const*,
const char*)' has a different exception specifier
7953 | #define __GETOPT_PREFIX rpl_
| ^~~~
../config.h:7953:25: note: from previous declaration 'int rpl_getopt(int, char*
const*, const char*) noexcept'
7953 | #define __GETOPT_PREFIX rpl_
| ^~~~
gmake[4]: *** [Makefile:27627: test-list-c++.o] Error 1
The cause is that stdio.h has a declaration of getopt(), which was not yet
seen when the '#define getopt rpl_getopt' took effect. This patch fixes it.
2024-09-23 Bruno Haible <[email protected]>
getopt-posix: Fix compilation error in C++ mode (regression 2024-09-21).
* lib/getopt-pfx-core.h: On AIX, HP-UX, Solaris, QNX, include <stdio.h>
first.
diff --git a/lib/getopt-pfx-core.h b/lib/getopt-pfx-core.h
index 78b7816aa4..df2cb183a5 100644
--- a/lib/getopt-pfx-core.h
+++ b/lib/getopt-pfx-core.h
@@ -31,6 +31,13 @@
functions and variables. Renaming avoids problems with some
compilers and linkers. */
#ifdef __GETOPT_PREFIX
+
+/* Include platform-dependent header files that may declare getopt() and
+ friends. */
+# if defined _AIX || defined __hpux || defined __sun || defined __QNX__
+# include <stdio.h>
+# endif
+
# ifndef __GETOPT_ID
# define __GETOPT_CONCAT(x, y) x ## y
# define __GETOPT_XCONCAT(x, y) __GETOPT_CONCAT (x, y)