Project

General

Profile

Statistics
| Branch: | Revision:

root / vision / build / CMakeFiles / CompilerIdCXX / CMakeCXXCompilerId.cpp @ 8711dd52

History | View | Annotate | Download (5.33 KB)

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
# if defined(__COMPILER_VER__)
31
#  define COMPILER_ID "zOS"
32
# elif __IBMCPP__ >= 800
33
#  define COMPILER_ID "XL"
34
# else
35
#  define COMPILER_ID "VisualAge"
36
# endif
37

    
38
#elif defined(__PGI)
39
# define COMPILER_ID "PGI"
40

    
41
#elif defined(__PATHSCALE__)
42
# define COMPILER_ID "PathScale"
43

    
44
#elif defined(__GNUC__)
45
# define COMPILER_ID "GNU"
46

    
47
#elif defined(_MSC_VER)
48
# define COMPILER_ID "MSVC"
49

    
50
#elif defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__)
51
/* Analog Devices C++ compiler for Blackfin, TigerSHARC and
52
   SHARC (21000) DSPs */
53
# define COMPILER_ID "ADSP"
54

    
55
#elif defined(_SGI_COMPILER_VERSION) || defined(_COMPILER_VERSION)
56
# define COMPILER_ID "MIPSpro"
57

    
58
/* This compiler is either not known or is too old to define an
59
   identification macro.  Try to identify the platform and guess that
60
   it is the native compiler.  */
61
#elif defined(__sgi)
62
# define COMPILER_ID "MIPSpro"
63

    
64
#elif defined(__hpux) || defined(__hpua)
65
# define COMPILER_ID "HP"
66

    
67
#else /* unknown compiler */
68
# define COMPILER_ID ""
69

    
70
#endif
71

    
72
/* Construct the string literal in pieces to prevent the source from
73
   getting matched.  Store it in a pointer rather than an array
74
   because some compilers will just produce instructions to fill the
75
   array rather than assigning a pointer to a static array.  */
76
char* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]";
77

    
78
/* Identify known platforms by name.  */
79
#if defined(__linux) || defined(__linux__) || defined(linux)
80
# define PLATFORM_ID "Linux"
81

    
82
#elif defined(__CYGWIN__)
83
# define PLATFORM_ID "Cygwin"
84

    
85
#elif defined(__MINGW32__)
86
# define PLATFORM_ID "MinGW"
87

    
88
#elif defined(__APPLE__)
89
# define PLATFORM_ID "Darwin"
90

    
91
#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
92
# define PLATFORM_ID "Windows"
93

    
94
#elif defined(__FreeBSD__) || defined(__FreeBSD)
95
# define PLATFORM_ID "FreeBSD"
96

    
97
#elif defined(__NetBSD__) || defined(__NetBSD)
98
# define PLATFORM_ID "NetBSD"
99

    
100
#elif defined(__OpenBSD__) || defined(__OPENBSD)
101
# define PLATFORM_ID "OpenBSD"
102

    
103
#elif defined(__sun) || defined(sun)
104
# define PLATFORM_ID "SunOS"
105

    
106
#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__)
107
# define PLATFORM_ID "AIX"
108

    
109
#elif defined(__sgi) || defined(__sgi__) || defined(_SGI)
110
# define PLATFORM_ID "IRIX"
111

    
112
#elif defined(__hpux) || defined(__hpux__)
113
# define PLATFORM_ID "HP-UX"
114

    
115
#elif defined(__HAIKU) || defined(__HAIKU__) || defined(_HAIKU)
116
# define PLATFORM_ID "Haiku"
117
/* Haiku also defines __BEOS__ so we must 
118
   put it prior to the check for __BEOS__
119
*/
120

    
121
#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS)
122
# define PLATFORM_ID "BeOS"
123

    
124
#elif defined(__QNX__) || defined(__QNXNTO__)
125
# define PLATFORM_ID "QNX"
126

    
127
#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__)
128
# define PLATFORM_ID "Tru64"
129

    
130
#elif defined(__riscos) || defined(__riscos__)
131
# define PLATFORM_ID "RISCos"
132

    
133
#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__)
134
# define PLATFORM_ID "SINIX"
135

    
136
#elif defined(__UNIX_SV__)
137
# define PLATFORM_ID "UNIX_SV"
138

    
139
#elif defined(__bsdos__)
140
# define PLATFORM_ID "BSDOS"
141

    
142
#elif defined(_MPRAS) || defined(MPRAS)
143
# define PLATFORM_ID "MP-RAS"
144

    
145
#elif defined(__osf) || defined(__osf__)
146
# define PLATFORM_ID "OSF1"
147

    
148
#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv)
149
# define PLATFORM_ID "SCO_SV"
150

    
151
#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX)
152
# define PLATFORM_ID "ULTRIX"
153

    
154
#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX)
155
# define PLATFORM_ID "Xenix"
156

    
157
#else /* unknown platform */
158
# define PLATFORM_ID ""
159

    
160
#endif
161

    
162
/* For windows compilers MSVC and Intel we can determine
163
   the architecture of the compiler being used.  This is becase
164
   the compilers do not have flags that can change the architecture,
165
   but rather depend on which compiler is being used
166
*/
167
#if defined(_WIN32) && defined(_MSC_VER)
168
# if defined(_M_IA64)
169
#  define ARCHITECTURE_ID "IA64"
170

    
171
# elif defined(_M_X64) || defined(_M_AMD64)
172
#  define ARCHITECTURE_ID "x64" 
173

    
174
# elif defined(_M_IX86)
175
#  define ARCHITECTURE_ID "X86"
176

    
177
# else /* unknown architecture */
178
#  define ARCHITECTURE_ID ""
179
# endif
180

    
181
#else
182
#  define ARCHITECTURE_ID ""
183
#endif
184

    
185
/* Construct the string literal in pieces to prevent the source from
186
   getting matched.  Store it in a pointer rather than an array
187
   because some compilers will just produce instructions to fill the
188
   array rather than assigning a pointer to a static array.  */
189
char* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]";
190
char* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]";
191

    
192

    
193

    
194
/*--------------------------------------------------------------------------*/
195

    
196
int main(int argc, char* argv[])
197
{
198
  int require = 0;
199
  require += info_compiler[argc];
200
  require += info_platform[argc];
201
  (void)argv;
202
  return require;
203
}