properties-cpp  0.0.1
A very simple convenience library for handling properties and signals in C++11.
CMakeCXXCompilerId.cpp
Go to the documentation of this file.
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(__TASKING__)
273 # define COMPILER_ID "Tasking"
274  # define COMPILER_VERSION_MAJOR DEC(__VERSION__/1000)
275  # define COMPILER_VERSION_MINOR DEC(__VERSION__ % 100)
276 # define COMPILER_VERSION_INTERNAL DEC(__VERSION__)
277 
278 #elif defined(__SCO_VERSION__)
279 # define COMPILER_ID "SCO"
280 
281 #elif defined(__ARMCC_VERSION) && !defined(__clang__)
282 # define COMPILER_ID "ARMCC"
283 #if __ARMCC_VERSION >= 1000000
284  /* __ARMCC_VERSION = VRRPPPP */
285  # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000)
286  # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100)
287  # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000)
288 #else
289  /* __ARMCC_VERSION = VRPPPP */
290  # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000)
291  # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10)
292  # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000)
293 #endif
294 
295 
296 #elif defined(__clang__) && defined(__apple_build_version__)
297 # define COMPILER_ID "AppleClang"
298 # if defined(_MSC_VER)
299 # define SIMULATE_ID "MSVC"
300 # endif
301 # define COMPILER_VERSION_MAJOR DEC(__clang_major__)
302 # define COMPILER_VERSION_MINOR DEC(__clang_minor__)
303 # define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
304 # if defined(_MSC_VER)
305  /* _MSC_VER = VVRR */
306 # define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
307 # define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
308 # endif
309 # define COMPILER_VERSION_TWEAK DEC(__apple_build_version__)
310 
311 #elif defined(__clang__) && defined(__ARMCOMPILER_VERSION)
312 # define COMPILER_ID "ARMClang"
313  # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000)
314  # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100)
315  # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION % 10000)
316 # define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION)
317 
318 #elif defined(__clang__)
319 # define COMPILER_ID "Clang"
320 # if defined(_MSC_VER)
321 # define SIMULATE_ID "MSVC"
322 # endif
323 # define COMPILER_VERSION_MAJOR DEC(__clang_major__)
324 # define COMPILER_VERSION_MINOR DEC(__clang_minor__)
325 # define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
326 # if defined(_MSC_VER)
327  /* _MSC_VER = VVRR */
328 # define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
329 # define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
330 # endif
331 
332 #elif defined(__LCC__) && (defined(__GNUC__) || defined(__GNUG__) || defined(__MCST__))
333 # define COMPILER_ID "LCC"
334 # define COMPILER_VERSION_MAJOR DEC(1)
335 # if defined(__LCC__)
336 # define COMPILER_VERSION_MINOR DEC(__LCC__- 100)
337 # endif
338 # if defined(__LCC_MINOR__)
339 # define COMPILER_VERSION_PATCH DEC(__LCC_MINOR__)
340 # endif
341 # if defined(__GNUC__) && defined(__GNUC_MINOR__)
342 # define SIMULATE_ID "GNU"
343 # define SIMULATE_VERSION_MAJOR DEC(__GNUC__)
344 # define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)
345 # if defined(__GNUC_PATCHLEVEL__)
346 # define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
347 # endif
348 # endif
349 
350 #elif defined(__GNUC__) || defined(__GNUG__)
351 # define COMPILER_ID "GNU"
352 # if defined(__GNUC__)
353 # define COMPILER_VERSION_MAJOR DEC(__GNUC__)
354 # else
355 # define COMPILER_VERSION_MAJOR DEC(__GNUG__)
356 # endif
357 # if defined(__GNUC_MINOR__)
358 # define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__)
359 # endif
360 # if defined(__GNUC_PATCHLEVEL__)
361 # define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
362 # endif
363 
364 #elif defined(_MSC_VER)
365 # define COMPILER_ID "MSVC"
366  /* _MSC_VER = VVRR */
367 # define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100)
368 # define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100)
369 # if defined(_MSC_FULL_VER)
370 # if _MSC_VER >= 1400
371  /* _MSC_FULL_VER = VVRRPPPPP */
372 # define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000)
373 # else
374  /* _MSC_FULL_VER = VVRRPPPP */
375 # define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000)
376 # endif
377 # endif
378 # if defined(_MSC_BUILD)
379 # define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD)
380 # endif
381 
382 #elif defined(_ADI_COMPILER)
383 # define COMPILER_ID "ADSP"
384 #if defined(__VERSIONNUM__)
385  /* __VERSIONNUM__ = 0xVVRRPPTT */
386 # define COMPILER_VERSION_MAJOR DEC(__VERSIONNUM__ >> 24 & 0xFF)
387 # define COMPILER_VERSION_MINOR DEC(__VERSIONNUM__ >> 16 & 0xFF)
388 # define COMPILER_VERSION_PATCH DEC(__VERSIONNUM__ >> 8 & 0xFF)
389 # define COMPILER_VERSION_TWEAK DEC(__VERSIONNUM__ & 0xFF)
390 #endif
391 
392 #elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
393 # define COMPILER_ID "IAR"
394 # if defined(__VER__) && defined(__ICCARM__)
395 # define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000)
396 # define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000)
397 # define COMPILER_VERSION_PATCH DEC((__VER__) % 1000)
398 # define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)
399 # elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__))
400 # define COMPILER_VERSION_MAJOR DEC((__VER__) / 100)
401 # define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100))
402 # define COMPILER_VERSION_PATCH DEC(__SUBVERSION__)
403 # define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)
404 # endif
405 
406 
407 /* These compilers are either not known or too old to define an
408  identification macro. Try to identify the platform and guess that
409  it is the native compiler. */
410 #elif defined(__hpux) || defined(__hpua)
411 # define COMPILER_ID "HP"
412 
413 #else /* unknown compiler */
414 # define COMPILER_ID ""
415 #endif
416 
417 /* Construct the string literal in pieces to prevent the source from
418  getting matched. Store it in a pointer rather than an array
419  because some compilers will just produce instructions to fill the
420  array rather than assigning a pointer to a static array. */
421 char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]";
422 #ifdef SIMULATE_ID
423 char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";
424 #endif
425 
426 #ifdef __QNXNTO__
427 char const* qnxnto = "INFO" ":" "qnxnto[]";
428 #endif
429 
430 #if defined(__CRAYXT_COMPUTE_LINUX_TARGET)
431 char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]";
432 #endif
433 
434 #define STRINGIFY_HELPER(X) #X
435 #define STRINGIFY(X) STRINGIFY_HELPER(X)
436 
437 /* Identify known platforms by name. */
438 #if defined(__linux) || defined(__linux__) || defined(linux)
439 # define PLATFORM_ID "Linux"
440 
441 #elif defined(__MSYS__)
442 # define PLATFORM_ID "MSYS"
443 
444 #elif defined(__CYGWIN__)
445 # define PLATFORM_ID "Cygwin"
446 
447 #elif defined(__MINGW32__)
448 # define PLATFORM_ID "MinGW"
449 
450 #elif defined(__APPLE__)
451 # define PLATFORM_ID "Darwin"
452 
453 #elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
454 # define PLATFORM_ID "Windows"
455 
456 #elif defined(__FreeBSD__) || defined(__FreeBSD)
457 # define PLATFORM_ID "FreeBSD"
458 
459 #elif defined(__NetBSD__) || defined(__NetBSD)
460 # define PLATFORM_ID "NetBSD"
461 
462 #elif defined(__OpenBSD__) || defined(__OPENBSD)
463 # define PLATFORM_ID "OpenBSD"
464 
465 #elif defined(__sun) || defined(sun)
466 # define PLATFORM_ID "SunOS"
467 
468 #elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__)
469 # define PLATFORM_ID "AIX"
470 
471 #elif defined(__hpux) || defined(__hpux__)
472 # define PLATFORM_ID "HP-UX"
473 
474 #elif defined(__HAIKU__)
475 # define PLATFORM_ID "Haiku"
476 
477 #elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS)
478 # define PLATFORM_ID "BeOS"
479 
480 #elif defined(__QNX__) || defined(__QNXNTO__)
481 # define PLATFORM_ID "QNX"
482 
483 #elif defined(__tru64) || defined(_tru64) || defined(__TRU64__)
484 # define PLATFORM_ID "Tru64"
485 
486 #elif defined(__riscos) || defined(__riscos__)
487 # define PLATFORM_ID "RISCos"
488 
489 #elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__)
490 # define PLATFORM_ID "SINIX"
491 
492 #elif defined(__UNIX_SV__)
493 # define PLATFORM_ID "UNIX_SV"
494 
495 #elif defined(__bsdos__)
496 # define PLATFORM_ID "BSDOS"
497 
498 #elif defined(_MPRAS) || defined(MPRAS)
499 # define PLATFORM_ID "MP-RAS"
500 
501 #elif defined(__osf) || defined(__osf__)
502 # define PLATFORM_ID "OSF1"
503 
504 #elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv)
505 # define PLATFORM_ID "SCO_SV"
506 
507 #elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX)
508 # define PLATFORM_ID "ULTRIX"
509 
510 #elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX)
511 # define PLATFORM_ID "Xenix"
512 
513 #elif defined(__WATCOMC__)
514 # if defined(__LINUX__)
515 # define PLATFORM_ID "Linux"
516 
517 # elif defined(__DOS__)
518 # define PLATFORM_ID "DOS"
519 
520 # elif defined(__OS2__)
521 # define PLATFORM_ID "OS2"
522 
523 # elif defined(__WINDOWS__)
524 # define PLATFORM_ID "Windows3x"
525 
526 # elif defined(__VXWORKS__)
527 # define PLATFORM_ID "VxWorks"
528 
529 # else /* unknown platform */
530 # define PLATFORM_ID
531 # endif
532 
533 #elif defined(__INTEGRITY)
534 # if defined(INT_178B)
535 # define PLATFORM_ID "Integrity178"
536 
537 # else /* regular Integrity */
538 # define PLATFORM_ID "Integrity"
539 # endif
540 
541 # elif defined(_ADI_COMPILER)
542 # define PLATFORM_ID "ADSP"
543 
544 #else /* unknown platform */
545 # define PLATFORM_ID
546 
547 #endif
548 
549 /* For windows compilers MSVC and Intel we can determine
550  the architecture of the compiler being used. This is because
551  the compilers do not have flags that can change the architecture,
552  but rather depend on which compiler is being used
553 */
554 #if defined(_WIN32) && defined(_MSC_VER)
555 # if defined(_M_IA64)
556 # define ARCHITECTURE_ID "IA64"
557 
558 # elif defined(_M_ARM64EC)
559 # define ARCHITECTURE_ID "ARM64EC"
560 
561 # elif defined(_M_X64) || defined(_M_AMD64)
562 # define ARCHITECTURE_ID "x64"
563 
564 # elif defined(_M_IX86)
565 # define ARCHITECTURE_ID "X86"
566 
567 # elif defined(_M_ARM64)
568 # define ARCHITECTURE_ID "ARM64"
569 
570 # elif defined(_M_ARM)
571 # if _M_ARM == 4
572 # define ARCHITECTURE_ID "ARMV4I"
573 # elif _M_ARM == 5
574 # define ARCHITECTURE_ID "ARMV5I"
575 # else
576 # define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM)
577 # endif
578 
579 # elif defined(_M_MIPS)
580 # define ARCHITECTURE_ID "MIPS"
581 
582 # elif defined(_M_SH)
583 # define ARCHITECTURE_ID "SHx"
584 
585 # else /* unknown architecture */
586 # define ARCHITECTURE_ID ""
587 # endif
588 
589 #elif defined(__WATCOMC__)
590 # if defined(_M_I86)
591 # define ARCHITECTURE_ID "I86"
592 
593 # elif defined(_M_IX86)
594 # define ARCHITECTURE_ID "X86"
595 
596 # else /* unknown architecture */
597 # define ARCHITECTURE_ID ""
598 # endif
599 
600 #elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
601 # if defined(__ICCARM__)
602 # define ARCHITECTURE_ID "ARM"
603 
604 # elif defined(__ICCRX__)
605 # define ARCHITECTURE_ID "RX"
606 
607 # elif defined(__ICCRH850__)
608 # define ARCHITECTURE_ID "RH850"
609 
610 # elif defined(__ICCRL78__)
611 # define ARCHITECTURE_ID "RL78"
612 
613 # elif defined(__ICCRISCV__)
614 # define ARCHITECTURE_ID "RISCV"
615 
616 # elif defined(__ICCAVR__)
617 # define ARCHITECTURE_ID "AVR"
618 
619 # elif defined(__ICC430__)
620 # define ARCHITECTURE_ID "MSP430"
621 
622 # elif defined(__ICCV850__)
623 # define ARCHITECTURE_ID "V850"
624 
625 # elif defined(__ICC8051__)
626 # define ARCHITECTURE_ID "8051"
627 
628 # elif defined(__ICCSTM8__)
629 # define ARCHITECTURE_ID "STM8"
630 
631 # else /* unknown architecture */
632 # define ARCHITECTURE_ID ""
633 # endif
634 
635 #elif defined(__ghs__)
636 # if defined(__PPC64__)
637 # define ARCHITECTURE_ID "PPC64"
638 
639 # elif defined(__ppc__)
640 # define ARCHITECTURE_ID "PPC"
641 
642 # elif defined(__ARM__)
643 # define ARCHITECTURE_ID "ARM"
644 
645 # elif defined(__x86_64__)
646 # define ARCHITECTURE_ID "x64"
647 
648 # elif defined(__i386__)
649 # define ARCHITECTURE_ID "X86"
650 
651 # else /* unknown architecture */
652 # define ARCHITECTURE_ID ""
653 # endif
654 
655 #elif defined(__TI_COMPILER_VERSION__)
656 # if defined(__TI_ARM__)
657 # define ARCHITECTURE_ID "ARM"
658 
659 # elif defined(__MSP430__)
660 # define ARCHITECTURE_ID "MSP430"
661 
662 # elif defined(__TMS320C28XX__)
663 # define ARCHITECTURE_ID "TMS320C28x"
664 
665 # elif defined(__TMS320C6X__) || defined(_TMS320C6X)
666 # define ARCHITECTURE_ID "TMS320C6x"
667 
668 # else /* unknown architecture */
669 # define ARCHITECTURE_ID ""
670 # endif
671 
672 # elif defined(__ADSPSHARC__)
673 # define ARCHITECTURE_ID "SHARC"
674 
675 # elif defined(__ADSPBLACKFIN__)
676 # define ARCHITECTURE_ID "Blackfin"
677 
678 #elif defined(__TASKING__)
679 
680 # if defined(__CTC__) || defined(__CPTC__)
681 # define ARCHITECTURE_ID "TriCore"
682 
683 # elif defined(__CMCS__)
684 # define ARCHITECTURE_ID "MCS"
685 
686 # elif defined(__CARM__)
687 # define ARCHITECTURE_ID "ARM"
688 
689 # elif defined(__CARC__)
690 # define ARCHITECTURE_ID "ARC"
691 
692 # elif defined(__C51__)
693 # define ARCHITECTURE_ID "8051"
694 
695 # elif defined(__CPCP__)
696 # define ARCHITECTURE_ID "PCP"
697 
698 # else
699 # define ARCHITECTURE_ID ""
700 # endif
701 
702 #else
703 # define ARCHITECTURE_ID
704 #endif
705 
706 /* Convert integer to decimal digit literals. */
707 #define DEC(n) \
708  ('0' + (((n) / 10000000)%10)), \
709  ('0' + (((n) / 1000000)%10)), \
710  ('0' + (((n) / 100000)%10)), \
711  ('0' + (((n) / 10000)%10)), \
712  ('0' + (((n) / 1000)%10)), \
713  ('0' + (((n) / 100)%10)), \
714  ('0' + (((n) / 10)%10)), \
715  ('0' + ((n) % 10))
716 
717 /* Convert integer to hex digit literals. */
718 #define HEX(n) \
719  ('0' + ((n)>>28 & 0xF)), \
720  ('0' + ((n)>>24 & 0xF)), \
721  ('0' + ((n)>>20 & 0xF)), \
722  ('0' + ((n)>>16 & 0xF)), \
723  ('0' + ((n)>>12 & 0xF)), \
724  ('0' + ((n)>>8 & 0xF)), \
725  ('0' + ((n)>>4 & 0xF)), \
726  ('0' + ((n) & 0xF))
727 
728 /* Construct a string literal encoding the version number. */
729 #ifdef COMPILER_VERSION
730 char const* info_version = "INFO" ":" "compiler_version[" COMPILER_VERSION "]";
731 
732 /* Construct a string literal encoding the version number components. */
733 #elif defined(COMPILER_VERSION_MAJOR)
734 char const info_version[] = {
735  'I', 'N', 'F', 'O', ':',
736  'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[',
737  COMPILER_VERSION_MAJOR,
738 # ifdef COMPILER_VERSION_MINOR
739  '.', COMPILER_VERSION_MINOR,
740 # ifdef COMPILER_VERSION_PATCH
741  '.', COMPILER_VERSION_PATCH,
742 # ifdef COMPILER_VERSION_TWEAK
743  '.', COMPILER_VERSION_TWEAK,
744 # endif
745 # endif
746 # endif
747  ']','\0'};
748 #endif
749 
750 /* Construct a string literal encoding the internal version number. */
751 #ifdef COMPILER_VERSION_INTERNAL
752 char const info_version_internal[] = {
753  'I', 'N', 'F', 'O', ':',
754  'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_',
755  'i','n','t','e','r','n','a','l','[',
756  COMPILER_VERSION_INTERNAL,']','\0'};
757 #elif defined(COMPILER_VERSION_INTERNAL_STR)
758 char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]";
759 #endif
760 
761 /* Construct a string literal encoding the version number components. */
762 #ifdef SIMULATE_VERSION_MAJOR
763 char const info_simulate_version[] = {
764  'I', 'N', 'F', 'O', ':',
765  's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[',
766  SIMULATE_VERSION_MAJOR,
767 # ifdef SIMULATE_VERSION_MINOR
768  '.', SIMULATE_VERSION_MINOR,
769 # ifdef SIMULATE_VERSION_PATCH
770  '.', SIMULATE_VERSION_PATCH,
771 # ifdef SIMULATE_VERSION_TWEAK
772  '.', SIMULATE_VERSION_TWEAK,
773 # endif
774 # endif
775 # endif
776  ']','\0'};
777 #endif
778 
779 /* Construct the string literal in pieces to prevent the source from
780  getting matched. Store it in a pointer rather than an array
781  because some compilers will just produce instructions to fill the
782  array rather than assigning a pointer to a static array. */
783 char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]";
784 char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]";
785 
786 
787 
788 #if defined(__INTEL_COMPILER) && defined(_MSVC_LANG) && _MSVC_LANG < 201403L
789 # if defined(__INTEL_CXX11_MODE__)
790 # if defined(__cpp_aggregate_nsdmi)
791 # define CXX_STD 201402L
792 # else
793 # define CXX_STD 201103L
794 # endif
795 # else
796 # define CXX_STD 199711L
797 # endif
798 #elif defined(_MSC_VER) && defined(_MSVC_LANG)
799 # define CXX_STD _MSVC_LANG
800 #else
801 # define CXX_STD __cplusplus
802 #endif
803 
804 const char* info_language_standard_default = "INFO" ":" "standard_default["
805 #if CXX_STD > 202002L
806  "23"
807 #elif CXX_STD > 201703L
808  "20"
809 #elif CXX_STD >= 201703L
810  "17"
811 #elif CXX_STD >= 201402L
812  "14"
813 #elif CXX_STD >= 201103L
814  "11"
815 #else
816  "98"
817 #endif
818 "]";
819 
820 const char* info_language_extensions_default = "INFO" ":" "extensions_default["
821 #if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) || \
822  defined(__TI_COMPILER_VERSION__)) && \
823  !defined(__STRICT_ANSI__)
824  "ON"
825 #else
826  "OFF"
827 #endif
828 "]";
829 
830 /*--------------------------------------------------------------------------*/
831 
832 int main(int argc, char* argv[])
833 {
834  int require = 0;
835  require += info_compiler[argc];
836  require += info_platform[argc];
837  require += info_arch[argc];
838 #ifdef COMPILER_VERSION_MAJOR
839  require += info_version[argc];
840 #endif
841 #ifdef COMPILER_VERSION_INTERNAL
842  require += info_version_internal[argc];
843 #endif
844 #ifdef SIMULATE_ID
845  require += info_simulate[argc];
846 #endif
847 #ifdef SIMULATE_VERSION_MAJOR
848  require += info_simulate_version[argc];
849 #endif
850 #if defined(__CRAYXT_COMPUTE_LINUX_TARGET)
851  require += info_cray[argc];
852 #endif
853  require += info_language_standard_default[argc];
854  require += info_language_extensions_default[argc];
855  (void)argv;
856  return require;
857 }
#define COMPILER_ID
#define PLATFORM_ID
int main(int argc, char *argv[])
char const * info_compiler
const char * info_language_extensions_default
const char * info_language_standard_default
#define ARCHITECTURE_ID
char const * info_arch
char const * info_platform