1 /* $NetBSD: featuretest.h,v 1.10 2013/04/26 18:29:06 christos Exp $ */ 2 3 /* 4 * Written by Klaus Klein <kleink@NetBSD.org>, February 2, 1998. 5 * Public domain. 6 * 7 * NOTE: Do not protect this header against multiple inclusion. Doing 8 * so can have subtle side-effects due to header file inclusion order 9 * and testing of e.g. _POSIX_SOURCE vs. _POSIX_C_SOURCE. Instead, 10 * protect each CPP macro that we want to supply. 11 */ 12 13 /* 14 * Feature-test macros are defined by several standards, and allow an 15 * application to specify what symbols they want the system headers to 16 * expose, and hence what standard they want them to conform to. 17 * There are two classes of feature-test macros. The first class 18 * specify complete standards, and if one of these is defined, header 19 * files will try to conform to the relevant standard. They are: 20 * 21 * ANSI macros: 22 * _ANSI_SOURCE ANSI C89 23 * 24 * POSIX macros: 25 * _POSIX_SOURCE == 1 IEEE Std 1003.1 (version?) 26 * _POSIX_C_SOURCE == 1 IEEE Std 1003.1-1990 27 * _POSIX_C_SOURCE == 2 IEEE Std 1003.2-1992 28 * _POSIX_C_SOURCE == 199309L IEEE Std 1003.1b-1993 29 * _POSIX_C_SOURCE == 199506L ISO/IEC 9945-1:1996 30 * _POSIX_C_SOURCE == 200112L IEEE Std 1003.1-2001 31 * _POSIX_C_SOURCE == 200809L IEEE Std 1003.1-2008 32 * 33 * X/Open macros: 34 * _XOPEN_SOURCE System Interfaces and Headers, Issue 4, Ver 2 35 * _XOPEN_SOURCE_EXTENDED == 1 XSH4.2 UNIX extensions 36 * _XOPEN_SOURCE == 500 System Interfaces and Headers, Issue 5 37 * _XOPEN_SOURCE == 520 Networking Services (XNS), Issue 5.2 38 * _XOPEN_SOURCE == 600 IEEE Std 1003.1-2001, XSI option 39 * _XOPEN_SOURCE == 700 IEEE Std 1003.1-2008, XSI option 40 * 41 * NetBSD macros: 42 * _NETBSD_SOURCE == 1 Make all NetBSD features available. 43 * 44 * If more than one of these "major" feature-test macros is defined, 45 * then the set of facilities provided (and namespace used) is the 46 * union of that specified by the relevant standards, and in case of 47 * conflict, the earlier standard in the above list has precedence (so 48 * if both _POSIX_C_SOURCE and _NETBSD_SOURCE are defined, the version 49 * of rename() that's used is the POSIX one). If none of the "major" 50 * feature-test macros is defined, _NETBSD_SOURCE is assumed. 51 * 52 * There are also "minor" feature-test macros, which enable extra 53 * functionality in addition to some base standard. They should be 54 * defined along with one of the "major" macros. The "minor" macros 55 * are: 56 * 57 * _REENTRANT 58 * _ISOC99_SOURCE 59 * _ISOC11_SOURCE 60 * _LARGEFILE_SOURCE Large File Support 61 * <http://ftp.sas.com/standards/large.file/x_open.20Mar96.html> 62 */ 63 64 #if defined(_POSIX_SOURCE) && !defined(_POSIX_C_SOURCE) 65 #define _POSIX_C_SOURCE 1L 66 #endif 67 68 #if !defined(_ANSI_SOURCE) && !defined(_POSIX_C_SOURCE) && \ 69 !defined(_XOPEN_SOURCE) && !defined(_NETBSD_SOURCE) 70 #define _NETBSD_SOURCE 1 71 #endif 72 73 #if ((_POSIX_C_SOURCE - 0) >= 199506L || (_XOPEN_SOURCE - 0) >= 500) && \ 74 !defined(_REENTRANT) 75 #define _REENTRANT 76 #endif 77