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(__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. */
414char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]";
415#ifdef SIMULATE_ID
416char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";
417#endif
418
419#ifdef __QNXNTO__
420char const* qnxnto = "INFO" ":" "qnxnto[]";
421#endif
422
423#if defined(__CRAYXT_COMPUTE_LINUX_TARGET)
424char 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
690char 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)
694char 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
712char 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)
718char 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
723char 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. */
743char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]";
744char 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
764const 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
780const 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
792int 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}
int main(int argc, char *argv[])
const char * info_language_extensions_default
char const * info_platform
const char * info_language_standard_default
char const * info_compiler
char const * info_arch
#define COMPILER_ID
#define ARCHITECTURE_ID
#define PLATFORM_ID