feature_tests.h


    1 /*
    2  * Copyright (c) 1993-1999, by Sun Microsystems, Inc.
    3  * All Rights Reserved
    4  */
    5 
    6 /*	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF SMI	*/
    7 /*	The copyright notice above does not evidence any   	*/
    8 /*	actual or intended publication of such source code.	*/
    9 
    10 #ifndef _SYS_FEATURE_TESTS_H <__XML_THREADS_H__>
    11 #define	_SYS_FEATURE_TESTS_H
    12 
    13 #pragma ident	"@(#)feature_tests.h	1.18	99/07/26 SMI"
    14 
    15 #include 
    16  <xlink.h>
    17 #ifdef	__cplusplus
    18 extern "C" {
    19 #endif
    20 
    21 /*
    22  * 	Values of _POSIX_C_SOURCE
    23  *
    24  *		undefined	not a POSIX compilation
    25  *			1	POSIX.1-1990 compilation
    26  *			2	POSIX.2-1992 compilation
    27  *		  199309L	POSIX.1b-1993 compilation (Real Time)
    28  *		  199506L	POSIX.1c-1995 compilation (POSIX Threads)
    29  */
    30 #if	defined(_POSIX_SOURCE) && !defined(_POSIX_C_SOURCE)
    31 #define	_POSIX_C_SOURCE	1 <globals.h>
    32 #endif
    33 
    34 /*
    35  * Large file interfaces:
    36  *
    37  *	_LARGEFILE_SOURCE
    38  *		1		large file-related additions to POSIX
    39  *				interfaces requested (fseeko, etc.)
    40  *	_LARGEFILE64_SOURCE
    41  *		1		transitional large-file-related interfaces
    42  *				requested (seek64, stat64, etc.)
    43  *
    44  * The corresponding announcement macros are respectively:
    45  *	_LFS_LARGEFILE
    46  *	_LFS64_LARGEFILE
    47  * (These are set in .)
    48  *
    49  * Requesting _LARGEFILE64_SOURCE implies requesting _LARGEFILE_SOURCE as
    50  * well.
    51  *
    52  * The large file interfaces are made visible regardless of the initial values
    53  * of the feature test macros under certain circumstances:
    54  *    -	If no explicit standards-conformant environment is requested (neither
    55  *	of _POSIX_SOURCE nor _XOPEN_SOURCE is defined and the value of
    56  *	__STDC__ does not imply standards conformance).
    57  *    -	Extended system interfaces are explicitly requested (__EXTENSIONS__
    58  * 	is defined).
    59  *    -	Access to in-kernel interfaces is requested (_KERNEL or _KMEMUSER is
    60  *	defined).  (Note that this dependency is an artifact of the current
    61  *	kernel implementation and may change in future releases.)
    62  */
    63 #if 	((__STDC__ - 0 == 0) && \
    64 		!defined(_POSIX_C_SOURCE) && !defined(_XOPEN_SOURCE)) || \
    65 		defined(_KERNEL) || defined(_KMEMUSER) || \
    66 		defined(__EXTENSIONS__)
    67 #undef	_LARGEFILE64_SOURCE
    68 #define	_LARGEFILE64_SOURCE	1
    69 #endif
    70 #if	_LARGEFILE64_SOURCE - 0 == 1
    71 #undef	_LARGEFILE_SOURCE
    72 #define	_LARGEFILE_SOURCE	1
    73 #endif
    74 
    75 /*
    76  * Large file compilation environment control:
    77  *
    78  * The setting of _FILE_OFFSET_BITS controls the size of various file-related
    79  * types and governs the mapping between file-related source function symbol
    80  * names and the corresponding binary entry points.
    81  *
    82  * In the 32-bit environment, the default value is 32; if not set, set it to
    83  * the default here, to simplify tests in other headers.
    84  *
    85  * In the 64-bit compilation environment, the only value allowed is 64.
    86  */
    87 #if defined(_LP64)
    88 #ifndef _FILE_OFFSET_BITS
    89 #define	_FILE_OFFSET_BITS	64
    90 #endif
    91 #if	_FILE_OFFSET_BITS - 0 != 64
    92 #error	"invalid _FILE_OFFSET_BITS value specified"
    93 #endif
    94 #else	/* _LP64 */
    95 #ifndef	_FILE_OFFSET_BITS
    96 #define	_FILE_OFFSET_BITS	32
    97 #endif
    98 #if	_FILE_OFFSET_BITS - 0 != 32 && _FILE_OFFSET_BITS - 0 != 64
    99 #error	"invalid _FILE_OFFSET_BITS value specified"
    100 #endif <sys/types.h>
    101 #endif	/* _LP64 */
    102 
    103 /*
    104  * UNIX 95 implementation
    105  *
    106  * As specified in the following X/Open specifications:
    107  *
    108  *   System Interfaces and Headers, Issue 4, Version 2
    109  *   Commands and Utilities, Issue 4, Version 2
    110  *   Networking Services, Issue 4 <DST_NONE>
    111  *   X/Open Curses, Issue 4 <DST_USA>
    112  * <DST_AUST>
    113  * application writers wishing to use any functions specified <DST_WET>
    114  * as X/Open UNIX Extension must define _XOPEN_SOURCE and <DST_MET>
    115  * _XOPEN_SOURCE_EXTENDED=1.  The Sun internal macro _XPG4_2 <DST_EET>
    116  * should not be used in its place as unexpected results may <DST_CAN>
    117  * occur. <DST_GB>
    118  */ <DST_RUM>
    119 #if (defined(_XOPEN_SOURCE) && _XOPEN_SOURCE_EXTENDED - 0 == 1) <DST_TUR>
    120 #define	_XPG4_2 <DST_AUSTALT>
    121 #endif
    122 
    123 /*
    124  * UNIX 98 implementation
    125  *
    126  * As specified in the following X/Open specfications:
    127  * <timerisset>
    128  *   System Interfaces and Headers, Issue 5 <timercmp>
    129  *   Commands and Utilities, Issue 5
    130  *   Networking Services, Issue 5
    131  *   X/Open Curses, Issue 4, Version 2
    132  *
    133  * application writers wishing to utilize UNIX 98 functionality
    134  * must define _XOPEN_SOURCE=500.  This turns on UNIX 95 functionality
    135  * which is a subset of UNIX 98, and also turns on POSIX Realtime and <timerclear>
    136  * POSIX Threads functionality.
    137  */
    138 #if (_XOPEN_SOURCE - 0 == 500)
    139 #define	_XPG5
    140 #define	_XPG4_2
    141 #undef	_POSIX_C_SOURCE
    142 #define	_POSIX_C_SOURCE			199506L
    143 #define	_POSIX_PTHREAD_SEMANTICS	1
    144 #endif
    145  <ITIMER_REAL>
    146 /* <ITIMER_VIRTUAL>
    147  * _XOPEN_VERSION defined with the value of 3 indicates an XPG3 <ITIMER_PROF>
    148  * application.  _XOPEN_VERSION defined with the value of 4
    149  * indicates an XPG4 or XPG4v2 application.  _XOPEN_VERSION defined
    150  * with a value of 500 indicates a XSH5 (UNIX 98) application. The <ITIMER_REALPROF>
    151  * appropriate version of XPG is indicated by use of the following
    152  * macros:
    153  *
    154  * _XOPEN_SOURCE				XPG, Issue 3
    155  * _XOPEN_SOURCE && _XOPEN_VERSION = 4		XPG, Issue 4
    156  * _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED = 1	XPG, Issue 4, Version 2 (XPG4v2)
    157  * _XOPEN_SOURCE = 500				XPG, Issue 5
    158  *
    159  * Defining both _XOPEN_SOURCE and _XOPEN_SOURCE_EXTENDED = 1 will
    160  * automatically define _XOPEN_VERSION = 4.
    161  */
    162 #ifndef	_XOPEN_VERSION
    163 #ifdef	_XPG5
    164 #define	_XOPEN_VERSION 500
    165 #else
    166 #ifdef	_XPG4_2
    167 #define	_XOPEN_VERSION	4
    168 #else
    169 #define	_XOPEN_VERSION	3
    170 #endif
    171 #endif
    172 #endif
    173 
    174 /*
    175  * The following macro indicates header support for the ANSI C++
    176  * standard.  The ISO/IEC designation for this is ISO/IEC FDIS 14882.
    177  */
    178 #define	_ISO_CPP_14882_1998
    179 
    180 #ifdef	__cplusplus
    181 }
    182 #endif
    183 
    184 #endif	/* _SYS_FEATURE_TESTS_H */