]> pd.if.org Git - pdclib.old/blobdiff - internals/_PDCLIB_aux.h
PDCLIB-15 PDCLIB-16:
[pdclib.old] / internals / _PDCLIB_aux.h
index 3de8d4a9deeac2361fd981b4d1fcfc9406d6beb4..bfb0842806f48aae3c71ec6cef33303d22943a9a 100644 (file)
  *   XOPEN: X/Open System Interface (XSI)/Single Unix Specification
  *              0 (XPG4), 500 (SUSv2/UNIX98), 600 (SUSv3/UNIX03), 700 (SUSv4)
  *
- * PDCLib does not attempt or claim POSIX comformance, but makes available these
- * extensions as
- *   (a) useful, and
- *   (b) 
+ *   Additionally, the macros
+ *     _BSD_SOURCE, _SVID_SOURCE and _GNU_SOURCE
+ *   are adhered to. If _GNU_SOURCE is defined, _XOPEN_SOURCE and 
+ *   _POSIX_C_SOURCE are defined to their most recent values to match glibc 
+ *   behaviour
+ *
+ *   The intention of supporting these feature test macros is to ease 
+ *   application portability from these systems to PDCLib systems; in addition,
+ *   it eases support for these standards by systems supporting them which are 
+ *   using PDCLib as their default C library.
+ *
+ *   Applications targetting purely PDClib/PDCLib based platforms may define 
+ *   just _PDCLIB_EXTENSIONS, which will enable all supported extensions, plus
+ *   all features from all supported versions of C and C++.
+ *
  */
 #define _PDCLIB_C_MIN(min)         _PDCLIB_C_MINMAX(min, 3000)
 #define _PDCLIB_CXX_MIN(min)     _PDCLIB_CXX_MINMAX(min, 3000)
     #define _PDCLIB_CXX_MINMAX(min, max) 1
     #define _PDCLIB_POSIX_MINMAX(min, max) 1
     #define _PDCLIB_XOPEN_MINMAX(min, max) 1
+
+    #undef _PDCLIB_EXTENSIONS
+    #undef _PDCLIB_BSD_SOURCE 
+    #undef _PDCLIB_SVID_SOURCE
+    #undef _PDCLIB_GNU_SOURCE
+
+    #define _PDCLIB_EXTENSIONS 1
+    #define _PDCLIB_BSD_SOURCE 1
+    #define _PDCLIB_SVID_SOURCE 1
+    #define _PDCLIB_GNU_SOURCE 1
 #else
     #define _PDCLIB_C_MINMAX(min, max) \
         (_PDCLIB_C_VERSION >= (min) && _PDCLIB_C_VERSION <= (max))
         #define _XOPEN_SOURCE 0
     #endif
 
+    #if defined(_GNU_SOURCE)
+        #define _PDCLIB_GNU_SOURCE 1
+        #define _PDCLIB_SVID_SOURCE 1
+        #define _PDCLIB_BSD_SOURCE 1
+        #undef _XOPEN_SOURCE
+        #define _XOPEN_SOURCE 700
+    #else
+        #define _PDCLIB_GNU_SOURCE 0
+    #endif
+
+    #if defined(_PDCLIB_BSD_SOURCE)
+        // pass
+    #elif defined(_BSD_SOURCE)
+        #define _PDCLIB_BSD_SOURCE 1
+    #else
+        #define _PDCLIB_BSD_SOURCE 0
+    #endif
+
+    #if defined(_PDCLIB_SVID_SOURCE)
+        // pass
+    #elif defined(_SVID_SOURCE)
+        #define _PDCLIB_SVID_SOURCE 1
+    #else
+        #define _PDCLIB_SVID_SOURCE 0
+    #endif
+
     #if _PDCLIB_XOPEN_MIN(700) && !_PDCLIB_POSIX_MIN(200809L)
         #undef _POSIX_C_SOURCE
         #define _POSIX_C_SOURCE 2008098L