# This Python script creates a full set of C++ C header files that # are missing on some platforms. # # Usage: # mkdir cpp_c_headers # cd cpp_c_headers # python generate_cpp_c_headers.py # # The files created by this script are in the directory: # root/boost/compatibility/cpp_c_headers # # Supported platforms: # Compaq Alpha, RedHat 6.2 Linux, Compaq C++ V6.3 (cxx) # Compaq Alpha, Tru64 Unix V5.0, Compaq C++ V6.2 (cxx) # Silicon Graphics, IRIX 6.5, MIPSpro Compilers: Version 7.3.1.1m (CC) # # Support for additional platforms can be added by extending the # "defines" Python dictionary below. # # Python is available at: # http://www.python.org/ # # Copyright (c) 2001 Ralf W. Grosse-Kunstleve. # Distributed under the Boost Software License, Version 1.0. (See accompany- # ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) # # Revision history: # 16 Apr 01 moved to boost CVS tree (R.W. Grosse-Kunstleve) # 17 Jan 01 Alpha Linux cxx V6.3 support (R.W. Grosse-Kunstleve) # 15 Dec 00 posted to boost e-group file upload area (R.W. Grosse-Kunstleve) # Definition of platform specific exclusion of identifiers. defines = { 'defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 740': ( 'btowc', 'fwide', 'fwprintf', 'fwscanf', 'mbrlen', 'mbrtowc', 'mbsinit', 'mbsrtowcs', 'swprintf', 'swscanf', 'towctrans', 'vfwprintf', 'vswprintf', 'vwprintf', 'wcrtomb', 'wcsrtombs', 'wctob', 'wctrans', 'wctrans_t', 'wmemchr', 'wmemcmp', 'wmemcpy', 'wmemmove', 'wmemset', 'wprintf', 'wscanf', ), 'defined(__DECCXX_VER) && __DECCXX_VER <= 60290024': ( 'fwide', ), 'defined(__linux) && defined(__DECCXX_VER) && __DECCXX_VER <= 60390005': ( 'getwchar', 'ungetwc', 'fgetwc', 'vfwprintf', 'fgetws', 'vswprintf', 'wcsftime', 'fputwc', 'vwprintf', 'fputws', 'fwide', 'putwc', 'wprintf', 'fwprintf', 'putwchar', 'wscanf', 'fwscanf', 'swprintf', 'getwc', 'swscanf', ), } # The information below was copied directly from the file: # ISO+IEC+14882-1998.pdf # The exact source of the information is given in the format # PDF #, p. #, Table # # Where # PDF # = page number as shown by the Acrobat Reader # p. # = page number printed at the bottom of the page # Table # = number printed in caption of table hfiles = { 'cassert': ( # PDF 378, p. 352, Table 25 # Macro: assert ), 'cctype': ( # PDF 431, p. 405, Table 45 # Functions: 'isalnum', 'isdigit', 'isprint', 'isupper', 'tolower', 'isalpha', 'isgraph', 'ispunct', 'isxdigit', 'toupper', 'iscntrl', 'islower', 'isspace', ), 'cerrno': ( # PDF 378, p. 352, Table 26 # Macros: EDOM ERANGE errno ), 'cfloat': ( # PDF 361, p. 335, Table 17 # Macros: DBL_DIG DBL_MIN_EXP FLT_MIN_10_EXP LDBL_MAX_10_EXP # DBL_EPSILON FLT_DIG FLT_MIN_EXP LDBL_MAX_EXP # DBL_MANT_DIG FLT_EPSILON FLT_RADIX LDBL_MIN # DBL_MAX FLT_MANT_DIG FLT_ROUNDS LDBL_MIN_10_EXP # DBL_MAX_10_EXP FLT_MAX LDBL_DIG LDBL_MIN_EXP # DBL_MAX_EXP FLT_MAX_10_EXP LDBL_EPSILON # DBL_MIN FLT_MAX_EXP LDBL_MANT_DIG # DBL_MIN_10_EXP FLT_MIN LDBL_MAX ), #'ciso646': ( #), 'climits': ( # PDF 361, p. 335, Table 16 # Macros: CHAR_BIT INT_MAX LONG_MIN SCHAR_MIN UCHAR_MAX USHRT_MAX # CHAR_MAX INT_MIN MB_LEN_MAX SHRT_MAX UINT_MAX # CHAR_MIN LONG_MAX SCHAR_MAX SHRT_MIN ULONG_MAX ), 'clocale': ( # PDF 483, p. 457, Table 62 # Macros: LC_ALL LC_COLLATE LC_CTYPE # LC_MONETARY LC_NUMERIC LC_TIME # NULL # Struct: 'lconv', # Functions: 'localeconv', 'setlocale', ), 'cmath': ( # PDF 622, p. 596, Table 80 # Macro: HUGE_VAL # Functions: 'acos', 'cos', 'fmod', 'modf', 'tan', 'asin', 'cosh', 'frexp', 'pow', 'tanh', 'atan', 'exp', 'ldexp', 'sin', 'atan2', 'fabs', 'log', 'sinh', 'ceil', 'floor', 'log10', 'sqrt', ), 'csetjmp': ( # PDF 372, p. 346, Table 20 # Macro: setjmp # Type: 'jmp_buf', # Function: 'longjmp', ), 'csignal': ( # PDF 372, p. 346, Table 22 # Macros: SIGABRT SIGILL SIGSEGV SIG_DFL # SIG_IGN SIGFPE SIGINT SIGTERM SIG_ERR # Type: 'sig_atomic_t', # Functions: 'raise', 'signal', ), 'cstdarg': ( # PDF 372, p. 346, Table 19 # Macros: va_arg va_end va_start # Type: 'va_list', ), 'cstddef': ( # PDF 353, p. 327, Table 15 # Macros: NULL offsetof # Types: 'ptrdiff_t', 'size_t', ), 'cstdio': ( # PDF 692, p. 666, Table 94 # Macros: BUFSIZ FOPEN_MAX SEEK_CUR TMP_MAX _IONBF stdout # EOF L_tmpnam SEEK_END _IOFBF stderr # FILENAME_MAX NULL SEEK_SET _IOLBF stdin # Types: 'FILE', 'fpos_t', 'size_t', # Functions: 'clearerr', 'fgets', 'fscanf', 'gets', 'rename', 'tmpfile', 'fclose', 'fopen', 'fseek', 'perror', 'rewind', 'tmpnam', 'feof', 'fprintf', 'fsetpos', 'printf', 'scanf', 'ungetc', 'ferror', 'fputc', 'ftell', 'putc', 'setbuf', 'vfprintf', 'fflush', 'fputs', 'fwrite', 'putchar', 'setvbuf', 'vprintf', 'fgetc', 'fread', 'getc', 'puts', 'sprintf', 'vsprintf', 'fgetpos', 'freopen', 'getchar', 'remove', 'sscanf', ), 'cstdlib': ( # PDF 362, p. 336, Table 18 # Macros: EXIT_FAILURE EXIT_SUCCESS # Functions: 'abort', 'atexit', 'exit', # PDF 373, p. 347, Table 23 # Functions: 'getenv', 'system', # PDF 400, p. 374, Table 33 # Functions: 'calloc', 'malloc', 'free', 'realloc', # PDF 433, p. 417, Table 49 # Macros: MB_CUR_MAX # Functions: 'atol', 'mblen', 'strtod', 'wctomb', 'atof', 'mbstowcs', 'strtol', 'wcstombs', 'atoi', 'mbtowc', 'strtoul', # PDF 589, p. 563, Table 78 # Functions: 'bsearch', 'qsort', # PDF 622, p. 596, Table 81 # Macros: RAND_MAX # Types: 'div_t', 'ldiv_t', # Functions: 'abs', 'labs', 'srand', 'div', 'ldiv', 'rand', ), 'cstring': ( # PDF 401, p. 375, Table 34 # Macro: NULL # Type: size_t # Functions: # 'memchr', 'memcmp', # 'memcpy', 'memmove', 'memset', # PDF 432, p. 406, Table 47 # Macro: NULL # Type: 'size_t', # Functions: 'memchr', 'strcat', 'strcspn', 'strncpy', 'strtok', 'memcmp', 'strchr', 'strerror', 'strpbrk', 'strxfrm', 'memcpy', 'strcmp', 'strlen', 'strrchr', 'memmove', 'strcoll', 'strncat', 'strspn', 'memset', 'strcpy', 'strncmp', 'strstr', ), 'ctime': ( # PDF 372, p. 346, Table 21 # Macros: CLOCKS_PER_SEC # Types: # 'clock_t', # Functions: # 'clock', # PDF 401, p. 375, Table 35 # Macros: NULL # Types: 'size_t', 'clock_t', 'time_t', # Struct: 'tm', # Functions: 'asctime', 'clock', 'difftime', 'localtime', 'strftime', 'ctime', 'gmtime', 'mktime', 'time', ), 'cwchar': ( # PDF 432, p. 406, Table 48 # Macros: NULL WCHAR_MAX WCHAR_MIN WEOF # Types: 'mbstate_t', 'wint_t', 'size_t', # Functions: 'btowc', 'getwchar', 'ungetwc', 'wcscpy', 'wcsrtombs', 'wmemchr', 'fgetwc', 'mbrlen', 'vfwprintf', 'wcscspn', 'wcsspn', 'wmemcmp', 'fgetws', 'mbrtowc', 'vswprintf', 'wcsftime', 'wcsstr', 'wmemcpy', 'fputwc', 'mbsinit', 'vwprintf', 'wcslen', 'wcstod', 'wmemmove', 'fputws', 'mbsrtowcs', 'wcrtomb', 'wcsncat', 'wcstok', 'wmemset', 'fwide', 'putwc', 'wcscat', 'wcsncmp', 'wcstol', 'wprintf', 'fwprintf', 'putwchar', 'wcschr', 'wcsncpy', 'wcstoul', 'wscanf', 'fwscanf', 'swprintf', 'wcscmp', 'wcspbrk', 'wcsxfrm', 'getwc', 'swscanf', 'wcscoll', 'wcsrchr', 'wctob', ), 'cwctype': ( # PDF 432, p. 406, Table 46 # Macro: WEOF # Types: 'wctrans_t', 'wctype_t', 'wint_t', # Functions: 'iswalnum', 'iswctype', 'iswlower', 'iswspace', 'towctrans', 'wctrans', 'iswalpha', 'iswdigit', 'iswprint', 'iswupper', 'towlower', 'wctype', 'iswcntrl', 'iswgraph', 'iswpunct', 'iswxdigit', 'towupper', ), } if (__name__ == "__main__"): import sys, string, time now = time.asctime(time.localtime(time.time())) + ' ' + str(time.tzname) for hfile in hfiles.keys(): HFILE = string.upper(hfile) f = open(hfile, 'w') sys.stdout = f print '// This file is automatically generated. Do not edit.' print '//', sys.argv print '//', now print print '#ifndef __' + HFILE + '_HEADER' print '#define __' + HFILE + '_HEADER' print '' print '#include <' + hfile[1:] + '.h>' print '' if (len(hfiles[hfile]) > 0): print 'namespace std {' for s in hfiles[hfile]: n_endif = 0 for d in defines.keys(): if (s in defines[d]): print '#if !(' + d + ')' n_endif = n_endif + 1 print ' using ::' + s + ';' for i in xrange(n_endif): print '#endif' print '}' print '' print '#endif // ' + HFILE + '_HEADER' sys.stdout = sys.__stdout__