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.
This commit is contained in:
Joseph Myers 2013-12-19 13:32:42 +00:00
parent 9f6e964c3a
commit c688b41960
4 changed files with 79 additions and 17 deletions

View File

@ -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.

5
NEWS
View File

@ -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.

View File

@ -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

View File

@ -188,6 +188,21 @@ the cases where POSIX.1 conflicts with BSD, the POSIX definitions take
precedence.
@end defvr
@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
@ -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