Annotation of coherent/f/usr/include/common/feature.h, revision 1.1.1.1

1.1       root        1: #ifndef        __COMMON_FEATURE_H__
                      2: #define        __COMMON_FEATURE_H__
                      3: 
                      4: /*
                      5:  * This header file deals with some minor complications that exist in the
                      6:  * world of feature-tests. Standard style for new code is to use the simpler
                      7:  * and more powerful #if test rather than the cumbersome and less useful
                      8:  * #ifdef/#ifndef tests that untutored programmers gravitate to.
                      9:  *
                     10:  * However, this is made more difficult by historical problems, and some
                     11:  * latitude extended to users. For example, while POSIX.1 introduces a
                     12:  * feature-test macro such as _POSIX_SOURCE, no value for this macro was
                     13:  * recommended, and so users typically #define this symbol to have no value,
                     14:  * making the #if form of feature-test more complex. Conversely, the ISO C
                     15:  * standard mandates a value for __STDC__, but users have uniformly ignored
                     16:  * this fact.
                     17:  *
                     18:  * This file mutates definitions of well-known feature tests so that the #if
                     19:  * form of test can be used universally. This means using several tricks to
                     20:  * detect such things as symbols with empty values, but such tricks break down
                     21:  * if users are perverse and #define symbols like _POSIX_SOURCE with values
                     22:  * that are strings or which cannot be evaluated. For such symbols, we have
                     23:  * an option which will simply force the feature to value 1 rather than trying
                     24:  * to be clever. This means that some utility is lost (in the sense that
                     25:  * features cannot have graduated values for purposes such as selecting
                     26:  * versions) so this is off by default.
                     27:  */
                     28: 
                     29: #define        __EMPTY(x)              ((1 - x - 1) == 2)
                     30: 
                     31: #define        __UNDEFINED_OR_EMPTY(x) (! defined (x) || __EMPTY (x))
                     32: 
                     33: #ifdef _FORCE_TO_ONE
                     34: # undef                _FORCE_TO_ONE
                     35: # define       _FORCE_TO_ONE   1
                     36: #endif
                     37: 
                     38: #if    defined (_POSIX_SOURCE)
                     39: # if   _FORCE_TO_ONE
                     40: 
                     41: #  undef       _POSIX_SOURCE
                     42: #  define      _POSIX_SOURCE   1
                     43: 
                     44: # elif __EMPTY (_POSIX_SOURCE)
                     45: 
                     46: #  undef       _POSIX_SOURCE
                     47: #  define      _POSIX_SOURCE   1
                     48: 
                     49: #endif
                     50: #endif
                     51: 
                     52: 
                     53: 
                     54: /*
                     55:  * We have a feature-test _STDC_SOURCE analagous to _POSIX_SOURCE which
                     56:  * selects a minimal ISO C compilation environment. This is mutually exclusive
                     57:  * with _POSIX_SOURCE. We could either complain or do something tricky like
                     58:  * select the one with the highest value.
                     59:  */
                     60: 
                     61: #if    _STDC_SOUCE || _POSIX_SOURCE
                     62: # if   _STDC_SOURCE > _POSIX_SOURCE
                     63: 
                     64: #  undef       _POSIX_SOURCE
                     65: 
                     66: # elif _STDC_SOURCE < _POSIX_SOURCE
                     67: 
                     68: #  undef       _STDC_SOURCE
                     69: 
                     70: # else
                     71: 
                     72: #  error You cannot select both _POSIX_SOURCE and _STDC_SOURCE in a compilation
                     73: 
                     74: # endif
                     75: #endif
                     76: 
                     77: /*
                     78:  * For Coherent: avoid the use of COHERENT as a feature-test, use __COHERENT__
                     79:  * instead.
                     80:  */
                     81: 
                     82: #ifdef KERNEL
                     83: 
                     84: #undef KERNEL
                     85: #undef __KERNEL__
                     86: #define        __KERNEL__      1
                     87: 
                     88: #endif
                     89: 
                     90: #ifdef COHERENT
                     91: 
                     92: #undef __COHERENT__
                     93: #define        __COHERENT__    1
                     94: 
                     95: #endif
                     96: 
                     97: /*
                     98:  * The MWC port of GCC botches -ansi mode by not defining _I386; here we put
                     99:  * it back in again. This also serves to define _I386 for those systems that
                    100:  * traditionally just define "i386".
                    101:  */
                    102: 
                    103: #if    __GNUC__ && (defined (i386) || __COHERENT__) && ! defined (_I386)
                    104: # define       _I386   1
                    105: #endif
                    106: 
                    107: #endif /* ! defined (__COMMON_FEATURE_H__) */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.