1 /* This source file must have a .cpp extension so that all C++ compilers 2 recognize the extension without flags. Borland does not know .cxx for 3 example. */ 4 #ifndef __cplusplus 5 # error "A C compiler has been selected for C++." 6 #endif 7 8 #if defined(__COMO__) 9 # define COMPILER_ID "Comeau" 10 11 #elif defined(__INTEL_COMPILER) || defined(__ICC) 12 # define COMPILER_ID "Intel" 13 14 #elif defined(__BORLANDC__) 15 # define COMPILER_ID "Borland" 16 17 #elif defined(__WATCOMC__) 18 # define COMPILER_ID "Watcom" 19 20 #elif defined(__SUNPRO_CC) 21 # define COMPILER_ID "SunPro" 22 23 #elif defined(__HP_aCC) 24 # define COMPILER_ID "HP" 25 26 #elif defined(__DECCXX) 27 # define COMPILER_ID "Compaq" 28 29 #elif defined(__IBMCPP__) 30 # define COMPILER_ID "VisualAge" 31 32 #elif defined(__PGI) 33 # define COMPILER_ID "PGI" 34 35 #elif defined(__GNUC__) 36 # define COMPILER_ID "GNU" 37 38 #elif defined(_MSC_VER) 39 # define COMPILER_ID "MSVC" 40 41 #elif defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__) 42 /* Analog Devices C++ compiler for Blackfin, TigerSHARC and 43 SHARC (21000) DSPs */ 44 # define COMPILER_ID "ADSP" 45 46 #elif defined(_COMPILER_VERSION) 47 # define COMPILER_ID "MIPSpro" 48 49 /* This compiler is either not known or is too old to define an 50 identification macro. Try to identify the platform and guess that 51 it is the native compiler. */ 52 #elif defined(__sgi) 53 # define COMPILER_ID "MIPSpro" 54 55 #elif defined(__hpux) || defined(__hpua) 56 # define COMPILER_ID "HP" 57 58 #else /* unknown compiler */ 59 # define COMPILER_ID "" 60 61 #endif 62 63 /* Construct the string literal in pieces to prevent the source from 64 getting matched. Store it in a pointer rather than an array 65 because some compilers will just produce instructions to fill the 66 array rather than assigning a pointer to a static array. */ 67 char* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; 68 69 /* Identify known platforms by name. */ 70 #if defined(__linux) || defined(__linux__) || defined(linux) 71 # define PLATFORM_ID "Linux" 72 73 #elif defined(__CYGWIN__) 74 # define PLATFORM_ID "Cygwin" 75 76 #elif defined(__MINGW32__) 77 # define PLATFORM_ID "MinGW" 78 79 #elif defined(__APPLE__) 80 # define PLATFORM_ID "Darwin" 81 82 #elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) 83 # define PLATFORM_ID "Windows" 84 85 #elif defined(__FreeBSD__) || defined(__FreeBSD) 86 # define PLATFORM_ID "FreeBSD" 87 88 #elif defined(__NetBSD__) || defined(__NetBSD) 89 # define PLATFORM_ID "NetBSD" 90 91 #elif defined(__OpenBSD__) || defined(__OPENBSD) 92 # define PLATFORM_ID "OpenBSD" 93 94 #elif defined(__sun) || defined(sun) 95 # define PLATFORM_ID "SunOS" 96 97 #elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) 98 # define PLATFORM_ID "AIX" 99 100 #elif defined(__sgi) || defined(__sgi__) || defined(_SGI) 101 # define PLATFORM_ID "IRIX" 102 103 #elif defined(__hpux) || defined(__hpux__) 104 # define PLATFORM_ID "HP-UX" 105 106 #elif defined(__HAIKU) || defined(__HAIKU__) || defined(_HAIKU) 107 # define PLATFORM_ID "Haiku" 108 /* Haiku also defines __BEOS__ so we must 109 put it prior to the check for __BEOS__ 110 */ 111 112 #elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) 113 # define PLATFORM_ID "BeOS" 114 115 #elif defined(__QNX__) || defined(__QNXNTO__) 116 # define PLATFORM_ID "QNX" 117 118 #elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) 119 # define PLATFORM_ID "Tru64" 120 121 #elif defined(__riscos) || defined(__riscos__) 122 # define PLATFORM_ID "RISCos" 123 124 #elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) 125 # define PLATFORM_ID "SINIX" 126 127 #elif defined(__UNIX_SV__) 128 # define PLATFORM_ID "UNIX_SV" 129 130 #elif defined(__bsdos__) 131 # define PLATFORM_ID "BSDOS" 132 133 #elif defined(_MPRAS) || defined(MPRAS) 134 # define PLATFORM_ID "MP-RAS" 135 136 #elif defined(__osf) || defined(__osf__) 137 # define PLATFORM_ID "OSF1" 138 139 #elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) 140 # define PLATFORM_ID "SCO_SV" 141 142 #elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) 143 # define PLATFORM_ID "ULTRIX" 144 145 #elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) 146 # define PLATFORM_ID "Xenix" 147 148 #else /* unknown platform */ 149 # define PLATFORM_ID "" 150 151 #endif 152 153 /* Construct the string literal in pieces to prevent the source from 154 getting matched. Store it in a pointer rather than an array 155 because some compilers will just produce instructions to fill the 156 array rather than assigning a pointer to a static array. */ 157 char* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; 158 159 160 /*--------------------------------------------------------------------------*/ 161 main(int argc,char * argv[])162int main(int argc, char* argv[]) 163 { 164 int require = 0; 165 require += info_compiler[argc]; 166 require += info_platform[argc]; 167 (void)argv; 168 return require; 169 } 170