diff options
author | Joseph Myers <joseph@codesourcery.com> | 2013-12-19 13:32:42 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2013-12-19 13:32:42 +0000 |
commit | c688b4196014e0162a1ff11120f6c9516be0c6cb (patch) | |
tree | cbd05e278192c66c63f6d79b26bb0c1e19d805d4 | |
parent | 9f6e964c3a951b6e19ed934aec1f0c101c295987 (diff) | |
download | glibc-c688b4196014e0162a1ff11120f6c9516be0c6cb.tar.gz glibc-c688b4196014e0162a1ff11120f6c9516be0c6cb.tar.xz glibc-c688b4196014e0162a1ff11120f6c9516be0c6cb.zip |
Add _DEFAULT_SOURCE feature test macro.
This patch adds a feature test macro _DEFAULT_SOURCE to enable the default set of header declarations. The intention is: if _DEFAULT_SOURCE is not used there is no change to the set of __USE_* macros glibc defines; if it's used on its own, and without compiler options such as -std=c99 that define __STRICT_ANSI__, again, there is no change; if it's used together with the macros it approximately (i.e., apart from __USE_POSIX_IMPLICITLY) implies (-D_BSD_SOURCE -D_SVID_SOURCE -D_POSIX_C_SOURCE=200809L), again, there is no change. Otherwise, it causes the relevant features to be enabled, even if __STRICT_ANSI__, or another feature test macro, would cause them to be disabled. This macro deliberately bundles the POSIX.1-2008 (non-X/Open) functionality with the BSD/SVID/"misc" functionality, rather than defining a macro that gives just the latter, as many of the header cleanups resulting from removing _BSD_SOURCE and _SVID_SOURCE support are only possible when BSD/SVID/"misc" is always bundled with POSIX.1-2008. Tested x86_64. * include/features.h: Update comment documenting feature test macros. Mention _DEFAULT_SOURCE in comment. [_GNU_SOURCE] (_DEFAULT_SOURCE): Undefine and redefine. [_DEFAULT_SOURCE]: Undefine and redefine _DEFAULT_SOURCE, _BSD_SOURCE and _SVID_SOURCE. [!__STRICT_ANSI__ && !_ISOC99_SOURCE && !_POSIX_SOURCE && !_POSIX_C_SOURCE && !_XOPEN_SOURCE && !_BSD_SOURCE && !_SVID_SOURCE]: Likewise. [_DEFAULT_SOURCE && !_POSIX_SOURCE && !_POSIX_C_SOURCE] (__USE_POSIX_IMPLICITLY): Define. [_DEFAULT_SOURCE && !_POSIX_SOURCE && !_POSIX_C_SOURCE] (_POSIX_SOURCE): Undefine and redefine. [_DEFAULT_SOURCE && !_POSIX_SOURCE && !_POSIX_C_SOURCE] (_POSIX_C_SOURCE): Likewise. * manual/creature.texi (_DEFAULT_SOURCE): Document. (Feature Test Macros): Update documentation of default features.
-rw-r--r-- | ChangeLog | 19 | ||||
-rw-r--r-- | NEWS | 5 | ||||
-rw-r--r-- | include/features.h | 49 | ||||
-rw-r--r-- | manual/creature.texi | 23 |
4 files changed, 79 insertions, 17 deletions
diff --git a/ChangeLog b/ChangeLog index bee6f8be78..727688e124 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,22 @@ +2013-12-19 Joseph Myers <joseph@codesourcery.com> + + * include/features.h: Update comment documenting feature test + macros. Mention _DEFAULT_SOURCE in comment. + [_GNU_SOURCE] (_DEFAULT_SOURCE): Undefine and redefine. + [_DEFAULT_SOURCE]: Undefine and redefine _DEFAULT_SOURCE, + _BSD_SOURCE and _SVID_SOURCE. + [!__STRICT_ANSI__ && !_ISOC99_SOURCE && !_POSIX_SOURCE && + !_POSIX_C_SOURCE && !_XOPEN_SOURCE && !_BSD_SOURCE && + !_SVID_SOURCE]: Likewise. + [_DEFAULT_SOURCE && !_POSIX_SOURCE && !_POSIX_C_SOURCE] + (__USE_POSIX_IMPLICITLY): Define. + [_DEFAULT_SOURCE && !_POSIX_SOURCE && !_POSIX_C_SOURCE] + (_POSIX_SOURCE): Undefine and redefine. + [_DEFAULT_SOURCE && !_POSIX_SOURCE && !_POSIX_C_SOURCE] + (_POSIX_C_SOURCE): Likewise. + * manual/creature.texi (_DEFAULT_SOURCE): Document. + (Feature Test Macros): Update documentation of default features. + 2013-12-19 Rajalakshmi Srinivasaraghavan <raji@linux.vnet.ibm.com> * benchtests/Makefile: Add bench-strtok. diff --git a/NEWS b/NEWS index d5963491bf..d82cf9592b 100644 --- a/NEWS +++ b/NEWS @@ -101,6 +101,11 @@ Version 2.19 * Support for STT_GNU_IFUNC symbols added for ppc32/power4+ and ppc64. +* A new feature test macro _DEFAULT_SOURCE is available to enable the same + set of header declarations that are enabled by default, even when other + feature test macros or compiler options such as -std=c99 would otherwise + disable some of those declarations. + * The _BSD_SOURCE feature test macro no longer enables BSD interfaces that conflict with POSIX. The libbsd-compat library (which was a dummy library that did nothing) has also been removed. diff --git a/include/features.h b/include/features.h index cff8bfcf8e..6acd5c899d 100644 --- a/include/features.h +++ b/include/features.h @@ -41,17 +41,21 @@ _SVID_SOURCE ISO C, POSIX, and SVID things. _ATFILE_SOURCE Additional *at interfaces. _GNU_SOURCE All of the above, plus GNU extensions. + _DEFAULT_SOURCE The default set of features (taking precedence over + __STRICT_ANSI__). _REENTRANT Select additionally reentrant object. _THREAD_SAFE Same as _REENTRANT, often used by other systems. _FORTIFY_SOURCE If set to numeric value > 0 additional security measures are defined, according to level. - The `-ansi' switch to the GNU C compiler defines __STRICT_ANSI__. - If none of these are defined, the default is to have _SVID_SOURCE, - _BSD_SOURCE, and _POSIX_SOURCE set to one and _POSIX_C_SOURCE set to - 200112L. If more than one of these are defined, they accumulate. - For example __STRICT_ANSI__, _POSIX_SOURCE and _POSIX_C_SOURCE - together give you ISO C, 1003.1, and 1003.2, but nothing else. + The `-ansi' switch to the GNU C compiler, and standards conformance + options such as `-std=c99', define __STRICT_ANSI__. If none of + these are defined, or if _DEFAULT_SOURCE is defined, the default is + to have _SVID_SOURCE, _BSD_SOURCE, and _POSIX_SOURCE set to one and + _POSIX_C_SOURCE set to 200809L. If more than one of these are + defined, they accumulate. For example __STRICT_ANSI__, + _POSIX_SOURCE and _POSIX_C_SOURCE together give you ISO C, 1003.1, + and 1003.2, but nothing else. These are defined by this file and are used by the header files to decide what to declare or define: @@ -160,6 +164,8 @@ # define _XOPEN_SOURCE_EXTENDED 1 # undef _LARGEFILE64_SOURCE # define _LARGEFILE64_SOURCE 1 +# undef _DEFAULT_SOURCE +# define _DEFAULT_SOURCE 1 # undef _BSD_SOURCE # define _BSD_SOURCE 1 # undef _SVID_SOURCE @@ -168,12 +174,19 @@ # define _ATFILE_SOURCE 1 #endif -/* If nothing (other than _GNU_SOURCE) is defined, - define _BSD_SOURCE and _SVID_SOURCE. */ -#if (!defined __STRICT_ANSI__ && !defined _ISOC99_SOURCE && \ - !defined _POSIX_SOURCE && !defined _POSIX_C_SOURCE && \ - !defined _XOPEN_SOURCE && !defined _BSD_SOURCE && !defined _SVID_SOURCE) +/* If nothing (other than _GNU_SOURCE and _DEFAULT_SOURCE) is defined, + define _DEFAULT_SOURCE, _BSD_SOURCE and _SVID_SOURCE. */ +#if (defined _DEFAULT_SOURCE \ + || (!defined __STRICT_ANSI__ \ + && !defined _ISOC99_SOURCE \ + && !defined _POSIX_SOURCE && !defined _POSIX_C_SOURCE \ + && !defined _XOPEN_SOURCE \ + && !defined _BSD_SOURCE && !defined _SVID_SOURCE)) +# undef _DEFAULT_SOURCE +# define _DEFAULT_SOURCE 1 +# undef _BSD_SOURCE # define _BSD_SOURCE 1 +# undef _SVID_SOURCE # define _SVID_SOURCE 1 #endif @@ -204,8 +217,18 @@ # define __USE_ISOCXX11 1 #endif -/* If none of the ANSI/POSIX macros are defined, use POSIX.1 and POSIX.2 - (and IEEE Std 1003.1b-1993 unless _XOPEN_SOURCE is defined). */ +/* If none of the ANSI/POSIX macros are defined, or if _DEFAULT_SOURCE + is defined, use POSIX.1-2008 (or another version depending on + _XOPEN_SOURCE). */ +#ifdef _DEFAULT_SOURCE +# if !defined _POSIX_SOURCE && !defined _POSIX_C_SOURCE +# define __USE_POSIX_IMPLICITLY 1 +# endif +# undef _POSIX_SOURCE +# define _POSIX_SOURCE 1 +# undef _POSIX_C_SOURCE +# define _POSIX_C_SOURCE 200809L +#endif #if ((!defined __STRICT_ANSI__ || (_XOPEN_SOURCE - 0) >= 500) && \ !defined _POSIX_SOURCE && !defined _POSIX_C_SOURCE) # define _POSIX_SOURCE 1 diff --git a/manual/creature.texi b/manual/creature.texi index 3b7e77c78b..bbf16b7f27 100644 --- a/manual/creature.texi +++ b/manual/creature.texi @@ -190,6 +190,21 @@ precedence. @comment (none) @comment GNU +@defvr Macro _DEFAULT_SOURCE +If you define this macro, most features are included apart from +X/Open, LFS and GNU extensions; the effect is similar to defining +@code{_POSIX_C_SOURCE} to @code{200809L} and @code{_POSIX_SOURCE}, +@code{_SVID_SOURCE}, and @code{_BSD_SOURCE} to 1. Defining this +macro, on its own and without using compiler options such as +@option{-ansi} or @option{-std=c99}, has the same effect as not +defining any feature test macros; defining it together with other +feature test macros, or when options such as @option{-ansi} are used, +enables those features even when the other options would otherwise +cause them to be disabled. +@end defvr + +@comment (none) +@comment GNU @defvr Macro _REENTRANT @defvrx Macro _THREAD_SAFE If you define one of these macros, reentrant versions of several functions get @@ -204,10 +219,10 @@ it must have been specified to compile as thread safe. @end defvr We recommend you use @code{_GNU_SOURCE} in new programs. If you don't -specify the @samp{-ansi} option to GCC and don't define any of these -macros explicitly, the effect is the same as defining -@code{_POSIX_C_SOURCE} to 2 and @code{_POSIX_SOURCE}, -@code{_SVID_SOURCE}, and @code{_BSD_SOURCE} to 1. +specify the @samp{-ansi} option to GCC, or other conformance options +such as @option{-std=c99}, and don't define any of these macros +explicitly, the effect is the same as defining @code{_DEFAULT_SOURCE} +to 1. When you define a feature test macro to request a larger class of features, it is harmless to define in addition a feature test macro for a subset of |