/* $OpenXM: OpenXM_contrib2/windows/mcpp/noconfig.H,v 1.1 2010/02/26 17:42:36 ohara Exp $ */ /* * noconfig.H * Configurations for MCPP not using config.h. * * WARNING: These are default settings. To configure for your system, you * must edit this file here and there. */ #define TRUE 1 #define FALSE 0 /* * 'Target' means the O.S. and the compiler to which cpp is implemented. * 'Host' means the O.S. and the compiler with which cpp is compiled. */ /* Define target operating-system. */ #ifndef SYSTEM #define SYSTEM SYS_WIN32 #endif /* Define target compiler. */ #ifndef COMPILER #define COMPILER INDEPENDENT /* compiler-independent-build */ #endif /* Define host operating-system. */ #define HOST_SYSTEM SYSTEM /* Define host compiler. */ #define HOST_COMPILER MSC /* Version message. */ /* "MCPP V.2.* (200y/mm) compiled by " precedes VERSION_MSG */ #ifndef VERSION_MSG #define VERSION_MSG "Visual C 2008" #endif #if 0 "LCC-Win32 2006-03" "Visual C 2005" "Visual C 2008" "BCC V.5.5" #endif /* * P A R T 1 Configurations for target-operating-system * and target-compiler. */ /* * Names of the SYSTEM (i.e. target operating system). This is needed so that * cpp can use appropriate filename conventions. */ #define SYS_UNKNOWN 0 #define SYS_UNIX 0x1000 #define SYS_LINUX 0x1800 /* (SYS_LINUX & 0xF000) == SYS_UNIX */ #define SYS_FREEBSD 0x1A00 /* (SYS_FREEBSD & 0xF000) == SYS_UNIX */ #define SYS_CYGWIN 0x1C00 /* (SYS_CYGWIN & 0xF000) == SYS_UNIX */ #define SYS_MAC 0x1E00 /* (SYS_MAC & 0xF000) == SYS_UNIX */ #define SYS_WIN 0x7000 #define SYS_WIN32 0x7400 /* (SYS_WIN32 & 0xF000) == SYS_WIN */ #define SYS_WIN64 0x7800 /* (SYS_WIN64 & 0xF000) == SYS_WIN */ #define SYS_MINGW 0x7C00 /* (SYS_MINGW & 0xF000) == SYS_WIN */ /* COMPILER */ #define COMPILER_UNKNOWN 0 #define MSC 0x7400 /* Microsoft C, Visual C++ */ #define BORLANDC 0x7440 /* Borland C */ #define LCC 0x74C0 /* LCC-Win32 */ #define GNUC 0x00E0 /* GNU C (GCC) */ #define INDEPENDENT 0xFFFF /* No target, compiler-independent build*/ #define SYS_FAMILY (SYSTEM & 0xF000) #define COMPILER_FAMILY (COMPILER & 0xF0) #define HOST_SYS_FAMILY (HOST_SYSTEM & 0xF000) /* Default MBCHAR (multi-byte character) encoding. */ #define EUC_JP 0x10 /* Extended UNIX code of JIS X 0208 */ #define GB2312 0x20 /* EUC-like encoding of Chinese GB 2312-80 */ #define KSC5601 0x30 /* EUC-like encoding of Korean KS C 5601 */ #define SJIS 0x80 /* Shift-JIS encoding of JIS X 0208 */ #define BIGFIVE 0x90 /* Encoding of Taiwanese Big Five */ #define ISO2022_JP 0x100 /* ISO-2022-JP (ISO-2022-JP1) encoding */ #define UTF8 0x1000 /* UTF-8 encoding */ /* * MBCHAR means multi-byte character encoding. * MBCHAR means the default encoding, and you can change the encoding by * #pragma MCPP setlocale, -e option or environment variable * LC_ALL, LC_CTYPE, LANG. * MBCHAR == 0 means not to recognize any multi-byte character encoding. */ /* * In order to predefine target-system-dependent macros, * several macros are defined here: * *_OLD define the macro beginning with an alphabetic letter, * *_STD, *_STD?, *_EXT, *_EXT2 define the macro beginning with an '_'. * *_STD1 define the macro beginning with '__' and ending with an alphanumeric * letter. * *_STD2 define the macro beginning with '__' and ending with '__'. * These may not be defined, if they are not needed. * They should not be #defined to no token or to "". * * SYSTEM_OLD, SYSTEM_STD1, SYSTEM_STD2, SYSTEM_EXT, SYSTEM_EXT2 * define the target operating system (by name). * SYSTEM_SP_OLD, SYSTEM_SP_STD define the target-OS specific macro name * COMPILER_OLD, COMPILER_STD1, COMPILER_STD2, COMPILER_EXT, COMPILER_EXT2 * , COMPILER_SP_OLD, COMPILER_SP_STD * define the target compiler (by name). * COMPILER_CPLUS defines the target C++ compiler. * COMPILER_SP1, COMPILER_SP2, COMPILER_SP3 * define the compiler-specific macros. * * _VAL specify the value of the . * If not specified, these values default to "1". * To define the value of no-token, specify as "" rather than no-token. * SYSTEM_OLD, SYSTEM_STD?, COMPILER_OLD have the value of "1". */ /* * target-compiler-dependent definitions: * * LINE_PREFIX defines the output line prefix, if not "#line 123". * This should be defined as "# " to represent "# 123" format * ("#line " represents "#line 123" format). * * C_INCLUDE_DIR1, C_INCLUDE_DIR2 may be defined if you have a compiler- * specific include directory which is to be searched *before* * the operating-system specific directories (e.g. /usr/include). * CPLUS_INCLUDE_DIR1, CPLUS_INCLUDE_DIR2, CPLUS_INCLUDE_DIR3 * , CPLUS_INCLUDE_DIR4 are for C++ include directory which exist * other than C include directory. * ENV_C_INCLUDE_DIR may be defined to the name of environment-variable for * C include directory. * ENV_CPLUS_INCLUDE_DIR is name of environment-variable for C++ include * directory which exists other than ENV_C_INCLUDE_DIR. * ENV_SEP is the separator (other than space) of include-paths in an * environment-variable. e.g. the ':' in * "/usr/abc/include:/usr/xyz/include" * * EMFILE should be defined to the macro to represent errno of 'too many * open files' if the macro is different from EMFILE. * * ONE_PASS should be set TRUE, if COMPILER is "one pass compiler". * * FNAME_FOLD means that target-system folds upper and lower cases of * directory and file-name. * * SEARCH_INIT specifies the default value of 'search_rule' (in system.c). * 'search_rule' holds searching rule of #include "header.h" to * search first before searching user specified or system- * specific include directories. * CURRENT means to search the directory relative to "current * directory" which is current at cpp invocation. * SOURCE means to search the directory relative to that of the * source file (i.e. "includer"). * (CURRENT & SOURCE) means to search current directory first * source directory next. * 'search_rule' is initialized to SEARCH_INIT. */ #define CURRENT 1 #define SOURCE 2 #if SYS_FAMILY == SYS_UNIX #define SYSTEM_OLD "unix" #define SYSTEM_STD1 "__unix" #define SYSTEM_STD2 "__unix__" #if SYSTEM == SYS_FREEBSD #define SYSTEM_EXT "__FreeBSD__" #define SYSTEM_EXT_VAL "6" /* V.5.*: 5, V.6.*:6 */ #endif #if SYSTEM == SYS_LINUX #define SYSTEM_EXT "__linux__" #endif #if SYSTEM == SYS_MAC /* Mac OS X */ #define SYSTEM_EXT "__APPLE__" #define FNAME_FOLD TRUE /* Case-insensitive file-system */ #define FRAMEWORK1 "/System/Library/Frameworks" #define FRAMEWORK2 "/Library/Frameworks" #endif /* SYSTEM == SYS_MAC */ #if SYSTEM == SYS_CYGWIN #define SYSTEM_EXT "__CYGWIN__" #define SYSTEM_EXT2 "__CYGWIN32__" #define MBCHAR SJIS #define FNAME_FOLD TRUE #define CYGWIN_ROOT_DIRECTORY "c:/pub/compilers/cygwin" #endif /* SYSTEM == SYS_CYGWIN */ #ifndef MBCHAR #define MBCHAR EUC_JP /* UTF8 if you like */ #endif #ifndef FNAME_FOLD #define FNAME_FOLD FALSE #endif #endif /* SYS_FAMILY == SYS_UNIX */ #if SYS_FAMILY == SYS_WIN #define SYSTEM_SP_STD "__FLAT__" #define SYSTEM_SP_STD_VAL "1" #ifndef MBCHAR #define MBCHAR SJIS /* Multi-byte char is encoded in SJIS */ #endif #if COMPILER == MSC #define CMP_NAME "Visual C++" #if _MSC_VER >= 1200 /* Visual C++ V.6.0 or later */ /* When HOST == TARGET */ #define ONE_PASS TRUE #endif #define COMPILER_EXT "_MSC_VER" #define COMPILER_EXT_VAL "1500" /* VC 6.0: "1200" */ /* VC 2002: "1300", VC 2003: "1310", VC 2005: "1400", VC 2008: "1500" */ #define COMPILER_EXT2 "_MSC_FULL_VER" #define COMPILER_EXT2_VAL "150021022" /* VC 6.0: "12008804" */ /* VC 2002: "13009466", VC 2003: "13103077", VC 2005: "140050320" */ /* VC 2008: "150021022" */ #define COMPILER_SP1 "_MSC_EXTENSIONS" #define COMPILER_SP1_VAL "1" #define COMPILER_SP2 "_INTEGRAL_MAX_BITS" #define COMPILER_SP2_VAL "64" /* VC 2003, VC2005, VC2008: 64 */ #define TARGET_HAVE_LONG_LONG TRUE /* __int64 instead of long long (VC 2.0 through 8.0) */ #define EXPAND_PRAGMA TRUE #define HAVE_DIGRAPHS TRUE #define BIGFIVE_IS_ESCAPE_FREE TRUE #define SEARCH_INIT SOURCE #elif COMPILER == BORLANDC /* Borland C 5.* and C++Builder */ #define CMP_NAME "Borland C" #define ONE_PASS TRUE #define COMPILER_STD2 "__TURBOC__" #if __BORLANDC__ /* Borland C */ #define COMPILER_STD2_VAL "0x0550" /* BC 5.5: "0x0550", BC 5.9: "0x5930" */ #define COMPILER_EXT "__BORLANDC__" #define COMPILER_EXT_VAL "0x0550" /* BC 5.5: "0x0550", BC 5.9: "0x5930" */ #define COMPILER_CPLUS "__BCPLUSPLUS__" #define COMPILER_CPLUS_VAL "0x0550" /* BC 5.5: "0x0550", BC 5.9: "0x5930" */ #define EXPAND_PRAGMA TRUE #define SEARCH_INIT (CURRENT & SOURCE) #define TARGET_HAVE_LONG_LONG TRUE /* __int64 instead of long long */ #endif /* __BORLANDC__ */ #elif COMPILER == LCC #define CMP_NAME "LCC-Win32" #define COMPILER_STD2 "__LCC__" #define COMPILER_SP1 "__LCCDEBUGLEVEL" #define COMPILER_SP1_VAL "0" #define COMPILER_SP2 "__LCCOPTIMLEVEL" #define COMPILER_SP2_VAL "0" #define ONE_PASS TRUE #define TARGET_HAVE_LONG_LONG TRUE #define SJIS_IS_ESCAPE_FREE FALSE #endif #if SYSTEM == SYS_MINGW #define SYSTEM_EXT "__MINGW__" #define SYSTEM_EXT2 "__MINGW32__" #define MSYS_ROOT_DIRECTORY "c:/pub/compilers/msys/1.0" #define MINGW_DIRECTORY "c:/pub/compilers/mingw" #if COMPILER == GNUC #define SJIS_IS_ESCAPE_FREE FALSE #define INC_DIR C_INCLUDE_DIR2 #endif #endif /* SYSTEM == SYS_MINGW */ #ifndef SJIS_IS_ESCAPE_FREE #define SJIS_IS_ESCAPE_FREE TRUE /* or FALSE following your compiler */ #endif #endif /* SYS_FAMILY == SYS_WIN */ #if COMPILER_FAMILY == GNUC #define CMP_NAME "GCC" #define COMPILER_EXT "__GNUC__" #define COMPILER_EXT_VAL "3" /* "3" for V.3.* "4" for V.4.* */ #define COMPILER_EXT2 "__GNUC_MINOR__" #define COMPILER_EXT2_VAL "4" /* "4" for V.3.4, "1" for V.4.1 */ #define COMPILER_CPLUS "__GNUG__" #define COMPILER_CPLUS_VAL "3" /* "3" for V.3.*, "4" for V.4.* */ #define GCC_MAJOR_VERSION 3 /* Value of __GNUC__ as a digit */ #define LINE_PREFIX "# " #ifndef HAVE_DIGRAPHS #define HAVE_DIGRAPHS TRUE #endif #ifndef TARGET_HAVE_LONG_LONG #define TARGET_HAVE_LONG_LONG TRUE #endif #define STDC_VERSION 0L /* 199409L for V.2.9, 0L for V.3.*,V.4.* */ #define CPLUS_INCLUDE_DIR1 "/usr/include/c++/3.4" /* "/usr/include/c++/3.3.6" */ /* "/usr/include/c++/4.1.2" */ #define CPLUS_INCLUDE_DIR2 "/usr/include/c++/3.4/backward" /* "/usr/include/c++/3.3.6/i386-vine-linux" */ /* "/usr/include/c++/4.1.2/i486-linux-gnu" */ /* #define CPLUS_INCLUDE_DIR3 */ /* "/usr/include/c++/3.3.6/backward" */ /* "/usr/include/c++/4.1.2/backward" */ /* #define C_INCLUDE_DIR1 */ /* "/usr/lib/gcc-lib/i386-vine-linux/3.3.6/include" */ /* "/usr/lib/gcc/i486-linux-gnu/4.1.2/include" */ /* #define C_INCLUDE_DIR2 */ #ifndef INC_DIR #ifdef C_INCLUDE_DIR1 #define INC_DIR C_INCLUDE_DIR1 /* GNUC version specific dir */ #else #define INC_DIR "/usr/local/include" /* "/usr/include" */ #endif #endif #ifndef ENV_C_INCLUDE_DIR #define ENV_C_INCLUDE_DIR "C_INCLUDE_PATH" #define ENV_CPLUS_INCLUDE_DIR "CPLUS_INCLUDE_PATH" #endif #define SEARCH_INIT SOURCE /* Include directory relative to source */ /* * __SIZE_TYPE__, __PTRDIFF_TYPE__ and __WCHAR_TYPE__ are predefines of GCC. */ #if GCC_MAJOR_VERSION < 3 #define COMPILER_SP1 "__SIZE_TYPE__" #define COMPILER_SP2 "__PTRDIFF_TYPE__" #define COMPILER_SP3 "__WCHAR_TYPE__" #define COMPILER_SP1_VAL "unsigned int" #define COMPILER_SP2_VAL "int" #define COMPILER_SP3_VAL "int" /* SYS_FREEBSD: "int", SYS_CYGWIN, SYS_MINGW: "short unsigned int" , others: "long int" */ #endif /* GCC_MAJOR_VERSION < 3 */ /* On GCC V.3.*, V.4.*, these macros are known by mcpp_g*_predef_*.h files. */ #endif /* COMPILER_FAMILY == GNUC */ #if COMPILER == INDEPENDENT /* specifications of compiler-independent build */ #define LINE_PREFIX "#line " #define STD_LINE_PREFIX TRUE /* Output #line by C source format */ #define HAVE_DIGRAPHS TRUE /* Output digraphs as it is */ #define SEARCH_INIT SOURCE /* Include directory relative to source */ #define SJIS_IS_ESCAPE_FREE TRUE /* Do not treat SJIS specially */ #define BIGFIVE_IS_ESCAPE_FREE TRUE /* Do not treat specially */ #define ISO2022_JP_IS_ESCAPE_FREE TRUE /* Do not treat specially */ #define TARGET_HAVE_LONG_LONG TRUE /* dummy */ #define STDC_VERSION 199409L /* Initial value of __STDC_VERSION__ */ #endif /* * Each OS has some different target architectures. The followings define * the target CPU. * MCPP defines some predefined macros based on the CPU macro, and possibly * redefine them on an execution time by some options. */ #if defined (__x86_64__) || defined (__amd64__) || defined (_M_AMD64) \ || defined (_AMD64_) || defined (_X64_) #define CPU "x86_64" #elif defined (__ppc64__) || defined (__powerpc64__) #define CPU "ppc64" #elif defined (__ppc__) || defined (__powerpc__) #define CPU "ppc" #else /* Defaults to i386 */ #define CPU "i386" #endif /* * defaults */ #ifdef SYSTEM_EXT #ifndef SYSTEM_EXT_VAL #define SYSTEM_EXT_VAL "1" #endif #endif #ifdef SYSTEM_EXT2 #ifndef SYSTEM_EXT2_VAL #define SYSTEM_EXT2_VAL "1" #endif #endif #ifdef COMPILER_STD1 #ifndef COMPILER_STD1_VAL #define COMPILER_STD1_VAL "1" #endif #endif #ifdef COMPILER_STD2 #ifndef COMPILER_STD2_VAL #define COMPILER_STD2_VAL "1" #endif #endif #ifdef COMPILER_EXT #ifndef COMPILER_EXT_VAL #define COMPILER_EXT_VAL "1" #endif #endif #ifdef COMPILER_EXT2 #ifndef COMPILER_EXT2_VAL #define COMPILER_EXT2_VAL "1" #endif #endif #ifdef COMPILER_CPLUS #ifndef COMPILER_CPLUS_VAL #define COMPILER_CPLUS_VAL "1" #endif #endif #ifndef LINE_PREFIX #define LINE_PREFIX "#line " #define STD_LINE_PREFIX TRUE /* C source format */ #else #ifndef STD_LINE_PREFIX #define STD_LINE_PREFIX FALSE /* Compiler-dependent format */ #endif #endif #ifndef HAVE_DIGRAPHS #define HAVE_DIGRAPHS FALSE #endif #ifndef ENV_C_INCLUDE_DIR #define ENV_C_INCLUDE_DIR "INCLUDE" #endif #ifndef ENV_CPLUS_INCLUDE_DIR #define ENV_CPLUS_INCLUDE_DIR "CPLUS_INCLUDE" #endif #ifndef ENV_SEP #if SYS_FAMILY == SYS_WIN #define ENV_SEP ';' #else #define ENV_SEP ':' #endif #endif #ifndef ONE_PASS #define ONE_PASS FALSE #endif #ifndef FNAME_FOLD #define FNAME_FOLD TRUE #endif #ifndef SEARCH_INIT #define SEARCH_INIT CURRENT #endif /* * CHARBIT, UCHARMAX are respectively CHAR_BIT, UCHAR_MAX of target compiler. * CHARBIT should be defined to the number of bits per character. * It is needed only for processing of multi-byte character constants. * UCHARMAX should be defined to the maximum value of type unsigned char * or maximum value of unsigned int which is converted from type (signed) * char. * * LONGMAX should be defined to the LONG_MAX in . * ULONGMAX should be defined to the ULONG_MAX in or LONG_MAX * for the compiler which does not have unsigned long. */ #ifndef CHARBIT #define CHARBIT 8 #endif #ifndef UCHARMAX #define UCHARMAX 0xFF #endif #ifndef LONGMAX #define LONGMAX 0x7FFFFFFFL #endif #ifndef ULONGMAX #define ULONGMAX 0xFFFFFFFFUL #endif /* * Define MBCHAR (multi-byte character encoding) to SJIS, EUC_JP or other. */ #ifndef MBCHAR #define MBCHAR 0 #endif /* * SJIS_IS_ESCAPE_FREE means the compiler does not escape '0x5c' ('\\') in * shift-JIS encoded multi-byte character. SJIS_IS_ESCAPE_FREE == FALSE * enables cpp to insert * '\\' before '\\' of the 2nd byte of SJIS code in * literal. This insertion is for the compiler-proper which can't recognize * SJIS literal. * BIGFIVE_IS_ESCAPE_FREE means similar case on BIGFIVE encoding. * ISO2022_JP_IS_ESCAPE_FREE means similar case on ISO2022_JP encoding. */ #ifndef SJIS_IS_ESCAPE_FREE #define SJIS_IS_ESCAPE_FREE FALSE /* or TRUE following your compiler */ #endif #ifndef BIGFIVE_IS_ESCAPE_FREE #define BIGFIVE_IS_ESCAPE_FREE FALSE /* or TRUE following your compiler */ #endif #ifndef ISO2022_JP_IS_ESCAPE_FREE #define ISO2022_JP_IS_ESCAPE_FREE FALSE /* or TRUE following compiler */ #endif /* * P A R T 2 Configurations for host-compiler. * * WARNING: In case of HOST_COMPILER differs from COMPILER, you must * edit here and there of this part. */ #if HOST_COMPILER == GNUC #if __GNUC__ >= 3 #define HAVE_INTMAX_T TRUE #define HAVE_INTTYPES_H TRUE #define HAVE_STDINT_H TRUE #endif #define HOST_HAVE_LONG_LONG TRUE #if HOST_SYSTEM == SYS_LINUX #define HOST_HAVE_STPCPY TRUE #endif #if HOST_SYSTEM == SYS_MAC #define HOST_HAVE_STPCPY TRUE #endif #elif HOST_COMPILER == LCC #define HOST_HAVE_LONG_LONG TRUE #elif HOST_COMPILER == MSC #define HOST_HAVE_LONG_LONG TRUE #elif HOST_COMPILER == BORLANDC #if __BORLANDC__ >= 0x550 #define HOST_HAVE_LONG_LONG TRUE #endif #define HOST_HAVE_STPCPY TRUE #if __STDC__ #define stpcpy( dest, src) __stpcpy__( dest, src) #endif #endif #ifndef HAVE_INTMAX_T #define HAVE_INTMAX_T FALSE #endif /* The host compiler has the type long long int ? */ #ifndef HOST_HAVE_LONG_LONG #define HOST_HAVE_LONG_LONG FALSE #endif /* * This definitions should be set TRUE, if *both* of the target * and the host compilers have long long type. */ #if TARGET_HAVE_LONG_LONG && HOST_HAVE_LONG_LONG #define HAVE_LONG_LONG TRUE #endif /* * Define the format specifier of intmax_t or long long for * fprintf( fp_debug,). * Both of target COMPILER and HOST_COMPILER should have long long. */ #if HAVE_LONG_LONG #if HOST_COMPILER == BORLANDC \ || (HOST_COMPILER == MSC && _MSC_VER < 1400) \ || HOST_SYSTEM == SYS_MINGW #define LL_FORM "I64" /* Format specifier for __int64 */ #endif #ifndef LL_FORM #define LL_FORM "ll" /* C99: for long long, "j" for intmax_t */ #endif #endif #ifndef HOST_HAVE_STPCPY #define HOST_HAVE_STPCPY FALSE #endif /* * Declaration of standard library functions and macros. */ /* stdin, stdout, stderr, FILE, NULL, fgets(), fputs() and other functions. */ #include "stdio.h" /* PATHMAX is the maximum length of path-list on the host system. */ /* _POSIX_* only to get PATH_MAX */ #define _POSIX_ 1 #define _POSIX_SOURCE 1 #ifndef _POSIX_C_SOURCE #define _POSIX_C_SOURCE 1 #define _POSIX_C_SOURCE_defined 1 #endif #include "limits.h" #undef _POSIX_ #undef _POSIX_SOURCE #ifdef _POSIX_C_SOURCE_defined #undef _POSIX_C_SOURCE #undef _POSIX_C_SOURCE_defined #endif #ifdef PATH_MAX #define PATHMAX PATH_MAX /* Posix macro */ #else #define PATHMAX FILENAME_MAX #endif /* islower(), isupper(), toupper(), isdigit(), isxdigit(), iscntrl() */ #include "ctype.h" /* errno */ #include "errno.h" #include "string.h" #include "stdlib.h" #include "time.h" #include "setjmp.h" /* For debugging malloc systems by kmatsui */ #if KMMALLOC && _MEM_DEBUG #include "xalloc.h" #endif