4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* $NetBSD: featuretest.h,v 1.8 2005/12/11 12:25:20 christos Exp $ */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/*
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Written by Klaus Klein <kleink@NetBSD.org>, February 2, 1998.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Public domain.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * NOTE: Do not protect this header against multiple inclusion. Doing
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * so can have subtle side-effects due to header file inclusion order
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * and testing of e.g. _POSIX_SOURCE vs. _POSIX_C_SOURCE. Instead,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * protect each CPP macro that we want to supply.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/*
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Feature-test macros are defined by several standards, and allow an
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * application to specify what symbols they want the system headers to
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * expose, and hence what standard they want them to conform to.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * There are two classes of feature-test macros. The first class
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * specify complete standards, and if one of these is defined, header
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * files will try to conform to the relevant standard. They are:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * ANSI macros:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * _ANSI_SOURCE ANSI C89
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * POSIX macros:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * _POSIX_SOURCE == 1 IEEE Std 1003.1 (version?)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * _POSIX_C_SOURCE == 1 IEEE Std 1003.1-1990
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * _POSIX_C_SOURCE == 2 IEEE Std 1003.2-1992
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * _POSIX_C_SOURCE == 199309L IEEE Std 1003.1b-1993
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * _POSIX_C_SOURCE == 199506L ISO/IEC 9945-1:1996
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * _POSIX_C_SOURCE == 200112L IEEE Std 1003.1-2001
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * X/Open macros:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * _XOPEN_SOURCE System Interfaces and Headers, Issue 4, Ver 2
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * _XOPEN_SOURCE_EXTENDED == 1 XSH4.2 UNIX extensions
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * _XOPEN_SOURCE == 500 System Interfaces and Headers, Issue 5
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * _XOPEN_SOURCE == 520 Networking Services (XNS), Issue 5.2
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * _XOPEN_SOURCE == 600 IEEE Std 1003.1-2001, XSI option
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * NetBSD macros:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * _NETBSD_SOURCE == 1 Make all NetBSD features available.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * If more than one of these "major" feature-test macros is defined,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * then the set of facilities provided (and namespace used) is the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * union of that specified by the relevant standards, and in case of
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * conflict, the earlier standard in the above list has precedence (so
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * if both _POSIX_C_SOURCE and _NETBSD_SOURCE are defined, the version
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * of rename() that's used is the POSIX one). If none of the "major"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * feature-test macros is defined, _NETBSD_SOURCE is assumed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * There are also "minor" feature-test macros, which enable extra
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * functionality in addition to some base standard. They should be
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * defined along with one of the "major" macros. The "minor" macros
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * are:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * _REENTRANT
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * _ISOC99_SOURCE
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * _LARGEFILE_SOURCE Large File Support
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * <http://ftp.sas.com/standards/large.file/x_open.20Mar96.html>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#if defined(_POSIX_SOURCE) && !defined(_POSIX_C_SOURCE)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define _POSIX_C_SOURCE 1L
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#if !defined(_ANSI_SOURCE) && !defined(_POSIX_C_SOURCE) && \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync !defined(_XOPEN_SOURCE) && !defined(_NETBSD_SOURCE)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define _NETBSD_SOURCE 1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#if ((_POSIX_C_SOURCE - 0) >= 199506L || (_XOPEN_SOURCE - 0) >= 500) && \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync !defined(_REENTRANT)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define _REENTRANT
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif