Mon Jun 24 19:57:01 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
[kopensolaris-gnu/glibc.git] / features.h
index d00c1b8..4aee806 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 92, 93, 95, 96 Free Software Foundation, Inc.
 This file is part of the GNU C Library.
 
 The GNU C Library is free software; you can redistribute it and/or
@@ -31,7 +31,7 @@ Cambridge, MA 02139, USA.  */
    _GNU_SOURCE         All of the above, plus GNU extensions.
 
    The `-ansi' switch to the GNU C compiler defines __STRICT_ANSI__.
-   If none of these are defined, the default is _GNU_SOURCE.
+   If none of these are defined, the default is all but _GNU_SOURCE.
    If more than one of these are defined, they accumulate.
    For example __STRICT_ANSI__, _POSIX_SOURCE and _POSIX_C_SOURCE
    together give you ANSI C, 1003.1, and 1003.2, but nothing else.
@@ -45,11 +45,11 @@ Cambridge, MA 02139, USA.  */
    __USE_SVID          Define SVID things.
    __USE_MISC          Define things common to BSD and System V Unix.
    __USE_GNU           Define GNU extensions.
+   __USE_REENTRANT     Define reentrant/thread-safe *_r functions.
    __FAVOR_BSD         Favor 4.3BSD things in cases of conflict.
 
    The macro `__GNU_LIBRARY__' is defined by this file unconditionally.
 
-   All macros defined by this file are defined as 1.
    All macros listed above as possibly being defined by this file are
    explicitly undefined if they are not explicitly defined.
    Feature-test macros that are not defined by the user or compiler
@@ -64,52 +64,64 @@ Cambridge, MA 02139, USA.  */
 #undef __USE_SVID
 #undef __USE_MISC
 #undef __USE_GNU
+#undef __USE_REENTRANT
 #undef __FAVOR_BSD
+#undef __KERNEL_STRICT_NAMES
 
-
-/* If nothing is defined, define _GNU_SOURCE.  */
-#if (!defined(_GNU_SOURCE) && !defined(__STRICT_ANSI__) && \
-     !defined(_POSIX_SOURCE) && !defined(_POSIX_C_SOURCE) && \
-     !defined(_BSD_SOURCE) && !defined(_SVID_SOURCE))
-#define        _GNU_SOURCE     1
+/* Suppress kernel-name space pollution unless user expressedly asks
+   for it: */
+#ifndef _LOOSE_KERNEL_NAMES
+# define __KERNEL_STRICT_NAMES
 #endif
 
-
 /* Always use ANSI things.  */
 #define        __USE_ANSI      1
 
 
 /* If _BSD_SOURCE was defined by the user, favor BSD over POSIX.  */
-#ifdef _BSD_SOURCE
+#if defined (_BSD_SOURCE) && \
+    !(defined (_POSIX_SOURCE) || defined (_POSIX_C_SOURCE) || \
+      defined (_GNU_SOURCE) || defined (_SVID_SOURCE))
 #define        __FAVOR_BSD     1
 #endif
 
+/* If _GNU_SOURCE was defined by the user, turn on all the other features.  */
+#ifdef _GNU_SOURCE
+#undef _POSIX_SOURCE
+#define        _POSIX_SOURCE   1
+#undef _POSIX_C_SOURCE
+#define        _POSIX_C_SOURCE 2
+#undef _BSD_SOURCE
+#define        _BSD_SOURCE     1
+#undef _SVID_SOURCE
+#define        _SVID_SOURCE    1
+#endif
 
 /* If nothing (other than _GNU_SOURCE) is defined,
    define _BSD_SOURCE and _SVID_SOURCE.  */
-#if (!defined(__STRICT_ANSI__) && !defined(_POSIX_SOURCE) && \
-     !defined(_POSIX_C_SOURCE) && !defined(_BSD_SOURCE) && \
-     !defined(_SVID_SOURCE))
+#if (!defined (__STRICT_ANSI__) && !defined (_POSIX_SOURCE) && \
+     !defined (_POSIX_C_SOURCE) && !defined (_BSD_SOURCE) && \
+     !defined (_SVID_SOURCE))
 #define        _BSD_SOURCE     1
 #define        _SVID_SOURCE    1
 #endif
 
 /* If none of the ANSI/POSIX macros are defined, use POSIX.1 and POSIX.2.  */
-#if (!defined(__STRICT_ANSI__) && !defined(_POSIX_SOURCE) && \
-     !defined(_POSIX_C_SOURCE))
+#if (!defined (__STRICT_ANSI__) && !defined (_POSIX_SOURCE) && \
+     !defined (_POSIX_C_SOURCE))
 #define        _POSIX_SOURCE   1
 #define        _POSIX_C_SOURCE 2
 #endif
 
-#if    defined(_POSIX_SOURCE) || _POSIX_C_SOURCE >= 1
+#if    defined (_POSIX_SOURCE) || _POSIX_C_SOURCE >= 1
 #define        __USE_POSIX     1
 #endif
 
-#if    defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 2
+#if    defined (_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 2
 #define        __USE_POSIX2    1
 #endif
 
-#if defined(_BSD_SOURCE) || defined(_SVID_SOURCE)
+#if defined (_BSD_SOURCE) || defined (_SVID_SOURCE)
 #define        __USE_MISC      1
 #endif
 
@@ -125,16 +137,43 @@ Cambridge, MA 02139, USA.  */
 #define        __USE_GNU       1
 #endif
 
+#if defined (__USE_GNU) || defined (__USE_MISC)
+#define __USE_REENTRANT        1
+#endif
+
+
+/* This macro indicates that the installed library is the GNU C Library.
+   Its value must be incremented whenever any existing library interface
+   changes such that callers must be recompiled with the new header files.
+   This value should always coincide with the major version number used for
+   the shared C library corresponding to this set of header files.  */
 
 #undef __GNU_LIBRARY__
-#define        __GNU_LIBRARY__ 1
+#define        __GNU_LIBRARY__ 6
 
 
-#if    !defined(__GNUC__) || __GNUC__ < 2
+#if    !defined (__GNUC__) || __GNUC__ < 2
 /* In GCC version 2, (__extension__ EXPR) will not complain
    about GCC extensions used in EXPR under -ansi or -pedantic.  */
 #define        __extension__
 #endif
 
 
+/* This is here only because every header file already includes this one.  */
+#include <sys/cdefs.h>
+
+/* This is here only because every header file already includes this one.  */
+#ifndef _LIBC
+/* Get the definitions of all the appropriate `__stub_FUNCTION' symbols.
+   <stubs.h> contains `#define __stub_FUNCTION' when FUNCTION is a stub
+   which will always return failure (and set errno to ENOSYS).
+
+   We avoid including <stubs.h> when compiling the C library itself to
+   avoid a dependency loop.  stubs.h depends on every object file.  If
+   this #include were done for the library source code, then every object
+   file would depend on stubs.h.  */
+
+#include <stubs.h>
+#endif
+
 #endif /* __features.h  */