VPI - Vision Programming Interface

3.0 Release

CMakeCXXCompilerId.cpp
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(__has_include)
9 /* If the compiler does not have __has_include, pretend the answer is
10  always no. */
11 # define __has_include(x) 0
12 #endif
13 
14 
15 /* Version number components: V=Version, R=Revision, P=Patch
16  Version date components: YYYY=Year, MM=Month, DD=Day */
17 
18 #if defined(__COMO__)
19 # define COMPILER_ID "Comeau"
20  /* __COMO_VERSION__ = VRR */
21 # define COMPILER_VERSION_MAJOR DEC(__COMO_VERSION__ / 100)
22 # define COMPILER_VERSION_MINOR DEC(__COMO_VERSION__ % 100)
23 
24 #elif defined(__INTEL_COMPILER) || defined(__ICC)
25 # define COMPILER_ID "Intel"
26 # if defined(_MSC_VER)
27 # define SIMULATE_ID "MSVC"
28 # endif
29 # if defined(__GNUC__)
30 # define SIMULATE_ID "GNU"
31 # endif
32  /* __INTEL_COMPILER = VRP prior to 2021, and then VVVV for 2021 and later,
33  except that a few beta releases use the old format with V=2021. */
34 # if __INTEL_COMPILER < 2021 || __INTEL_COMPILER == 202110 || __INTEL_COMPILER == 202111
35 # define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100)
36 # define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10)
37 # if defined(__INTEL_COMPILER_UPDATE)
38 # define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE)
39 # else
40 # define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10)
41 # endif
42 # else
43 # define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER)
44 # define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER_UPDATE)
45  /* The third version component from --version is an update index,
46  but no macro is provided for it. */
47 # define COMPILER_VERSION_PATCH DEC(0)
48 # endif
49 # if defined(__INTEL_COMPILER_BUILD_DATE)
50  /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */
51 # define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE)
52 # endif
53 # if defined(_MSC_VER)
54  /* _MSC_VER = VVRR */
55 # define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
56 # define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
57 # endif
58 # if defined(__GNUC__)
59 # define SIMULATE_VERSION_MAJOR DEC(__GNUC__)
60 # elif defined(__GNUG__)
61 # define SIMULATE_VERSION_MAJOR DEC(__GNUG__)
62 # endif
63 # if defined(__GNUC_MINOR__)
64 # define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)
65 # endif
66 # if defined(__GNUC_PATCHLEVEL__)
67 # define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
68 # endif
69 
70 #elif (defined(__clang__) && defined(__INTEL_CLANG_COMPILER)) || defined(__INTEL_LLVM_COMPILER)
71 # define COMPILER_ID "IntelLLVM"
72 #if defined(_MSC_VER)
73 # define SIMULATE_ID "MSVC"
74 #endif
75 #if defined(__GNUC__)
76 # define SIMULATE_ID "GNU"
77 #endif
78 /* __INTEL_LLVM_COMPILER = VVVVRP prior to 2021.2.0, VVVVRRPP for 2021.2.0 and
79  * later. Look for 6 digit vs. 8 digit version number to decide encoding.
80  * VVVV is no smaller than the current year when a version is released.
81  */
82 #if __INTEL_LLVM_COMPILER < 1000000L
83 # define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/100)
84 # define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/10 % 10)
85 # define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 10)
86 #else
87 # define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/10000)
88 # define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/100 % 100)
89 # define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 100)
90 #endif
91 #if defined(_MSC_VER)
92  /* _MSC_VER = VVRR */
93 # define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
94 # define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
95 #endif
96 #if defined(__GNUC__)
97 # define SIMULATE_VERSION_MAJOR DEC(__GNUC__)
98 #elif defined(__GNUG__)
99 # define SIMULATE_VERSION_MAJOR DEC(__GNUG__)
100 #endif
101 #if defined(__GNUC_MINOR__)
102 # define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)
103 #endif
104 #if defined(__GNUC_PATCHLEVEL__)
105 # define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
106 #endif
107 
108 #elif defined(__PATHCC__)
109 # define COMPILER_ID "PathScale"
110 # define COMPILER_VERSION_MAJOR DEC(__PATHCC__)
111 # define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__)
112 # if defined(__PATHCC_PATCHLEVEL__)
113 # define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__)
114 # endif
115 
116 #elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__)
117 # define COMPILER_ID "Embarcadero"
118 # define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF)
119 # define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF)
120 # define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF)
121 
122 #elif defined(__BORLANDC__)
123 # define COMPILER_ID "Borland"
124  /* __BORLANDC__ = 0xVRR */
125 # define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8)
126 # define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF)
127 
128 #elif defined(__WATCOMC__) && __WATCOMC__ < 1200
129 # define COMPILER_ID "Watcom"
130  /* __WATCOMC__ = VVRR */
131 # define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100)
132 # define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)
133 # if (__WATCOMC__ % 10) > 0
134 # define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)
135 # endif
136 
137 #elif defined(__WATCOMC__)
138 # define COMPILER_ID "OpenWatcom"
139  /* __WATCOMC__ = VVRP + 1100 */
140 # define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100)
141 # define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)
142 # if (__WATCOMC__ % 10) > 0
143 # define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)
144 # endif
145 
146 #elif defined(__SUNPRO_CC)
147 # define COMPILER_ID "SunPro"
148 # if __SUNPRO_CC >= 0x5100
149  /* __SUNPRO_CC = 0xVRRP */
150 # define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12)
151 # define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF)
152 # define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF)
153 # else
154  /* __SUNPRO_CC = 0xVRP */
155 # define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8)
156 # define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF)
157 # define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF)
158 # endif
159 
160 #elif defined(__HP_aCC)
161 # define COMPILER_ID "HP"
162  /* __HP_aCC = VVRRPP */
163 # define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000)
164 # define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100)
165 # define COMPILER_VERSION_PATCH DEC(__HP_aCC % 100)
166 
167 #elif defined(__DECCXX)
168 # define COMPILER_ID "Compaq"
169  /* __DECCXX_VER = VVRRTPPPP */
170 # define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000)
171 # define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000 % 100)
172 # define COMPILER_VERSION_PATCH DEC(__DECCXX_VER % 10000)
173 
174 #elif defined(__IBMCPP__) && defined(__COMPILER_VER__)
175 # define COMPILER_ID "zOS"
176  /* __IBMCPP__ = VRP */
177 # define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100)
178 # define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10)
179 # define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10)
180 
181 #elif defined(__open_xl__) && defined(__clang__)
182 # define COMPILER_ID "IBMClang"
183 # define COMPILER_VERSION_MAJOR DEC(__open_xl_version__)
184 # define COMPILER_VERSION_MINOR DEC(__open_xl_release__)
185 # define COMPILER_VERSION_PATCH DEC(__open_xl_modification__)
186 # define COMPILER_VERSION_TWEAK DEC(__open_xl_ptf_fix_level__)
187 
188 
189 #elif defined(__ibmxl__) && defined(__clang__)
190 # define COMPILER_ID "XLClang"
191 # define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__)
192 # define COMPILER_VERSION_MINOR DEC(__ibmxl_release__)
193 # define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__)
194 # define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__)
195 
196 
197 #elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800
198 # define COMPILER_ID "XL"
199  /* __IBMCPP__ = VRP */
200 # define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100)
201 # define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10)
202 # define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10)
203 
204 #elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800
205 # define COMPILER_ID "VisualAge"
206  /* __IBMCPP__ = VRP */
207 # define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100)
208 # define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10)
209 # define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10)
210 
211 #elif defined(__NVCOMPILER)
212 # define COMPILER_ID "NVHPC"
213 # define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__)
214 # define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__)
215 # if defined(__NVCOMPILER_PATCHLEVEL__)
216 # define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__)
217 # endif
218 
219 #elif defined(__PGI)
220 # define COMPILER_ID "PGI"
221 # define COMPILER_VERSION_MAJOR DEC(__PGIC__)
222 # define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__)
223 # if defined(__PGIC_PATCHLEVEL__)
224 # define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__)
225 # endif
226 
227 #elif defined(_CRAYC)
228 # define COMPILER_ID "Cray"
229 # define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR)
230 # define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR)
231 
232 #elif defined(__TI_COMPILER_VERSION__)
233 # define COMPILER_ID "TI"
234  /* __TI_COMPILER_VERSION__ = VVVRRRPPP */
235 # define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000)
236 # define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000)
237 # define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000)
238 
239 #elif defined(__CLANG_FUJITSU)
240 # define COMPILER_ID "FujitsuClang"
241 # define COMPILER_VERSION_MAJOR DEC(__FCC_major__)
242 # define COMPILER_VERSION_MINOR DEC(__FCC_minor__)
243 # define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__)
244 # define COMPILER_VERSION_INTERNAL_STR __clang_version__
245 
246 
247 #elif defined(__FUJITSU)
248 # define COMPILER_ID "Fujitsu"
249 # if defined(__FCC_version__)
250 # define COMPILER_VERSION __FCC_version__
251 # elif defined(__FCC_major__)
252 # define COMPILER_VERSION_MAJOR DEC(__FCC_major__)
253 # define COMPILER_VERSION_MINOR DEC(__FCC_minor__)
254 # define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__)
255 # endif
256 # if defined(__fcc_version)
257 # define COMPILER_VERSION_INTERNAL DEC(__fcc_version)
258 # elif defined(__FCC_VERSION)
259 # define COMPILER_VERSION_INTERNAL DEC(__FCC_VERSION)
260 # endif
261 
262 
263 #elif defined(__ghs__)
264 # define COMPILER_ID "GHS"
265 /* __GHS_VERSION_NUMBER = VVVVRP */
266 # ifdef __GHS_VERSION_NUMBER
267 # define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100)
268 # define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10)
269 # define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10)
270 # endif
271 
272 #elif defined(__SCO_VERSION__)
273 # define COMPILER_ID "SCO"
274 
275 #elif defined(__ARMCC_VERSION) && !defined(__clang__)
276 # define COMPILER_ID "ARMCC"
277 #if __ARMCC_VERSION >= 1000000
278  /* __ARMCC_VERSION = VRRPPPP */
279  # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000)
280  # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100)
281  # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000)
282 #else
283  /* __ARMCC_VERSION = VRPPPP */
284  # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000)
285  # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10)
286  # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000)
287 #endif
288 
289 
290 #elif defined(__clang__) && defined(__apple_build_version__)
291 # define COMPILER_ID "AppleClang"
292 # if defined(_MSC_VER)
293 # define SIMULATE_ID "MSVC"
294 # endif
295 # define COMPILER_VERSION_MAJOR DEC(__clang_major__)
296 # define COMPILER_VERSION_MINOR DEC(__clang_minor__)
297 # define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
298 # if defined(_MSC_VER)
299  /* _MSC_VER = VVRR */
300 # define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
301 # define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
302 # endif
303 # define COMPILER_VERSION_TWEAK DEC(__apple_build_version__)
304 
305 #elif defined(__clang__) && defined(__ARMCOMPILER_VERSION)
306 # define COMPILER_ID "ARMClang"
307  # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000)
308  # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100)
309  # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION % 10000)
310 # define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION)
311 
312 #elif defined(__clang__)
313 # define COMPILER_ID "Clang"
314 # if defined(_MSC_VER)
315 # define SIMULATE_ID "MSVC"
316 # endif
317 # define COMPILER_VERSION_MAJOR DEC(__clang_major__)
318 # define COMPILER_VERSION_MINOR DEC(__clang_minor__)
319 # define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
320 # if defined(_MSC_VER)
321  /* _MSC_VER = VVRR */
322 # define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
323 # define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
324 # endif
325 
326 #elif defined(__LCC__) && (defined(__GNUC__) || defined(__GNUG__) || defined(__MCST__))
327 # define COMPILER_ID "LCC"
328 # define COMPILER_VERSION_MAJOR DEC(1)
329 # if defined(__LCC__)
330 # define COMPILER_VERSION_MINOR DEC(__LCC__- 100)
331 # endif
332 # if defined(__LCC_MINOR__)
333 # define COMPILER_VERSION_PATCH DEC(__LCC_MINOR__)
334 # endif
335 # if defined(__GNUC__) && defined(__GNUC_MINOR__)
336 # define SIMULATE_ID "GNU"
337 # define SIMULATE_VERSION_MAJOR DEC(__GNUC__)
338 # define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)
339 # if defined(__GNUC_PATCHLEVEL__)
340 # define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
341 # endif
342 # endif
343 
344 #elif defined(__GNUC__) || defined(__GNUG__)
345 # define COMPILER_ID "GNU"
346 # if defined(__GNUC__)
347 # define COMPILER_VERSION_MAJOR DEC(__GNUC__)
348 # else
349 # define COMPILER_VERSION_MAJOR DEC(__GNUG__)
350 # endif
351 # if defined(__GNUC_MINOR__)
352 # define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__)
353 # endif
354 # if defined(__GNUC_PATCHLEVEL__)
355 # define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
356 # endif
357 
358 #elif defined(_MSC_VER)
359 # define COMPILER_ID "MSVC"
360  /* _MSC_VER = VVRR */
361 # define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100)
362 # define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100)
363 # if defined(_MSC_FULL_VER)
364 # if _MSC_VER >= 1400
365  /* _MSC_FULL_VER = VVRRPPPPP */
366 # define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000)
367 # else
368  /* _MSC_FULL_VER = VVRRPPPP */
369 # define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000)
370 # endif
371 # endif
372 # if defined(_MSC_BUILD)
373 # define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD)
374 # endif
375 
376 #elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__)
377 # define COMPILER_ID "ADSP"
378 #if defined(__VISUALDSPVERSION__)
379  /* __VISUALDSPVERSION__ = 0xVVRRPP00 */
380 # define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24)
381 # define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF)
382 # define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8 & 0xFF)
383 #endif
384 
385 #elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
386 # define COMPILER_ID "IAR"
387 # if defined(__VER__) && defined(__ICCARM__)
388 # define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000)
389 # define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000)
390 # define COMPILER_VERSION_PATCH DEC((__VER__) % 1000)
391 # define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)
392 # elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__))
393 # define COMPILER_VERSION_MAJOR DEC((__VER__) / 100)
394 # define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100))
395 # define COMPILER_VERSION_PATCH DEC(__SUBVERSION__)
396 # define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)
397 # endif
398 
399 
400 /* These compilers are either not known or too old to define an
401  identification macro. Try to identify the platform and guess that
402  it is the native compiler. */
403 #elif defined(__hpux) || defined(__hpua)
404 # define COMPILER_ID "HP"
405 
406 #else /* unknown compiler */
407 # define COMPILER_ID ""
408 #endif
409 
410 /* Construct the string literal in pieces to prevent the source from
411  getting matched. Store it in a pointer rather than an array
412  because some compilers will just produce instructions to fill the
413  array rather than assigning a pointer to a static array. */
414 char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]";
415 #ifdef SIMULATE_ID
416 char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";
417 #endif
418 
419 #ifdef __QNXNTO__
420 char const* qnxnto = "INFO" ":" "qnxnto[]";
421 #endif
422 
423 #if defined(__CRAYXT_COMPUTE_LINUX_TARGET)
424 char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]";
425 #endif
426 
427 #define STRINGIFY_HELPER(X) #X
428 #define STRINGIFY(X) STRINGIFY_HELPER(X)
429 
430 /* Identify known platforms by name. */
431 #if defined(__linux) || defined(__linux__) || defined(linux)
432 # define PLATFORM_ID "Linux"
433 
434 #elif defined(__MSYS__)
435 # define PLATFORM_ID "MSYS"
436 
437 #elif defined(__CYGWIN__)
438 # define PLATFORM_ID "Cygwin"
439 
440 #elif defined(__MINGW32__)
441 # define PLATFORM_ID "MinGW"
442 
443 #elif defined(__APPLE__)
444 # define PLATFORM_ID "Darwin"
445 
446 #elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
447 # define PLATFORM_ID "Windows"
448 
449 #elif defined(__FreeBSD__) || defined(__FreeBSD)
450 # define PLATFORM_ID "FreeBSD"
451 
452 #elif defined(__NetBSD__) || defined(__NetBSD)
453 # define PLATFORM_ID "NetBSD"
454 
455 #elif defined(__OpenBSD__) || defined(__OPENBSD)
456 # define PLATFORM_ID "OpenBSD"
457 
458 #elif defined(__sun) || defined(sun)
459 # define PLATFORM_ID "SunOS"
460 
461 #elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__)
462 # define PLATFORM_ID "AIX"
463 
464 #elif defined(__hpux) || defined(__hpux__)
465 # define PLATFORM_ID "HP-UX"
466 
467 #elif defined(__HAIKU__)
468 # define PLATFORM_ID "Haiku"
469 
470 #elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS)
471 # define PLATFORM_ID "BeOS"
472 
473 #elif defined(__QNX__) || defined(__QNXNTO__)
474 # define PLATFORM_ID "QNX"
475 
476 #elif defined(__tru64) || defined(_tru64) || defined(__TRU64__)
477 # define PLATFORM_ID "Tru64"
478 
479 #elif defined(__riscos) || defined(__riscos__)
480 # define PLATFORM_ID "RISCos"
481 
482 #elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__)
483 # define PLATFORM_ID "SINIX"
484 
485 #elif defined(__UNIX_SV__)
486 # define PLATFORM_ID "UNIX_SV"
487 
488 #elif defined(__bsdos__)
489 # define PLATFORM_ID "BSDOS"
490 
491 #elif defined(_MPRAS) || defined(MPRAS)
492 # define PLATFORM_ID "MP-RAS"
493 
494 #elif defined(__osf) || defined(__osf__)
495 # define PLATFORM_ID "OSF1"
496 
497 #elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv)
498 # define PLATFORM_ID "SCO_SV"
499 
500 #elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX)
501 # define PLATFORM_ID "ULTRIX"
502 
503 #elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX)
504 # define PLATFORM_ID "Xenix"
505 
506 #elif defined(__WATCOMC__)
507 # if defined(__LINUX__)
508 # define PLATFORM_ID "Linux"
509 
510 # elif defined(__DOS__)
511 # define PLATFORM_ID "DOS"
512 
513 # elif defined(__OS2__)
514 # define PLATFORM_ID "OS2"
515 
516 # elif defined(__WINDOWS__)
517 # define PLATFORM_ID "Windows3x"
518 
519 # elif defined(__VXWORKS__)
520 # define PLATFORM_ID "VxWorks"
521 
522 # else /* unknown platform */
523 # define PLATFORM_ID
524 # endif
525 
526 #elif defined(__INTEGRITY)
527 # if defined(INT_178B)
528 # define PLATFORM_ID "Integrity178"
529 
530 # else /* regular Integrity */
531 # define PLATFORM_ID "Integrity"
532 # endif
533 
534 #else /* unknown platform */
535 # define PLATFORM_ID
536 
537 #endif
538 
539 /* For windows compilers MSVC and Intel we can determine
540  the architecture of the compiler being used. This is because
541  the compilers do not have flags that can change the architecture,
542  but rather depend on which compiler is being used
543 */
544 #if defined(_WIN32) && defined(_MSC_VER)
545 # if defined(_M_IA64)
546 # define ARCHITECTURE_ID "IA64"
547 
548 # elif defined(_M_ARM64EC)
549 # define ARCHITECTURE_ID "ARM64EC"
550 
551 # elif defined(_M_X64) || defined(_M_AMD64)
552 # define ARCHITECTURE_ID "x64"
553 
554 # elif defined(_M_IX86)
555 # define ARCHITECTURE_ID "X86"
556 
557 # elif defined(_M_ARM64)
558 # define ARCHITECTURE_ID "ARM64"
559 
560 # elif defined(_M_ARM)
561 # if _M_ARM == 4
562 # define ARCHITECTURE_ID "ARMV4I"
563 # elif _M_ARM == 5
564 # define ARCHITECTURE_ID "ARMV5I"
565 # else
566 # define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM)
567 # endif
568 
569 # elif defined(_M_MIPS)
570 # define ARCHITECTURE_ID "MIPS"
571 
572 # elif defined(_M_SH)
573 # define ARCHITECTURE_ID "SHx"
574 
575 # else /* unknown architecture */
576 # define ARCHITECTURE_ID ""
577 # endif
578 
579 #elif defined(__WATCOMC__)
580 # if defined(_M_I86)
581 # define ARCHITECTURE_ID "I86"
582 
583 # elif defined(_M_IX86)
584 # define ARCHITECTURE_ID "X86"
585 
586 # else /* unknown architecture */
587 # define ARCHITECTURE_ID ""
588 # endif
589 
590 #elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
591 # if defined(__ICCARM__)
592 # define ARCHITECTURE_ID "ARM"
593 
594 # elif defined(__ICCRX__)
595 # define ARCHITECTURE_ID "RX"
596 
597 # elif defined(__ICCRH850__)
598 # define ARCHITECTURE_ID "RH850"
599 
600 # elif defined(__ICCRL78__)
601 # define ARCHITECTURE_ID "RL78"
602 
603 # elif defined(__ICCRISCV__)
604 # define ARCHITECTURE_ID "RISCV"
605 
606 # elif defined(__ICCAVR__)
607 # define ARCHITECTURE_ID "AVR"
608 
609 # elif defined(__ICC430__)
610 # define ARCHITECTURE_ID "MSP430"
611 
612 # elif defined(__ICCV850__)
613 # define ARCHITECTURE_ID "V850"
614 
615 # elif defined(__ICC8051__)
616 # define ARCHITECTURE_ID "8051"
617 
618 # elif defined(__ICCSTM8__)
619 # define ARCHITECTURE_ID "STM8"
620 
621 # else /* unknown architecture */
622 # define ARCHITECTURE_ID ""
623 # endif
624 
625 #elif defined(__ghs__)
626 # if defined(__PPC64__)
627 # define ARCHITECTURE_ID "PPC64"
628 
629 # elif defined(__ppc__)
630 # define ARCHITECTURE_ID "PPC"
631 
632 # elif defined(__ARM__)
633 # define ARCHITECTURE_ID "ARM"
634 
635 # elif defined(__x86_64__)
636 # define ARCHITECTURE_ID "x64"
637 
638 # elif defined(__i386__)
639 # define ARCHITECTURE_ID "X86"
640 
641 # else /* unknown architecture */
642 # define ARCHITECTURE_ID ""
643 # endif
644 
645 #elif defined(__TI_COMPILER_VERSION__)
646 # if defined(__TI_ARM__)
647 # define ARCHITECTURE_ID "ARM"
648 
649 # elif defined(__MSP430__)
650 # define ARCHITECTURE_ID "MSP430"
651 
652 # elif defined(__TMS320C28XX__)
653 # define ARCHITECTURE_ID "TMS320C28x"
654 
655 # elif defined(__TMS320C6X__) || defined(_TMS320C6X)
656 # define ARCHITECTURE_ID "TMS320C6x"
657 
658 # else /* unknown architecture */
659 # define ARCHITECTURE_ID ""
660 # endif
661 
662 #else
663 # define ARCHITECTURE_ID
664 #endif
665 
666 /* Convert integer to decimal digit literals. */
667 #define DEC(n) \
668  ('0' + (((n) / 10000000)%10)), \
669  ('0' + (((n) / 1000000)%10)), \
670  ('0' + (((n) / 100000)%10)), \
671  ('0' + (((n) / 10000)%10)), \
672  ('0' + (((n) / 1000)%10)), \
673  ('0' + (((n) / 100)%10)), \
674  ('0' + (((n) / 10)%10)), \
675  ('0' + ((n) % 10))
676 
677 /* Convert integer to hex digit literals. */
678 #define HEX(n) \
679  ('0' + ((n)>>28 & 0xF)), \
680  ('0' + ((n)>>24 & 0xF)), \
681  ('0' + ((n)>>20 & 0xF)), \
682  ('0' + ((n)>>16 & 0xF)), \
683  ('0' + ((n)>>12 & 0xF)), \
684  ('0' + ((n)>>8 & 0xF)), \
685  ('0' + ((n)>>4 & 0xF)), \
686  ('0' + ((n) & 0xF))
687 
688 /* Construct a string literal encoding the version number. */
689 #ifdef COMPILER_VERSION
690 char const* info_version = "INFO" ":" "compiler_version[" COMPILER_VERSION "]";
691 
692 /* Construct a string literal encoding the version number components. */
693 #elif defined(COMPILER_VERSION_MAJOR)
694 char const info_version[] = {
695  'I', 'N', 'F', 'O', ':',
696  'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[',
697  COMPILER_VERSION_MAJOR,
698 # ifdef COMPILER_VERSION_MINOR
699  '.', COMPILER_VERSION_MINOR,
700 # ifdef COMPILER_VERSION_PATCH
701  '.', COMPILER_VERSION_PATCH,
702 # ifdef COMPILER_VERSION_TWEAK
703  '.', COMPILER_VERSION_TWEAK,
704 # endif
705 # endif
706 # endif
707  ']','\0'};
708 #endif
709 
710 /* Construct a string literal encoding the internal version number. */
711 #ifdef COMPILER_VERSION_INTERNAL
712 char const info_version_internal[] = {
713  'I', 'N', 'F', 'O', ':',
714  'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_',
715  'i','n','t','e','r','n','a','l','[',
716  COMPILER_VERSION_INTERNAL,']','\0'};
717 #elif defined(COMPILER_VERSION_INTERNAL_STR)
718 char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]";
719 #endif
720 
721 /* Construct a string literal encoding the version number components. */
722 #ifdef SIMULATE_VERSION_MAJOR
723 char const info_simulate_version[] = {
724  'I', 'N', 'F', 'O', ':',
725  's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[',
726  SIMULATE_VERSION_MAJOR,
727 # ifdef SIMULATE_VERSION_MINOR
728  '.', SIMULATE_VERSION_MINOR,
729 # ifdef SIMULATE_VERSION_PATCH
730  '.', SIMULATE_VERSION_PATCH,
731 # ifdef SIMULATE_VERSION_TWEAK
732  '.', SIMULATE_VERSION_TWEAK,
733 # endif
734 # endif
735 # endif
736  ']','\0'};
737 #endif
738 
739 /* Construct the string literal in pieces to prevent the source from
740  getting matched. Store it in a pointer rather than an array
741  because some compilers will just produce instructions to fill the
742  array rather than assigning a pointer to a static array. */
743 char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]";
744 char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]";
745 
746 
747 
748 #if defined(__INTEL_COMPILER) && defined(_MSVC_LANG) && _MSVC_LANG < 201403L
749 # if defined(__INTEL_CXX11_MODE__)
750 # if defined(__cpp_aggregate_nsdmi)
751 # define CXX_STD 201402L
752 # else
753 # define CXX_STD 201103L
754 # endif
755 # else
756 # define CXX_STD 199711L
757 # endif
758 #elif defined(_MSC_VER) && defined(_MSVC_LANG)
759 # define CXX_STD _MSVC_LANG
760 #else
761 # define CXX_STD __cplusplus
762 #endif
763 
764 const char* info_language_standard_default = "INFO" ":" "standard_default["
765 #if CXX_STD > 202002L
766  "23"
767 #elif CXX_STD > 201703L
768  "20"
769 #elif CXX_STD >= 201703L
770  "17"
771 #elif CXX_STD >= 201402L
772  "14"
773 #elif CXX_STD >= 201103L
774  "11"
775 #else
776  "98"
777 #endif
778 "]";
779 
780 const char* info_language_extensions_default = "INFO" ":" "extensions_default["
781 #if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) || \
782  defined(__TI_COMPILER_VERSION__)) && \
783  !defined(__STRICT_ANSI__)
784  "ON"
785 #else
786  "OFF"
787 #endif
788 "]";
789 
790 /*--------------------------------------------------------------------------*/
791 
792 int main(int argc, char* argv[])
793 {
794  int require = 0;
795  require += info_compiler[argc];
796  require += info_platform[argc];
797 #ifdef COMPILER_VERSION_MAJOR
798  require += info_version[argc];
799 #endif
800 #ifdef COMPILER_VERSION_INTERNAL
801  require += info_version_internal[argc];
802 #endif
803 #ifdef SIMULATE_ID
804  require += info_simulate[argc];
805 #endif
806 #ifdef SIMULATE_VERSION_MAJOR
807  require += info_simulate_version[argc];
808 #endif
809 #if defined(__CRAYXT_COMPUTE_LINUX_TARGET)
810  require += info_cray[argc];
811 #endif
812  require += info_language_standard_default[argc];
813  require += info_language_extensions_default[argc];
814  (void)argv;
815  return require;
816 }