| 1 | # This Python script creates a full set of C++ C header files that | 
|---|
| 2 | # are missing on some platforms. | 
|---|
| 3 | # | 
|---|
| 4 | # Usage: | 
|---|
| 5 | #   mkdir cpp_c_headers | 
|---|
| 6 | #   cd cpp_c_headers | 
|---|
| 7 | #   python generate_cpp_c_headers.py | 
|---|
| 8 | # | 
|---|
| 9 | # The files created by this script are in the directory: | 
|---|
| 10 | #   root/boost/compatibility/cpp_c_headers | 
|---|
| 11 | # | 
|---|
| 12 | # Supported platforms: | 
|---|
| 13 | #   Compaq Alpha, RedHat 6.2 Linux, Compaq C++ V6.3 (cxx) | 
|---|
| 14 | #   Compaq Alpha, Tru64 Unix V5.0, Compaq C++ V6.2 (cxx) | 
|---|
| 15 | #   Silicon Graphics, IRIX 6.5, MIPSpro Compilers: Version 7.3.1.1m (CC) | 
|---|
| 16 | # | 
|---|
| 17 | # Support for additional platforms can be added by extending the | 
|---|
| 18 | # "defines" Python dictionary below. | 
|---|
| 19 | # | 
|---|
| 20 | # Python is available at: | 
|---|
| 21 | #   http://www.python.org/ | 
|---|
| 22 | # | 
|---|
| 23 | # Copyright (c) 2001 Ralf W. Grosse-Kunstleve. | 
|---|
| 24 | # Distributed under the Boost Software License, Version 1.0. (See accompany- | 
|---|
| 25 | # ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) | 
|---|
| 26 | # | 
|---|
| 27 | # Revision history: | 
|---|
| 28 | #   16 Apr 01 moved to boost CVS tree (R.W. Grosse-Kunstleve) | 
|---|
| 29 | #   17 Jan 01 Alpha Linux cxx V6.3 support (R.W. Grosse-Kunstleve) | 
|---|
| 30 | #   15 Dec 00 posted to boost e-group file upload area (R.W. Grosse-Kunstleve) | 
|---|
| 31 |  | 
|---|
| 32 | # Definition of platform specific exclusion of identifiers. | 
|---|
| 33 | defines = { | 
|---|
| 34 |   'defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 740': ( | 
|---|
| 35 |     'btowc', 'fwide', 'fwprintf', 'fwscanf', 'mbrlen', 'mbrtowc', | 
|---|
| 36 |     'mbsinit', 'mbsrtowcs', 'swprintf', 'swscanf', 'towctrans', 'vfwprintf', | 
|---|
| 37 |     'vswprintf', 'vwprintf', 'wcrtomb', 'wcsrtombs', 'wctob', 'wctrans', | 
|---|
| 38 |     'wctrans_t', 'wmemchr', 'wmemcmp', 'wmemcpy', 'wmemmove', 'wmemset', | 
|---|
| 39 |     'wprintf', 'wscanf', | 
|---|
| 40 |   ), | 
|---|
| 41 |   'defined(__DECCXX_VER) && __DECCXX_VER <= 60290024': ( | 
|---|
| 42 |     'fwide', | 
|---|
| 43 |   ), | 
|---|
| 44 |   'defined(__linux) && defined(__DECCXX_VER) && __DECCXX_VER <= 60390005': ( | 
|---|
| 45 |     'getwchar', 'ungetwc', 'fgetwc', 'vfwprintf', 'fgetws', 'vswprintf', | 
|---|
| 46 |     'wcsftime', 'fputwc', 'vwprintf', 'fputws', 'fwide', 'putwc', | 
|---|
| 47 |     'wprintf', 'fwprintf', 'putwchar', 'wscanf', 'fwscanf', 'swprintf', | 
|---|
| 48 |     'getwc', 'swscanf', | 
|---|
| 49 |   ), | 
|---|
| 50 | } | 
|---|
| 51 |  | 
|---|
| 52 | # The information below was copied directly from the file: | 
|---|
| 53 | #   ISO+IEC+14882-1998.pdf | 
|---|
| 54 | # The exact source of the information is given in the format | 
|---|
| 55 | #   PDF #, p. #, Table # | 
|---|
| 56 | # Where | 
|---|
| 57 | #   PDF # = page number as shown by the Acrobat Reader | 
|---|
| 58 | #   p. # = page number printed at the bottom of the page | 
|---|
| 59 | #   Table # = number printed in caption of table | 
|---|
| 60 | hfiles = { | 
|---|
| 61 |   'cassert': ( # PDF 378, p. 352, Table 25 | 
|---|
| 62 |     # Macro: assert | 
|---|
| 63 |   ), | 
|---|
| 64 |   'cctype': ( # PDF 431, p. 405, Table 45 | 
|---|
| 65 |     # Functions: | 
|---|
| 66 |       'isalnum', 'isdigit', 'isprint', 'isupper', 'tolower', | 
|---|
| 67 |       'isalpha', 'isgraph', 'ispunct', 'isxdigit', 'toupper', | 
|---|
| 68 |       'iscntrl', 'islower', 'isspace', | 
|---|
| 69 |   ), | 
|---|
| 70 |   'cerrno': ( # PDF 378, p. 352, Table 26 | 
|---|
| 71 |     # Macros: EDOM ERANGE errno | 
|---|
| 72 |   ), | 
|---|
| 73 |   'cfloat': ( # PDF 361, p. 335, Table 17 | 
|---|
| 74 |     # Macros: DBL_DIG DBL_MIN_EXP FLT_MIN_10_EXP LDBL_MAX_10_EXP | 
|---|
| 75 |     #         DBL_EPSILON FLT_DIG FLT_MIN_EXP LDBL_MAX_EXP | 
|---|
| 76 |     #         DBL_MANT_DIG FLT_EPSILON FLT_RADIX LDBL_MIN | 
|---|
| 77 |     #         DBL_MAX FLT_MANT_DIG FLT_ROUNDS LDBL_MIN_10_EXP | 
|---|
| 78 |     #         DBL_MAX_10_EXP FLT_MAX LDBL_DIG LDBL_MIN_EXP | 
|---|
| 79 |     #         DBL_MAX_EXP FLT_MAX_10_EXP LDBL_EPSILON | 
|---|
| 80 |     #         DBL_MIN FLT_MAX_EXP LDBL_MANT_DIG | 
|---|
| 81 |     #         DBL_MIN_10_EXP FLT_MIN LDBL_MAX | 
|---|
| 82 |   ), | 
|---|
| 83 |   #'ciso646': ( | 
|---|
| 84 |   #), | 
|---|
| 85 |   'climits': ( # PDF 361, p. 335, Table 16 | 
|---|
| 86 |     # Macros: CHAR_BIT INT_MAX LONG_MIN SCHAR_MIN UCHAR_MAX USHRT_MAX | 
|---|
| 87 |     #         CHAR_MAX INT_MIN MB_LEN_MAX SHRT_MAX UINT_MAX | 
|---|
| 88 |     #         CHAR_MIN LONG_MAX SCHAR_MAX SHRT_MIN ULONG_MAX | 
|---|
| 89 |   ), | 
|---|
| 90 |   'clocale': ( # PDF 483, p. 457, Table 62 | 
|---|
| 91 |     # Macros: LC_ALL LC_COLLATE LC_CTYPE | 
|---|
| 92 |     #         LC_MONETARY LC_NUMERIC LC_TIME | 
|---|
| 93 |     #         NULL | 
|---|
| 94 |     # Struct: | 
|---|
| 95 |       'lconv', | 
|---|
| 96 |     # Functions: | 
|---|
| 97 |       'localeconv', 'setlocale', | 
|---|
| 98 |   ), | 
|---|
| 99 |   'cmath': ( # PDF 622, p. 596, Table 80 | 
|---|
| 100 |     # Macro: HUGE_VAL | 
|---|
| 101 |     # Functions: | 
|---|
| 102 |       'acos', 'cos', 'fmod', 'modf', 'tan', | 
|---|
| 103 |       'asin', 'cosh', 'frexp', 'pow', 'tanh', | 
|---|
| 104 |       'atan', 'exp', 'ldexp', 'sin', | 
|---|
| 105 |       'atan2', 'fabs', 'log', 'sinh', | 
|---|
| 106 |       'ceil', 'floor', 'log10', 'sqrt', | 
|---|
| 107 |   ), | 
|---|
| 108 |   'csetjmp': ( # PDF 372, p. 346, Table 20 | 
|---|
| 109 |     # Macro: setjmp | 
|---|
| 110 |     # Type: | 
|---|
| 111 |       'jmp_buf', | 
|---|
| 112 |     # Function: | 
|---|
| 113 |       'longjmp', | 
|---|
| 114 |   ), | 
|---|
| 115 |   'csignal': ( # PDF 372, p. 346, Table 22 | 
|---|
| 116 |     # Macros: SIGABRT SIGILL SIGSEGV SIG_DFL | 
|---|
| 117 |     #         SIG_IGN SIGFPE SIGINT SIGTERM SIG_ERR | 
|---|
| 118 |     # Type: | 
|---|
| 119 |       'sig_atomic_t', | 
|---|
| 120 |     # Functions: | 
|---|
| 121 |       'raise', 'signal', | 
|---|
| 122 |   ), | 
|---|
| 123 |   'cstdarg': ( # PDF 372, p. 346, Table 19 | 
|---|
| 124 |     # Macros: va_arg va_end va_start | 
|---|
| 125 |     # Type: | 
|---|
| 126 |       'va_list', | 
|---|
| 127 |   ), | 
|---|
| 128 |   'cstddef': ( # PDF 353, p. 327, Table 15 | 
|---|
| 129 |     # Macros: NULL offsetof | 
|---|
| 130 |     # Types: | 
|---|
| 131 |       'ptrdiff_t', 'size_t', | 
|---|
| 132 |   ), | 
|---|
| 133 |   'cstdio': ( # PDF 692, p. 666, Table 94 | 
|---|
| 134 |     # Macros: BUFSIZ FOPEN_MAX SEEK_CUR TMP_MAX _IONBF stdout | 
|---|
| 135 |     #         EOF L_tmpnam SEEK_END _IOFBF stderr | 
|---|
| 136 |     #         FILENAME_MAX NULL <cstdio> SEEK_SET _IOLBF stdin | 
|---|
| 137 |     # Types: | 
|---|
| 138 |       'FILE', 'fpos_t', 'size_t', | 
|---|
| 139 |     # Functions: | 
|---|
| 140 |       'clearerr', 'fgets', 'fscanf', 'gets', 'rename', 'tmpfile', | 
|---|
| 141 |       'fclose', 'fopen', 'fseek', 'perror', 'rewind', 'tmpnam', | 
|---|
| 142 |       'feof', 'fprintf', 'fsetpos', 'printf', 'scanf', 'ungetc', | 
|---|
| 143 |       'ferror', 'fputc', 'ftell', 'putc', 'setbuf', 'vfprintf', | 
|---|
| 144 |       'fflush', 'fputs', 'fwrite', 'putchar', 'setvbuf', 'vprintf', | 
|---|
| 145 |       'fgetc', 'fread', 'getc', 'puts', 'sprintf', 'vsprintf', | 
|---|
| 146 |       'fgetpos', 'freopen', 'getchar', 'remove', 'sscanf', | 
|---|
| 147 |   ), | 
|---|
| 148 |   'cstdlib': ( # PDF 362, p. 336, Table 18 | 
|---|
| 149 |     # Macros: EXIT_FAILURE EXIT_SUCCESS | 
|---|
| 150 |     # Functions: | 
|---|
| 151 |       'abort', 'atexit', 'exit', | 
|---|
| 152 |                # PDF 373, p. 347, Table 23 | 
|---|
| 153 |     # Functions: | 
|---|
| 154 |       'getenv', 'system', | 
|---|
| 155 |                # PDF 400, p. 374, Table 33 | 
|---|
| 156 |     # Functions: | 
|---|
| 157 |       'calloc', 'malloc', | 
|---|
| 158 |       'free', 'realloc', | 
|---|
| 159 |                # PDF 433, p. 417, Table 49 | 
|---|
| 160 |     # Macros: MB_CUR_MAX | 
|---|
| 161 |     # Functions: | 
|---|
| 162 |       'atol', 'mblen', 'strtod', 'wctomb', | 
|---|
| 163 |       'atof', 'mbstowcs', 'strtol', 'wcstombs', | 
|---|
| 164 |       'atoi', 'mbtowc', 'strtoul', | 
|---|
| 165 |                # PDF 589, p. 563, Table 78 | 
|---|
| 166 |     # Functions: | 
|---|
| 167 |       'bsearch', 'qsort', | 
|---|
| 168 |                # PDF 622, p. 596, Table 81 | 
|---|
| 169 |     # Macros: RAND_MAX | 
|---|
| 170 |     # Types: | 
|---|
| 171 |       'div_t', 'ldiv_t', | 
|---|
| 172 |     # Functions: | 
|---|
| 173 |       'abs', 'labs', 'srand', | 
|---|
| 174 |       'div', 'ldiv', 'rand', | 
|---|
| 175 |   ), | 
|---|
| 176 |   'cstring': ( # PDF 401, p. 375, Table 34 | 
|---|
| 177 |     # Macro: NULL | 
|---|
| 178 |     # Type: size_t | 
|---|
| 179 |     # Functions: | 
|---|
| 180 |     # 'memchr', 'memcmp', | 
|---|
| 181 |     # 'memcpy', 'memmove', 'memset', | 
|---|
| 182 |                # PDF 432, p. 406, Table 47 | 
|---|
| 183 |     # Macro: NULL | 
|---|
| 184 |     # Type: | 
|---|
| 185 |       'size_t', | 
|---|
| 186 |     # Functions: | 
|---|
| 187 |       'memchr', 'strcat', 'strcspn', 'strncpy', 'strtok', | 
|---|
| 188 |       'memcmp', 'strchr', 'strerror', 'strpbrk', 'strxfrm', | 
|---|
| 189 |       'memcpy', 'strcmp', 'strlen', 'strrchr', | 
|---|
| 190 |       'memmove', 'strcoll', 'strncat', 'strspn', | 
|---|
| 191 |       'memset', 'strcpy', 'strncmp', 'strstr', | 
|---|
| 192 |   ), | 
|---|
| 193 |   'ctime': ( # PDF 372, p. 346, Table 21 | 
|---|
| 194 |     # Macros: CLOCKS_PER_SEC | 
|---|
| 195 |     # Types: | 
|---|
| 196 |     # 'clock_t', | 
|---|
| 197 |     # Functions: | 
|---|
| 198 |     # 'clock', | 
|---|
| 199 |              # PDF 401, p. 375, Table 35 | 
|---|
| 200 |     # Macros: NULL | 
|---|
| 201 |     # Types: | 
|---|
| 202 |       'size_t', 'clock_t', 'time_t', | 
|---|
| 203 |     # Struct: | 
|---|
| 204 |       'tm', | 
|---|
| 205 |     # Functions: | 
|---|
| 206 |       'asctime', 'clock', 'difftime', 'localtime', 'strftime', | 
|---|
| 207 |       'ctime', 'gmtime', 'mktime', 'time', | 
|---|
| 208 |   ), | 
|---|
| 209 |   'cwchar': ( # PDF 432, p. 406, Table 48 | 
|---|
| 210 |     # Macros: NULL WCHAR_MAX WCHAR_MIN WEOF | 
|---|
| 211 |     # Types: | 
|---|
| 212 |       'mbstate_t', 'wint_t', 'size_t', | 
|---|
| 213 |     # Functions: | 
|---|
| 214 |       'btowc', 'getwchar', 'ungetwc', 'wcscpy', 'wcsrtombs', 'wmemchr', | 
|---|
| 215 |       'fgetwc', 'mbrlen', 'vfwprintf', 'wcscspn', 'wcsspn', 'wmemcmp', | 
|---|
| 216 |       'fgetws', 'mbrtowc', 'vswprintf', 'wcsftime', 'wcsstr', 'wmemcpy', | 
|---|
| 217 |       'fputwc', 'mbsinit', 'vwprintf', 'wcslen', 'wcstod', 'wmemmove', | 
|---|
| 218 |       'fputws', 'mbsrtowcs', 'wcrtomb', 'wcsncat', 'wcstok', 'wmemset', | 
|---|
| 219 |       'fwide', 'putwc', 'wcscat', 'wcsncmp', 'wcstol', 'wprintf', | 
|---|
| 220 |       'fwprintf', 'putwchar', 'wcschr', 'wcsncpy', 'wcstoul', 'wscanf', | 
|---|
| 221 |       'fwscanf', 'swprintf', 'wcscmp', 'wcspbrk', 'wcsxfrm', | 
|---|
| 222 |       'getwc', 'swscanf', 'wcscoll', 'wcsrchr', 'wctob', | 
|---|
| 223 |   ), | 
|---|
| 224 |   'cwctype': ( # PDF 432, p. 406, Table 46 | 
|---|
| 225 |     # Macro: WEOF | 
|---|
| 226 |     # Types: | 
|---|
| 227 |       'wctrans_t', 'wctype_t', 'wint_t', | 
|---|
| 228 |     # Functions: | 
|---|
| 229 |       'iswalnum', 'iswctype', 'iswlower', 'iswspace', 'towctrans', 'wctrans', | 
|---|
| 230 |       'iswalpha', 'iswdigit', 'iswprint', 'iswupper', 'towlower', 'wctype', | 
|---|
| 231 |       'iswcntrl', 'iswgraph', 'iswpunct', 'iswxdigit', 'towupper', | 
|---|
| 232 |   ), | 
|---|
| 233 | } | 
|---|
| 234 |  | 
|---|
| 235 | if (__name__ == "__main__"): | 
|---|
| 236 |  | 
|---|
| 237 |   import sys, string, time | 
|---|
| 238 |  | 
|---|
| 239 |   now = time.asctime(time.localtime(time.time())) + ' ' + str(time.tzname) | 
|---|
| 240 |  | 
|---|
| 241 |   for hfile in hfiles.keys(): | 
|---|
| 242 |     HFILE = string.upper(hfile) | 
|---|
| 243 |     f = open(hfile, 'w') | 
|---|
| 244 |     sys.stdout = f | 
|---|
| 245 |     print '// This file is automatically generated. Do not edit.' | 
|---|
| 246 |     print '//', sys.argv | 
|---|
| 247 |     print '//', now | 
|---|
| 248 |     print | 
|---|
| 249 |     print '#ifndef __' + HFILE + '_HEADER' | 
|---|
| 250 |     print '#define __' + HFILE + '_HEADER' | 
|---|
| 251 |     print '' | 
|---|
| 252 |     print '#include <' + hfile[1:] + '.h>' | 
|---|
| 253 |     print '' | 
|---|
| 254 |     if (len(hfiles[hfile]) > 0): | 
|---|
| 255 |       print 'namespace std {' | 
|---|
| 256 |       for s in hfiles[hfile]: | 
|---|
| 257 |         n_endif = 0 | 
|---|
| 258 |         for d in defines.keys(): | 
|---|
| 259 |           if (s in defines[d]): | 
|---|
| 260 |             print '#if !(' + d + ')' | 
|---|
| 261 |             n_endif = n_endif + 1 | 
|---|
| 262 |         print '  using ::' + s + ';' | 
|---|
| 263 |         for i in xrange(n_endif): print '#endif' | 
|---|
| 264 |       print '}' | 
|---|
| 265 |       print '' | 
|---|
| 266 |     print '#endif // ' + HFILE + '_HEADER' | 
|---|
| 267 |     sys.stdout = sys.__stdout__ | 
|---|