From: Paul Eggert Date: Sun, 9 Apr 2017 00:26:03 +0000 (-0700) Subject: getopt: port recent getopt changes to macOS X-Git-Tag: v1.0~6284 X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=4172365d89eb1f404d43740dcbdb1aef599f8e14;p=gnulib.git 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. --- diff --git a/ChangeLog b/ChangeLog index db893f5e16..595f2ba43d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,19 @@ +2017-04-08 Paul Eggert + + 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 getopt-gnu: omit some duplicate code diff --git a/lib/getopt.in.h b/lib/getopt.in.h index c3ffd955d0..9f84c27752 100644 --- a/lib/getopt.in.h +++ b/lib/getopt.in.h @@ -52,6 +52,8 @@ # endif #endif +/* The definition of _GL_ARG_NONNULL is copied here. */ + #include #include #include diff --git a/lib/getopt_cdefs.in.h b/lib/getopt_cdefs.in.h index 35a266933a..54da28d1f2 100644 --- a/lib/getopt_cdefs.in.h +++ b/lib/getopt_cdefs.in.h @@ -64,12 +64,4 @@ # 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 */ diff --git a/lib/getopt_core.h b/lib/getopt_core.h index 1744c29b74..76ef46646c 100644 --- a/lib/getopt_core.h +++ b/lib/getopt_core.h @@ -89,7 +89,7 @@ extern int optopt; writable. */ extern int getopt (int ___argc, char *const *___argv, const char *__shortopts) - __THROW __nonnull ((2, 3)); + __THROW _GL_ARG_NONNULL ((2, 3)); __END_DECLS diff --git a/lib/getopt_ext.h b/lib/getopt_ext.h index c1a58da804..a3a6750875 100644 --- a/lib/getopt_ext.h +++ b/lib/getopt_ext.h @@ -66,11 +66,11 @@ struct option 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 diff --git a/lib/unistd.in.h b/lib/unistd.in.h index 38a0f0a9fc..de619dcca1 100644 --- a/lib/unistd.in.h +++ b/lib/unistd.in.h @@ -127,6 +127,13 @@ # include #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 @@ -142,13 +149,6 @@ _GL_INLINE_HEADER_BEGIN # 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 . */ #if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@ diff --git a/modules/getopt-posix b/modules/getopt-posix index 5844217ae5..220875641c 100644 --- a/modules/getopt-posix +++ b/modules/getopt-posix @@ -18,6 +18,7 @@ unistd extensions include_next gettext-h [test $REPLACE_GETOPT = 1] +snippet/arg-nonnull configure.ac: gl_FUNC_GETOPT_POSIX @@ -43,6 +44,7 @@ getopt.h: getopt.in.h $(top_builddir)/config.status -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 $@