X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=internals%2F_PDCLIB_aux.h;h=bfb0842806f48aae3c71ec6cef33303d22943a9a;hb=026148e2e90368c0b23192f506e15aa6197105aa;hp=e7e908a66e413d70cee645fc2ad26b8e0749049d;hpb=5fd032eae66fba700cb9927840222b068c62361e;p=pdclib diff --git a/internals/_PDCLIB_aux.h b/internals/_PDCLIB_aux.h index e7e908a..bfb0842 100644 --- a/internals/_PDCLIB_aux.h +++ b/internals/_PDCLIB_aux.h @@ -58,6 +58,14 @@ #define _PDCLIB_inline inline #endif +#if _PDCLIB_CXX_VERSION >= 2011 + #define _PDCLIB_nothrow noexcept + #define _PDCLIB_noexcept(x) noexcept(x) +#elif _PDCLIB_CXX_VERSION + #define _PDCLIB_nothrow throw() + #define _PDCLIB_noexcept +#endif + #if _PDCLIB_CXX_VERSION >= 2011 // Hold off on C++ attribute syntax for now // #define _PDCLIB_noreturn [[noreturn]] @@ -71,9 +79,9 @@ #endif #ifdef __GNUC__ - #ifndef _PDCLIB_EXPORT - #define _PDCLIB_EXPORT __attribute__((__visibility__("protected"))) - #endif + #ifndef _PDCLIB_EXPORT + #define _PDCLIB_EXPORT __attribute__((__visibility__("protected"))) + #endif #ifndef _PDCLIB_IMPORT #define _PDCLIB_IMPORT @@ -83,6 +91,11 @@ #define _PDCLIB_HIDDEN __attribute__((__visibility__("hidden"))) #endif + #ifndef _PDCLIB_nothrow + #define _PDCLIB_nothrow __attribute__((__nothrow__)) + #define _PDCLIB_noexcept + #endif + #ifndef _PDCLIB_restrict #define _PDCLIB_restrict __restrict #endif @@ -97,6 +110,11 @@ #endif #endif +#ifndef _PDCLIB_nothrow + #define _PDCLIB_nothrow + #define _PDCLIB_noexcept +#endif + #ifndef _PDCLIB_EXPORT #define _PDCLIB_EXPORT #endif @@ -159,6 +177,7 @@ #define _PDCLIB_cc( x, y ) x ## y #define _PDCLIB_concat( x, y ) _PDCLIB_cc( x, y ) +#define _PDCLIB_concat3( x, y, z ) _PDCLIB_concat( _PDCLIB_concat( x, y ), z ) #define _PDCLIB_symbol2value( x ) #x #define _PDCLIB_symbol2string( x ) _PDCLIB_symbol2value( x ) @@ -181,10 +200,21 @@ * 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) @@ -199,6 +229,16 @@ #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)) @@ -217,6 +257,32 @@ #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 @@ -233,4 +299,4 @@ #endif #endif -#endif \ No newline at end of file +#endif