This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: Remove _BSD_SOURCE and _SVID_SOURCE
- From: "Joseph S. Myers" <joseph at codesourcery dot com>
- To: Roland McGrath <roland at hack dot frob dot com>
- Cc: <libc-alpha at sourceware dot org>
- Date: Tue, 17 Dec 2013 23:08:56 +0000
- Subject: Re: Remove _BSD_SOURCE and _SVID_SOURCE
- Authentication-results: sourceware.org; auth=none
- References: <Pine dot LNX dot 4 dot 64 dot 1312052315530 dot 16480 at digraph dot polyomino dot org dot uk> <20131216225338 dot 6FA7E7442E at topped-with-meat dot com>
On Mon, 16 Dec 2013, Roland McGrath wrote:
> I think the suggestion of a feature-test macro that enables all the
> extension symbols but does not change any standard-specified symbols has
> merit. It is probably wise to add this first, and then stage the
> removal of the old feature-test macros. A long-term intermediate state
> that probably makes sense is to have _BSD_SOURCE and _SVID_SOURCE
> (without _GNU_SOURCE) trigger this new mode but with a #warning advising
> to use the cleaner new feature-test macro name.
This is a minimal patch, relative to a tree with
<https://sourceware.org/ml/libc-alpha/2013-12/msg00646.html> applied,
to remove _BSD_SOURCE and _SVID_SOURCE from the documented user API,
making them into aliases for _DEFAULT_SOURCE with a #warning given,
but keeping most of the features.h logic using those macros and all
the exising __USE_* conditionals, on the basis that all the consequent
cleanups will go in followup patches.
Tested x86_64.
2013-12-17 Joseph Myers <joseph@codesourcery.com>
* include/features.h: Update comment documenting feature test
macros.
[_BSD_SOURCE || _SVID_SOURCE]: Give #warning. Define
_DEFAULT_SOURCE.
* manual/creature.texi (_BSD_SOURCE): Remove documentation.
(_SVID_SOURCE): Likewise.
(_DEFAULT_SOURCE): Update description of default features.
(Feature Test Macros): Don't mention _SVID_SOURCE in conjunction
with _GNU_SOURCE.
* manual/filesys.texi (__ftw_func_t): Do not refer to _BSD_SOURCE.
(S_ISVTX): Likewise.
* manual/math.texi (Mathematical Constants): Likewise.
* manual/signal.texi (Interrupted Primitives): Likewise.
* manual/startup.texi (putenv): Do not refer to _SVID_SOURCE.
* math/test-matherr.c (_SVID_SOURCE): Do not define.
* sysvipc/sys/ipc.h [__USE_SVID && !__USE_XOPEN && __GNUC__ >= 2]:
Don't refer to _SVID_SOURCE in warning text.
diff --git a/NEWS b/NEWS
index 61e40cb..23510d3 100644
--- a/NEWS
+++ b/NEWS
@@ -106,9 +106,14 @@ Version 2.19
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.
+* The _BSD_SOURCE and _SVID_SOURCE feature test macros are no longer
+ supported; they now act the same as _DEFAULT_SOURCE (but generate a
+ warning). Except for cases where _BSD_SOURCE enabled BSD interfaces that
+ conflicted with POSIX, the interfaces those macros enabled remain
+ available when compiling with _GNU_SOURCE defined, with _DEFAULT_SOURCE
+ defined, or without any feature test macros defined. The libbsd-compat
+ library (which was a dummy library that did nothing) has also been
+ removed.
Version 2.18
diff --git a/include/features.h b/include/features.h
index 6acd5c8..d91c8f5 100644
--- a/include/features.h
+++ b/include/features.h
@@ -37,8 +37,6 @@
_LARGEFILE_SOURCE Some more functions for correct standard I/O.
_LARGEFILE64_SOURCE Additional functionality from LFS for large files.
_FILE_OFFSET_BITS=N Select default filesystem interface.
- _BSD_SOURCE ISO C, POSIX, and 4.3BSD things.
- _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
@@ -51,11 +49,11 @@
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.
+ to have _POSIX_SOURCE set to one and _POSIX_C_SOURCE set to
+ 200809L, as well as enabling miscellaneous functions from BSD and
+ SVID. 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:
@@ -145,6 +143,13 @@
# define __GNUC_PREREQ(maj, min) 0
#endif
+/* _BSD_SOURCE and _SVID_SOURCE are deprecated aliases for
+ _DEFAULT_SOURCE. */
+#if defined _BSD_SOURCE || defined _SVID_SOURCE
+# warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE"
+# undef _DEFAULT_SOURCE
+# define _DEFAULT_SOURCE 1
+#endif
/* If _GNU_SOURCE was defined by the user, turn on all the other features. */
#ifdef _GNU_SOURCE
diff --git a/manual/creature.texi b/manual/creature.texi
index bbf16b7..3c68616 100644
--- a/manual/creature.texi
+++ b/manual/creature.texi
@@ -73,20 +73,6 @@ edition is made available.
@end defvr
@comment (none)
-@comment GNU
-@defvr Macro _BSD_SOURCE
-If you define this macro, functionality derived from 4.3 BSD Unix is
-included as well as the @w{ISO C}, POSIX.1, and POSIX.2 material.
-@end defvr
-
-@comment (none)
-@comment GNU
-@defvr Macro _SVID_SOURCE
-If you define this macro, functionality derived from SVID is
-included as well as the @w{ISO C}, POSIX.1, POSIX.2, and X/Open material.
-@end defvr
-
-@comment (none)
@comment X/Open
@defvr Macro _XOPEN_SOURCE
@comment (none)
@@ -192,9 +178,9 @@ precedence.
@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
+X/Open, LFS and GNU extensions: the effect is to enable features from
+the 2008 edition of POSIX, as well as certain BSD and SVID features
+without a separate feature test macro to control them. 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
@@ -229,4 +215,4 @@ it is harmless to define in addition a feature test macro for a subset of
those features. For example, if you define @code{_POSIX_C_SOURCE}, then
defining @code{_POSIX_SOURCE} as well has no effect. Likewise, if you
define @code{_GNU_SOURCE}, then defining either @code{_POSIX_SOURCE} or
-@code{_POSIX_C_SOURCE} or @code{_SVID_SOURCE} as well has no effect.
+@code{_POSIX_C_SOURCE} as well has no effect.
diff --git a/manual/filesys.texi b/manual/filesys.texi
index 1cac453..7ebaeb0 100644
--- a/manual/filesys.texi
+++ b/manual/filesys.texi
@@ -812,7 +812,7 @@ seeing this value in a @code{ftw} callback function means the referenced
file does not exist. The situation for @code{nftw} is different.
This value is only available if the program is compiled with
-@code{_BSD_SOURCE} or @code{_XOPEN_EXTENDED} defined before including
+@code{_XOPEN_EXTENDED} defined before including
the first header. The original SVID systems do not have symbolic links.
@end vtable
@@ -2415,8 +2415,9 @@ the file's modification time onto disk reliably (the idea being that
no-one cares for a swap file).
This bit is only available on BSD systems (and those derived from
-them). Therefore one has to use the @code{_BSD_SOURCE} feature select
-macro to get the definition (@pxref{Feature Test Macros}).
+them). Therefore one has to use the @code{_GNU_SOURCE} feature select
+macro, or not define any feature test macros, to get the definition
+(@pxref{Feature Test Macros}).
@end table
The actual bit values of the symbols are listed in the table above
diff --git a/manual/math.texi b/manual/math.texi
index 5e7c90e..35662cd 100644
--- a/manual/math.texi
+++ b/manual/math.texi
@@ -106,7 +106,7 @@ The reciprocal of the square root of two (also the square root of 1/2).
@end vtable
These constants come from the Unix98 standard and were also available in
-4.4BSD; therefore they are only defined if @code{_BSD_SOURCE} or
+4.4BSD; therefore they are only defined if
@code{_XOPEN_SOURCE=500}, or a more general feature select macro, is
defined. The default set of features includes these constants.
@xref{Feature Test Macros}.
diff --git a/manual/signal.texi b/manual/signal.texi
index adcda37..facdfb5 100644
--- a/manual/signal.texi
+++ b/manual/signal.texi
@@ -2108,16 +2108,9 @@ that handler will cause @code{EINTR}. @xref{Flags for Sigaction}.
Another way to specify the choice is with the @code{siginterrupt}
function. @xref{BSD Handler}.
-@c !!! not true now about _BSD_SOURCE
When you don't specify with @code{sigaction} or @code{siginterrupt} what
a particular handler should do, it uses a default choice. The default
-choice in @theglibc{} depends on the feature test macros you have
-defined. If you define @code{_BSD_SOURCE} or @code{_GNU_SOURCE} before
-calling @code{signal}, the default is to resume primitives; otherwise,
-the default is to make them fail with @code{EINTR}. (The library
-contains alternate versions of the @code{signal} function, and the
-feature test macros determine which one you really call.) @xref{Feature
-Test Macros}.
+choice in @theglibc{} is to make primitives fail with @code{EINTR}.
@cindex EINTR, and restarting interrupted primitives
@cindex restarting interrupted primitives
@cindex interrupting primitives
diff --git a/manual/startup.texi b/manual/startup.texi
index a277714..f7f5836 100644
--- a/manual/startup.texi
+++ b/manual/startup.texi
@@ -363,9 +363,8 @@ reflect in automatically in the environment. This also requires that
variable is removed from the environment. The same applies of course to
dynamically allocated variables which are freed later.
-This function is part of the extended Unix interface. Since it was also
-available in old SVID libraries you should define either
-@var{_XOPEN_SOURCE} or @var{_SVID_SOURCE} before including any header.
+This function is part of the extended Unix interface. You should define
+@var{_XOPEN_SOURCE} before including any header.
@end deftypefun
diff --git a/math/test-matherr.c b/math/test-matherr.c
index 91657a8..cd09a39 100644
--- a/math/test-matherr.c
+++ b/math/test-matherr.c
@@ -1,5 +1,3 @@
-#undef _SVID_SOURCE
-#define _SVID_SOURCE
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
diff --git a/sysvipc/sys/ipc.h b/sysvipc/sys/ipc.h
index 0a87aff..9516824 100644
--- a/sysvipc/sys/ipc.h
+++ b/sysvipc/sys/ipc.h
@@ -21,7 +21,7 @@
#include <features.h>
#if !defined __USE_SVID && !defined __USE_XOPEN && __GNUC__ >= 2
-# warning "Files using this header must be compiled with _SVID_SOURCE or _XOPEN_SOURCE"
+# warning "Files using this header must be compiled with _DEFAULT_SOURCE or _XOPEN_SOURCE"
#endif
/* Get system dependent definition of `struct ipc_perm' and more. */
--
Joseph S. Myers
joseph@codesourcery.com