Print this page
2964 need POSIX 2008 locale object support
Reviewed by: Robert Mustacchi <rm@joyent.com>

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/sys/feature_tests.h
          +++ new/usr/src/uts/common/sys/feature_tests.h
↓ open down ↓ 15 lines elided ↑ open up ↑
  16   16   * fields enclosed by brackets "[]" replaced with your own identifying
  17   17   * information: Portions Copyright [yyyy] [name of copyright owner]
  18   18   *
  19   19   * CDDL HEADER END
  20   20   */
  21   21  
  22   22  /*
  23   23   * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
  24   24   * Use is subject to license terms.
  25   25   */
       26 +/*
       27 + * Copyright 2013 Garrett D'Amore <garrett@damore.org>
       28 + */
  26   29  
  27   30  #ifndef _SYS_FEATURE_TESTS_H
  28   31  #define _SYS_FEATURE_TESTS_H
  29   32  
  30   33  #include <sys/ccompile.h>
  31   34  #include <sys/isa_defs.h>
  32   35  
  33   36  #ifdef  __cplusplus
  34   37  extern "C" {
  35   38  #endif
  36   39  
  37   40  /*
  38   41   * Values of _POSIX_C_SOURCE
  39   42   *
  40   43   *              undefined   not a POSIX compilation
  41   44   *              1           POSIX.1-1990 compilation
  42   45   *              2           POSIX.2-1992 compilation
  43   46   *              199309L     POSIX.1b-1993 compilation (Real Time)
  44   47   *              199506L     POSIX.1c-1995 compilation (POSIX Threads)
  45   48   *              200112L     POSIX.1-2001 compilation (Austin Group Revision)
       49 + *              200809L     POSIX.1-2008 compilation
  46   50   */
  47   51  #if defined(_POSIX_SOURCE) && !defined(_POSIX_C_SOURCE)
  48   52  #define _POSIX_C_SOURCE 1
  49   53  #endif
  50   54  
  51   55  /*
  52      - * The feature test macros __XOPEN_OR_POSIX, _STRICT_STDC, and _STDC_C99
  53      - * are Sun implementation specific macros created in order to compress
  54      - * common standards specified feature test macros for easier reading.
       56 + * The feature test macros __XOPEN_OR_POSIX, _STRICT_STDC, _STRICT_SYMBOLS,
       57 + * and _STDC_C99 are Sun implementation specific macros created in order to
       58 + * compress common standards specified feature test macros for easier reading.
  55   59   * These macros should not be used by the application developer as
  56   60   * unexpected results may occur. Instead, the user should reference
  57   61   * standards(5) for correct usage of the standards feature test macros.
  58   62   *
  59   63   * __XOPEN_OR_POSIX     Used in cases where a symbol is defined by both
  60   64   *                      X/Open or POSIX or in the negative, when neither
  61   65   *                      X/Open or POSIX defines a symbol.
  62   66   *
  63   67   * _STRICT_STDC         __STDC__ is specified by the C Standards and defined
  64   68   *                      by the compiler. For Sun compilers the value of
↓ open down ↓ 5 lines elided ↑ open up ↑
  70   74   *                      Standard. _STRICT_STDC provides a more readable means
  71   75   *                      of identifying symbols defined by the standard, or in
  72   76   *                      the negative, symbols that are extensions to the C
  73   77   *                      Standard. See additional comments for GNU C differences.
  74   78   *
  75   79   * _STDC_C99            __STDC_VERSION__ is specified by the C standards and
  76   80   *                      defined by the compiler and indicates the version of
  77   81   *                      the C standard. A value of 199901L indicates a
  78   82   *                      compiler that complies with ISO/IEC 9899:1999, other-
  79   83   *                      wise known as the C99 standard.
       84 + *
       85 + * _STRICT_SYMBOLS      Used in cases where symbol visibility is restricted
       86 + *                      by the standards, and the user has not explicitly
       87 + *                      relaxed the strictness via __EXTENSIONS__.
  80   88   */
  81   89  
  82   90  #if defined(_XOPEN_SOURCE) || defined(_POSIX_C_SOURCE)
  83   91  #define __XOPEN_OR_POSIX
  84   92  #endif
  85   93  
  86   94  /*
  87   95   * ISO/IEC 9899:1990 and it's revision, ISO/IEC 9899:1999 specify the
  88   96   * following predefined macro name:
  89   97   *
↓ open down ↓ 47 lines elided ↑ open up ↑
 137  145  
 138  146  /*
 139  147   * Compiler complies with ISO/IEC 9899:1999
 140  148   */
 141  149  
 142  150  #if __STDC_VERSION__ - 0 >= 199901L
 143  151  #define _STDC_C99
 144  152  #endif
 145  153  
 146  154  /*
      155 + * Use strict symbol visibility.
      156 + */
      157 +#if (defined(_STRICT_STDC) || defined(__XOPEN_OR_POSIX)) && \
      158 +        !defined(__EXTENSIONS__)
      159 +#define _STRICT_SYMBOLS
      160 +#endif
      161 +
      162 +/*
 147  163   * Large file interfaces:
 148  164   *
 149  165   *      _LARGEFILE_SOURCE
 150  166   *              1               large file-related additions to POSIX
 151  167   *                              interfaces requested (fseeko, etc.)
 152  168   *      _LARGEFILE64_SOURCE
 153  169   *              1               transitional large-file-related interfaces
 154  170   *                              requested (seek64, stat64, etc.)
 155  171   *
 156  172   * The corresponding announcement macros are respectively:
↓ open down ↓ 58 lines elided ↑ open up ↑
 215  231   * Use of _XOPEN_SOURCE
 216  232   *
 217  233   * The following X/Open specifications are supported:
 218  234   *
 219  235   * X/Open Portability Guide, Issue 3 (XPG3)
 220  236   * X/Open CAE Specification, Issue 4 (XPG4)
 221  237   * X/Open CAE Specification, Issue 4, Version 2 (XPG4v2)
 222  238   * X/Open CAE Specification, Issue 5 (XPG5)
 223  239   * Open Group Technical Standard, Issue 6 (XPG6), also referred to as
 224  240   *    IEEE Std. 1003.1-2001 and ISO/IEC 9945:2002.
      241 + * Open Group Technical Standard, Issue 7 (XPG7), also referred to as
      242 + *    IEEE Std. 1003.1-2008 and ISO/IEC 9945:2009.
 225  243   *
 226  244   * XPG4v2 is also referred to as UNIX 95 (SUS or SUSv1).
 227  245   * XPG5 is also referred to as UNIX 98 or the Single Unix Specification,
 228  246   *     Version 2 (SUSv2)
 229  247   * XPG6 is the result of a merge of the X/Open and POSIX specifications
 230  248   *     and as such is also referred to as IEEE Std. 1003.1-2001 in
 231  249   *     addition to UNIX 03 and SUSv3.
      250 + * XPG7 is also referred to as UNIX 08 and SUSv4.
 232  251   *
 233  252   * When writing a conforming X/Open application, as per the specification
 234  253   * requirements, the appropriate feature test macros must be defined at
 235  254   * compile time. These are as follows. For more info, see standards(5).
 236  255   *
 237  256   * Feature Test Macro                                Specification
 238  257   * ------------------------------------------------  -------------
 239  258   * _XOPEN_SOURCE                                         XPG3
 240  259   * _XOPEN_SOURCE && _XOPEN_VERSION = 4                   XPG4
 241  260   * _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED = 1           XPG4v2
 242  261   * _XOPEN_SOURCE = 500                                   XPG5
 243  262   * _XOPEN_SOURCE = 600  (or POSIX_C_SOURCE=200112L)      XPG6
      263 + * _XOPEN_SOURCE = 700  (or POSIX_C_SOURCE=200809L)      XPG7
 244  264   *
 245  265   * In order to simplify the guards within the headers, the following
 246  266   * implementation private test macros have been created. Applications
 247  267   * must NOT use these private test macros as unexpected results will
 248  268   * occur.
 249  269   *
 250  270   * Note that in general, the use of these private macros is cumulative.
 251  271   * For example, the use of _XPG3 with no other restrictions on the X/Open
 252  272   * namespace will make the symbols visible for XPG3 through XPG6
 253  273   * compilation environments. The use of _XPG4_2 with no other X/Open
 254  274   * namespace restrictions indicates that the symbols were introduced in
 255  275   * XPG4v2 and are therefore visible for XPG4v2 through XPG6 compilation
 256  276   * environments, but not for XPG3 or XPG4 compilation environments.
 257  277   *
 258  278   * _XPG3    X/Open Portability Guide, Issue 3 (XPG3)
 259  279   * _XPG4    X/Open CAE Specification, Issue 4 (XPG4)
 260  280   * _XPG4_2  X/Open CAE Specification, Issue 4, Version 2 (XPG4v2/UNIX 95/SUS)
 261  281   * _XPG5    X/Open CAE Specification, Issue 5 (XPG5/UNIX 98/SUSv2)
 262  282   * _XPG6    Open Group Technical Standard, Issue 6 (XPG6/UNIX 03/SUSv3)
      283 + * _XPG7    Open Group Technical Standard, Issue 7 (XPG7/UNIX 08/SUSv4)
 263  284   */
 264  285  
 265  286  /* X/Open Portability Guide, Issue 3 */
 266  287  #if defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE - 0 < 500) && \
 267  288          (_XOPEN_VERSION - 0 < 4) && !defined(_XOPEN_SOURCE_EXTENDED)
 268  289  #define _XPG3
 269  290  /* X/Open CAE Specification, Issue 4 */
 270  291  #elif   (defined(_XOPEN_SOURCE) && _XOPEN_VERSION - 0 == 4)
 271  292  #define _XPG4
 272  293  #define _XPG3
↓ open down ↓ 14 lines elided ↑ open up ↑
 287  308  #elif   (_XOPEN_SOURCE - 0 == 600) || (_POSIX_C_SOURCE - 0 == 200112L)
 288  309  #define _XPG6
 289  310  #define _XPG5
 290  311  #define _XPG4_2
 291  312  #define _XPG4
 292  313  #define _XPG3
 293  314  #undef  _POSIX_C_SOURCE
 294  315  #define _POSIX_C_SOURCE                 200112L
 295  316  #undef  _XOPEN_SOURCE
 296  317  #define _XOPEN_SOURCE                   600
      318 +
      319 +/* Open Group Technical Standard, Issue 7 */
      320 +#elif   (_XOPEN_SOURCE - 0 == 700) || (_POSIX_C_SOURCE - 0 == 200809L)
      321 +#define _XPG7
      322 +#define _XPG6
      323 +#define _XPG5
      324 +#define _XPG4_2
      325 +#define _XPG4
      326 +#define _XPG3
      327 +#undef  _POSIX_C_SOURCE
      328 +#define _POSIX_C_SOURCE                 200809L
      329 +#undef  _XOPEN_SOURCE
      330 +#define _XOPEN_SOURCE                   700
 297  331  #endif
 298  332  
 299  333  /*
 300  334   * _XOPEN_VERSION is defined by the X/Open specifications and is not
 301  335   * normally defined by the application, except in the case of an XPG4
 302  336   * application.  On the implementation side, _XOPEN_VERSION defined with
 303  337   * the value of 3 indicates an XPG3 application. _XOPEN_VERSION defined
 304  338   * with the value of 4 indicates an XPG4 or XPG4v2 (UNIX 95) application.
 305  339   * _XOPEN_VERSION  defined with a value of 500 indicates an XPG5 (UNIX 98)
 306  340   * application and with a value of 600 indicates an XPG6 (UNIX 03)
 307      - * application.  The appropriate version is determined by the use of the
      341 + * application and with a value of 700 indicates an XPG7 (UNIX 08).
      342 + * The appropriate version is determined by the use of the
 308  343   * feature test macros described earlier.  The value of _XOPEN_VERSION
 309  344   * defaults to 3 otherwise indicating support for XPG3 applications.
 310  345   */
 311  346  #ifndef _XOPEN_VERSION
 312      -#ifdef  _XPG6
      347 +#if     defined(_XPG7)
      348 +#define _XOPEN_VERSION 700
      349 +#elif   defined(_XPG6)
 313  350  #define _XOPEN_VERSION 600
 314  351  #elif defined(_XPG5)
 315  352  #define _XOPEN_VERSION 500
 316  353  #elif   defined(_XPG4_2)
 317  354  #define _XOPEN_VERSION  4
 318  355  #else
 319  356  #define _XOPEN_VERSION  3
 320  357  #endif
 321  358  #endif
 322  359  
↓ open down ↓ 72 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX