Problem reported by Harald Maier (Bug#26398).
The macOS C compiler uses __nonnull for its own purposes and that
clashes with glibc's __nonnull.
* lib/getopt.in.h: Add comment for _GL_ARG_NONNULL snippet.
* lib/getopt_cdefs.in.h (__nonnull): Remove.
* lib/getopt_core.h (getopt):
* lib/getopt_ext.h (getopt_long, getopt_long_only):
Use _GL_ARG_NONNULL, not __nonnull.
* lib/unistd.in.h: Move snippet hooks to before where the getopt
.h files are included, so that _GL_ARG_NONNULL is defined in time.
* modules/getopt-posix (Depends-on): Add snippet/arg-nonnull.
(getopt.h): Interpolate _GL_ARG_NONNULL snippet.
+2017-04-08 Paul Eggert <eggert@cs.ucla.edu>
+
+ getopt: port recent getopt changes to macOS
+ Problem reported by Harald Maier (Bug#26398).
+ The macOS C compiler uses __nonnull for its own purposes and that
+ clashes with glibc's __nonnull.
+ * lib/getopt.in.h: Add comment for _GL_ARG_NONNULL snippet.
+ * lib/getopt_cdefs.in.h (__nonnull): Remove.
+ * lib/getopt_core.h (getopt):
+ * lib/getopt_ext.h (getopt_long, getopt_long_only):
+ Use _GL_ARG_NONNULL, not __nonnull.
+ * lib/unistd.in.h: Move snippet hooks to before where the getopt
+ .h files are included, so that _GL_ARG_NONNULL is defined in time.
+ * modules/getopt-posix (Depends-on): Add snippet/arg-nonnull.
+ (getopt.h): Interpolate _GL_ARG_NONNULL snippet.
+
2017-04-06 Paul Eggert <eggert@cs.ucla.edu>
getopt-gnu: omit some duplicate code
# endif
#endif
+/* The definition of _GL_ARG_NONNULL is copied here. */
+
#include <getopt_cdefs.h>
#include <getopt_pfx_core.h>
#include <getopt_pfx_ext.h>
# endif
#endif
-#ifndef __nonnull
-# if __GNUC_PREREQ (3,3)
-# define __nonnull(params) __attribute__ ((__nonnull__ params))
-# else
-# define __nonnull(params)
-# endif
-#endif
-
#endif /* getopt_cdefs.h */
writable. */
extern int getopt (int ___argc, char *const *___argv, const char *__shortopts)
- __THROW __nonnull ((2, 3));
+ __THROW _GL_ARG_NONNULL ((2, 3));
__END_DECLS
extern int getopt_long (int ___argc, char *__getopt_argv_const *___argv,
const char *__shortopts,
const struct option *__longopts, int *__longind)
- __THROW __nonnull ((2, 3));
+ __THROW _GL_ARG_NONNULL ((2, 3));
extern int getopt_long_only (int ___argc, char *__getopt_argv_const *___argv,
const char *__shortopts,
const struct option *__longopts, int *__longind)
- __THROW __nonnull ((2, 3));
+ __THROW _GL_ARG_NONNULL ((2, 3));
__END_DECLS
# include <sys/types.h>
#endif
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
+
+/* The definition of _GL_ARG_NONNULL is copied here. */
+
+/* The definition of _GL_WARN_ON_USE is copied here. */
+
+
/* Get getopt(), optarg, optind, opterr, optopt.
But avoid namespace pollution on glibc systems. */
#if @GNULIB_UNISTD_H_GETOPT@ && !defined __GLIBC__ && !defined _GL_SYSTEM_GETOPT
# define _GL_UNISTD_INLINE _GL_INLINE
#endif
-/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
-
-/* The definition of _GL_ARG_NONNULL is copied here. */
-
-/* The definition of _GL_WARN_ON_USE is copied here. */
-
-
/* Hide some function declarations from <winsock2.h>. */
#if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@
extensions
include_next
gettext-h [test $REPLACE_GETOPT = 1]
+snippet/arg-nonnull
configure.ac:
gl_FUNC_GETOPT_POSIX
-e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-e 's|@''NEXT_GETOPT_H''@|$(NEXT_GETOPT_H)|g' \
+ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
< $(srcdir)/getopt.in.h; \
} > $@-t && \
mv -f $@-t $@