--- /dev/null
+/* This source file must have a .cpp extension so that all C++ compilers\r
+ recognize the extension without flags. Borland does not know .cxx for\r
+ example. */\r
+#ifndef __cplusplus\r
+# error "A C compiler has been selected for C++."\r
+#endif\r
+\r
+\r
+/* Version number components: V=Version, R=Revision, P=Patch\r
+ Version date components: YYYY=Year, MM=Month, DD=Day */\r
+\r
+#if defined(__COMO__)\r
+# define COMPILER_ID "Comeau"\r
+ /* __COMO_VERSION__ = VRR */\r
+# define COMPILER_VERSION_MAJOR DEC(__COMO_VERSION__ / 100)\r
+# define COMPILER_VERSION_MINOR DEC(__COMO_VERSION__ % 100)\r
+\r
+#elif defined(__INTEL_COMPILER) || defined(__ICC)\r
+# define COMPILER_ID "Intel"\r
+# if defined(_MSC_VER)\r
+# define SIMULATE_ID "MSVC"\r
+# endif\r
+# if defined(__GNUC__)\r
+# define SIMULATE_ID "GNU"\r
+# endif\r
+ /* __INTEL_COMPILER = VRP */\r
+# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100)\r
+# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10)\r
+# if defined(__INTEL_COMPILER_UPDATE)\r
+# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE)\r
+# else\r
+# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10)\r
+# endif\r
+# if defined(__INTEL_COMPILER_BUILD_DATE)\r
+ /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */\r
+# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE)\r
+# endif\r
+# if defined(_MSC_VER)\r
+ /* _MSC_VER = VVRR */\r
+# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)\r
+# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)\r
+# endif\r
+# if defined(__GNUC__)\r
+# define SIMULATE_VERSION_MAJOR DEC(__GNUC__)\r
+# elif defined(__GNUG__)\r
+# define SIMULATE_VERSION_MAJOR DEC(__GNUG__)\r
+# endif\r
+# if defined(__GNUC_MINOR__)\r
+# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)\r
+# endif\r
+# if defined(__GNUC_PATCHLEVEL__)\r
+# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)\r
+# endif\r
+\r
+#elif defined(__PATHCC__)\r
+# define COMPILER_ID "PathScale"\r
+# define COMPILER_VERSION_MAJOR DEC(__PATHCC__)\r
+# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__)\r
+# if defined(__PATHCC_PATCHLEVEL__)\r
+# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__)\r
+# endif\r
+\r
+#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__)\r
+# define COMPILER_ID "Embarcadero"\r
+# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF)\r
+# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF)\r
+# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF)\r
+\r
+#elif defined(__BORLANDC__)\r
+# define COMPILER_ID "Borland"\r
+ /* __BORLANDC__ = 0xVRR */\r
+# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8)\r
+# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF)\r
+\r
+#elif defined(__WATCOMC__) && __WATCOMC__ < 1200\r
+# define COMPILER_ID "Watcom"\r
+ /* __WATCOMC__ = VVRR */\r
+# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100)\r
+# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)\r
+# if (__WATCOMC__ % 10) > 0\r
+# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)\r
+# endif\r
+\r
+#elif defined(__WATCOMC__)\r
+# define COMPILER_ID "OpenWatcom"\r
+ /* __WATCOMC__ = VVRP + 1100 */\r
+# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100)\r
+# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)\r
+# if (__WATCOMC__ % 10) > 0\r
+# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)\r
+# endif\r
+\r
+#elif defined(__SUNPRO_CC)\r
+# define COMPILER_ID "SunPro"\r
+# if __SUNPRO_CC >= 0x5100\r
+ /* __SUNPRO_CC = 0xVRRP */\r
+# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12)\r
+# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF)\r
+# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF)\r
+# else\r
+ /* __SUNPRO_CC = 0xVRP */\r
+# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8)\r
+# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF)\r
+# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF)\r
+# endif\r
+\r
+#elif defined(__HP_aCC)\r
+# define COMPILER_ID "HP"\r
+ /* __HP_aCC = VVRRPP */\r
+# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000)\r
+# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100)\r
+# define COMPILER_VERSION_PATCH DEC(__HP_aCC % 100)\r
+\r
+#elif defined(__DECCXX)\r
+# define COMPILER_ID "Compaq"\r
+ /* __DECCXX_VER = VVRRTPPPP */\r
+# define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000)\r
+# define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000 % 100)\r
+# define COMPILER_VERSION_PATCH DEC(__DECCXX_VER % 10000)\r
+\r
+#elif defined(__IBMCPP__) && defined(__COMPILER_VER__)\r
+# define COMPILER_ID "zOS"\r
+ /* __IBMCPP__ = VRP */\r
+# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100)\r
+# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10)\r
+# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10)\r
+\r
+#elif defined(__ibmxl__) && defined(__clang__)\r
+# define COMPILER_ID "XLClang"\r
+# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__)\r
+# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__)\r
+# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__)\r
+# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__)\r
+\r
+\r
+#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800\r
+# define COMPILER_ID "XL"\r
+ /* __IBMCPP__ = VRP */\r
+# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100)\r
+# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10)\r
+# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10)\r
+\r
+#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800\r
+# define COMPILER_ID "VisualAge"\r
+ /* __IBMCPP__ = VRP */\r
+# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100)\r
+# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10)\r
+# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10)\r
+\r
+#elif defined(__PGI)\r
+# define COMPILER_ID "PGI"\r
+# define COMPILER_VERSION_MAJOR DEC(__PGIC__)\r
+# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__)\r
+# if defined(__PGIC_PATCHLEVEL__)\r
+# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__)\r
+# endif\r
+\r
+#elif defined(_CRAYC)\r
+# define COMPILER_ID "Cray"\r
+# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR)\r
+# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR)\r
+\r
+#elif defined(__TI_COMPILER_VERSION__)\r
+# define COMPILER_ID "TI"\r
+ /* __TI_COMPILER_VERSION__ = VVVRRRPPP */\r
+# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000)\r
+# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000)\r
+# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000)\r
+\r
+#elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version)\r
+# define COMPILER_ID "Fujitsu"\r
+\r
+#elif defined(__ghs__)\r
+# define COMPILER_ID "GHS"\r
+/* __GHS_VERSION_NUMBER = VVVVRP */\r
+# ifdef __GHS_VERSION_NUMBER\r
+# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100)\r
+# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10)\r
+# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10)\r
+# endif\r
+\r
+#elif defined(__SCO_VERSION__)\r
+# define COMPILER_ID "SCO"\r
+\r
+#elif defined(__ARMCC_VERSION) && !defined(__clang__)\r
+# define COMPILER_ID "ARMCC"\r
+#if __ARMCC_VERSION >= 1000000\r
+ /* __ARMCC_VERSION = VRRPPPP */\r
+ # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000)\r
+ # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100)\r
+ # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000)\r
+#else\r
+ /* __ARMCC_VERSION = VRPPPP */\r
+ # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000)\r
+ # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10)\r
+ # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000)\r
+#endif\r
+\r
+\r
+#elif defined(__clang__) && defined(__apple_build_version__)\r
+# define COMPILER_ID "AppleClang"\r
+# if defined(_MSC_VER)\r
+# define SIMULATE_ID "MSVC"\r
+# endif\r
+# define COMPILER_VERSION_MAJOR DEC(__clang_major__)\r
+# define COMPILER_VERSION_MINOR DEC(__clang_minor__)\r
+# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)\r
+# if defined(_MSC_VER)\r
+ /* _MSC_VER = VVRR */\r
+# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)\r
+# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)\r
+# endif\r
+# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__)\r
+\r
+#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION)\r
+# define COMPILER_ID "ARMClang"\r
+ # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000)\r
+ # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100)\r
+ # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION % 10000)\r
+# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION)\r
+\r
+#elif defined(__clang__)\r
+# define COMPILER_ID "Clang"\r
+# if defined(_MSC_VER)\r
+# define SIMULATE_ID "MSVC"\r
+# endif\r
+# define COMPILER_VERSION_MAJOR DEC(__clang_major__)\r
+# define COMPILER_VERSION_MINOR DEC(__clang_minor__)\r
+# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)\r
+# if defined(_MSC_VER)\r
+ /* _MSC_VER = VVRR */\r
+# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)\r
+# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)\r
+# endif\r
+\r
+#elif defined(__GNUC__) || defined(__GNUG__)\r
+# define COMPILER_ID "GNU"\r
+# if defined(__GNUC__)\r
+# define COMPILER_VERSION_MAJOR DEC(__GNUC__)\r
+# else\r
+# define COMPILER_VERSION_MAJOR DEC(__GNUG__)\r
+# endif\r
+# if defined(__GNUC_MINOR__)\r
+# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__)\r
+# endif\r
+# if defined(__GNUC_PATCHLEVEL__)\r
+# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)\r
+# endif\r
+\r
+#elif defined(_MSC_VER)\r
+# define COMPILER_ID "MSVC"\r
+ /* _MSC_VER = VVRR */\r
+# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100)\r
+# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100)\r
+# if defined(_MSC_FULL_VER)\r
+# if _MSC_VER >= 1400\r
+ /* _MSC_FULL_VER = VVRRPPPPP */\r
+# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000)\r
+# else\r
+ /* _MSC_FULL_VER = VVRRPPPP */\r
+# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000)\r
+# endif\r
+# endif\r
+# if defined(_MSC_BUILD)\r
+# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD)\r
+# endif\r
+\r
+#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__)\r
+# define COMPILER_ID "ADSP"\r
+#if defined(__VISUALDSPVERSION__)\r
+ /* __VISUALDSPVERSION__ = 0xVVRRPP00 */\r
+# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24)\r
+# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF)\r
+# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8 & 0xFF)\r
+#endif\r
+\r
+#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)\r
+# define COMPILER_ID "IAR"\r
+# if defined(__VER__) && defined(__ICCARM__)\r
+# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000)\r
+# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000)\r
+# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000)\r
+# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)\r
+# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__))\r
+# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100)\r
+# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100))\r
+# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__)\r
+# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)\r
+# endif\r
+\r
+\r
+/* These compilers are either not known or too old to define an\r
+ identification macro. Try to identify the platform and guess that\r
+ it is the native compiler. */\r
+#elif defined(__hpux) || defined(__hpua)\r
+# define COMPILER_ID "HP"\r
+\r
+#else /* unknown compiler */\r
+# define COMPILER_ID ""\r
+#endif\r
+\r
+/* Construct the string literal in pieces to prevent the source from\r
+ getting matched. Store it in a pointer rather than an array\r
+ because some compilers will just produce instructions to fill the\r
+ array rather than assigning a pointer to a static array. */\r
+char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]";\r
+#ifdef SIMULATE_ID\r
+char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";\r
+#endif\r
+\r
+#ifdef __QNXNTO__\r
+char const* qnxnto = "INFO" ":" "qnxnto[]";\r
+#endif\r
+\r
+#if defined(__CRAYXE) || defined(__CRAYXC)\r
+char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]";\r
+#endif\r
+\r
+#define STRINGIFY_HELPER(X) #X\r
+#define STRINGIFY(X) STRINGIFY_HELPER(X)\r
+\r
+/* Identify known platforms by name. */\r
+#if defined(__linux) || defined(__linux__) || defined(linux)\r
+# define PLATFORM_ID "Linux"\r
+\r
+#elif defined(__CYGWIN__)\r
+# define PLATFORM_ID "Cygwin"\r
+\r
+#elif defined(__MINGW32__)\r
+# define PLATFORM_ID "MinGW"\r
+\r
+#elif defined(__APPLE__)\r
+# define PLATFORM_ID "Darwin"\r
+\r
+#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)\r
+# define PLATFORM_ID "Windows"\r
+\r
+#elif defined(__FreeBSD__) || defined(__FreeBSD)\r
+# define PLATFORM_ID "FreeBSD"\r
+\r
+#elif defined(__NetBSD__) || defined(__NetBSD)\r
+# define PLATFORM_ID "NetBSD"\r
+\r
+#elif defined(__OpenBSD__) || defined(__OPENBSD)\r
+# define PLATFORM_ID "OpenBSD"\r
+\r
+#elif defined(__sun) || defined(sun)\r
+# define PLATFORM_ID "SunOS"\r
+\r
+#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__)\r
+# define PLATFORM_ID "AIX"\r
+\r
+#elif defined(__hpux) || defined(__hpux__)\r
+# define PLATFORM_ID "HP-UX"\r
+\r
+#elif defined(__HAIKU__)\r
+# define PLATFORM_ID "Haiku"\r
+\r
+#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS)\r
+# define PLATFORM_ID "BeOS"\r
+\r
+#elif defined(__QNX__) || defined(__QNXNTO__)\r
+# define PLATFORM_ID "QNX"\r
+\r
+#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__)\r
+# define PLATFORM_ID "Tru64"\r
+\r
+#elif defined(__riscos) || defined(__riscos__)\r
+# define PLATFORM_ID "RISCos"\r
+\r
+#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__)\r
+# define PLATFORM_ID "SINIX"\r
+\r
+#elif defined(__UNIX_SV__)\r
+# define PLATFORM_ID "UNIX_SV"\r
+\r
+#elif defined(__bsdos__)\r
+# define PLATFORM_ID "BSDOS"\r
+\r
+#elif defined(_MPRAS) || defined(MPRAS)\r
+# define PLATFORM_ID "MP-RAS"\r
+\r
+#elif defined(__osf) || defined(__osf__)\r
+# define PLATFORM_ID "OSF1"\r
+\r
+#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv)\r
+# define PLATFORM_ID "SCO_SV"\r
+\r
+#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX)\r
+# define PLATFORM_ID "ULTRIX"\r
+\r
+#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX)\r
+# define PLATFORM_ID "Xenix"\r
+\r
+#elif defined(__WATCOMC__)\r
+# if defined(__LINUX__)\r
+# define PLATFORM_ID "Linux"\r
+\r
+# elif defined(__DOS__)\r
+# define PLATFORM_ID "DOS"\r
+\r
+# elif defined(__OS2__)\r
+# define PLATFORM_ID "OS2"\r
+\r
+# elif defined(__WINDOWS__)\r
+# define PLATFORM_ID "Windows3x"\r
+\r
+# else /* unknown platform */\r
+# define PLATFORM_ID\r
+# endif\r
+\r
+#elif defined(__INTEGRITY)\r
+# if defined(INT_178B)\r
+# define PLATFORM_ID "Integrity178"\r
+\r
+# else /* regular Integrity */\r
+# define PLATFORM_ID "Integrity"\r
+# endif\r
+\r
+#else /* unknown platform */\r
+# define PLATFORM_ID\r
+\r
+#endif\r
+\r
+/* For windows compilers MSVC and Intel we can determine\r
+ the architecture of the compiler being used. This is because\r
+ the compilers do not have flags that can change the architecture,\r
+ but rather depend on which compiler is being used\r
+*/\r
+#if defined(_WIN32) && defined(_MSC_VER)\r
+# if defined(_M_IA64)\r
+# define ARCHITECTURE_ID "IA64"\r
+\r
+# elif defined(_M_X64) || defined(_M_AMD64)\r
+# define ARCHITECTURE_ID "x64"\r
+\r
+# elif defined(_M_IX86)\r
+# define ARCHITECTURE_ID "X86"\r
+\r
+# elif defined(_M_ARM64)\r
+# define ARCHITECTURE_ID "ARM64"\r
+\r
+# elif defined(_M_ARM)\r
+# if _M_ARM == 4\r
+# define ARCHITECTURE_ID "ARMV4I"\r
+# elif _M_ARM == 5\r
+# define ARCHITECTURE_ID "ARMV5I"\r
+# else\r
+# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM)\r
+# endif\r
+\r
+# elif defined(_M_MIPS)\r
+# define ARCHITECTURE_ID "MIPS"\r
+\r
+# elif defined(_M_SH)\r
+# define ARCHITECTURE_ID "SHx"\r
+\r
+# else /* unknown architecture */\r
+# define ARCHITECTURE_ID ""\r
+# endif\r
+\r
+#elif defined(__WATCOMC__)\r
+# if defined(_M_I86)\r
+# define ARCHITECTURE_ID "I86"\r
+\r
+# elif defined(_M_IX86)\r
+# define ARCHITECTURE_ID "X86"\r
+\r
+# else /* unknown architecture */\r
+# define ARCHITECTURE_ID ""\r
+# endif\r
+\r
+#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)\r
+# if defined(__ICCARM__)\r
+# define ARCHITECTURE_ID "ARM"\r
+\r
+# elif defined(__ICCRX__)\r
+# define ARCHITECTURE_ID "RX"\r
+\r
+# elif defined(__ICCRH850__)\r
+# define ARCHITECTURE_ID "RH850"\r
+\r
+# elif defined(__ICCRL78__)\r
+# define ARCHITECTURE_ID "RL78"\r
+\r
+# elif defined(__ICCRISCV__)\r
+# define ARCHITECTURE_ID "RISCV"\r
+\r
+# elif defined(__ICCAVR__)\r
+# define ARCHITECTURE_ID "AVR"\r
+\r
+# elif defined(__ICC430__)\r
+# define ARCHITECTURE_ID "MSP430"\r
+\r
+# elif defined(__ICCV850__)\r
+# define ARCHITECTURE_ID "V850"\r
+\r
+# elif defined(__ICC8051__)\r
+# define ARCHITECTURE_ID "8051"\r
+\r
+# else /* unknown architecture */\r
+# define ARCHITECTURE_ID ""\r
+# endif\r
+\r
+#elif defined(__ghs__)\r
+# if defined(__PPC64__)\r
+# define ARCHITECTURE_ID "PPC64"\r
+\r
+# elif defined(__ppc__)\r
+# define ARCHITECTURE_ID "PPC"\r
+\r
+# elif defined(__ARM__)\r
+# define ARCHITECTURE_ID "ARM"\r
+\r
+# elif defined(__x86_64__)\r
+# define ARCHITECTURE_ID "x64"\r
+\r
+# elif defined(__i386__)\r
+# define ARCHITECTURE_ID "X86"\r
+\r
+# else /* unknown architecture */\r
+# define ARCHITECTURE_ID ""\r
+# endif\r
+#else\r
+# define ARCHITECTURE_ID\r
+#endif\r
+\r
+/* Convert integer to decimal digit literals. */\r
+#define DEC(n) \\r
+ ('0' + (((n) / 10000000)%10)), \\r
+ ('0' + (((n) / 1000000)%10)), \\r
+ ('0' + (((n) / 100000)%10)), \\r
+ ('0' + (((n) / 10000)%10)), \\r
+ ('0' + (((n) / 1000)%10)), \\r
+ ('0' + (((n) / 100)%10)), \\r
+ ('0' + (((n) / 10)%10)), \\r
+ ('0' + ((n) % 10))\r
+\r
+/* Convert integer to hex digit literals. */\r
+#define HEX(n) \\r
+ ('0' + ((n)>>28 & 0xF)), \\r
+ ('0' + ((n)>>24 & 0xF)), \\r
+ ('0' + ((n)>>20 & 0xF)), \\r
+ ('0' + ((n)>>16 & 0xF)), \\r
+ ('0' + ((n)>>12 & 0xF)), \\r
+ ('0' + ((n)>>8 & 0xF)), \\r
+ ('0' + ((n)>>4 & 0xF)), \\r
+ ('0' + ((n) & 0xF))\r
+\r
+/* Construct a string literal encoding the version number components. */\r
+#ifdef COMPILER_VERSION_MAJOR\r
+char const info_version[] = {\r
+ 'I', 'N', 'F', 'O', ':',\r
+ 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[',\r
+ COMPILER_VERSION_MAJOR,\r
+# ifdef COMPILER_VERSION_MINOR\r
+ '.', COMPILER_VERSION_MINOR,\r
+# ifdef COMPILER_VERSION_PATCH\r
+ '.', COMPILER_VERSION_PATCH,\r
+# ifdef COMPILER_VERSION_TWEAK\r
+ '.', COMPILER_VERSION_TWEAK,\r
+# endif\r
+# endif\r
+# endif\r
+ ']','\0'};\r
+#endif\r
+\r
+/* Construct a string literal encoding the internal version number. */\r
+#ifdef COMPILER_VERSION_INTERNAL\r
+char const info_version_internal[] = {\r
+ 'I', 'N', 'F', 'O', ':',\r
+ 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_',\r
+ 'i','n','t','e','r','n','a','l','[',\r
+ COMPILER_VERSION_INTERNAL,']','\0'};\r
+#endif\r
+\r
+/* Construct a string literal encoding the version number components. */\r
+#ifdef SIMULATE_VERSION_MAJOR\r
+char const info_simulate_version[] = {\r
+ 'I', 'N', 'F', 'O', ':',\r
+ 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[',\r
+ SIMULATE_VERSION_MAJOR,\r
+# ifdef SIMULATE_VERSION_MINOR\r
+ '.', SIMULATE_VERSION_MINOR,\r
+# ifdef SIMULATE_VERSION_PATCH\r
+ '.', SIMULATE_VERSION_PATCH,\r
+# ifdef SIMULATE_VERSION_TWEAK\r
+ '.', SIMULATE_VERSION_TWEAK,\r
+# endif\r
+# endif\r
+# endif\r
+ ']','\0'};\r
+#endif\r
+\r
+/* Construct the string literal in pieces to prevent the source from\r
+ getting matched. Store it in a pointer rather than an array\r
+ because some compilers will just produce instructions to fill the\r
+ array rather than assigning a pointer to a static array. */\r
+char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]";\r
+char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]";\r
+\r
+\r
+\r
+\r
+#if defined(__INTEL_COMPILER) && defined(_MSVC_LANG) && _MSVC_LANG < 201403L\r
+# if defined(__INTEL_CXX11_MODE__)\r
+# if defined(__cpp_aggregate_nsdmi)\r
+# define CXX_STD 201402L\r
+# else\r
+# define CXX_STD 201103L\r
+# endif\r
+# else\r
+# define CXX_STD 199711L\r
+# endif\r
+#elif defined(_MSC_VER) && defined(_MSVC_LANG)\r
+# define CXX_STD _MSVC_LANG\r
+#else\r
+# define CXX_STD __cplusplus\r
+#endif\r
+\r
+const char* info_language_dialect_default = "INFO" ":" "dialect_default["\r
+#if CXX_STD > 201703L\r
+ "20"\r
+#elif CXX_STD >= 201703L\r
+ "17"\r
+#elif CXX_STD >= 201402L\r
+ "14"\r
+#elif CXX_STD >= 201103L\r
+ "11"\r
+#else\r
+ "98"\r
+#endif\r
+"]";\r
+\r
+/*--------------------------------------------------------------------------*/\r
+\r
+int main(int argc, char* argv[])\r
+{\r
+ int require = 0;\r
+ require += info_compiler[argc];\r
+ require += info_platform[argc];\r
+#ifdef COMPILER_VERSION_MAJOR\r
+ require += info_version[argc];\r
+#endif\r
+#ifdef COMPILER_VERSION_INTERNAL\r
+ require += info_version_internal[argc];\r
+#endif\r
+#ifdef SIMULATE_ID\r
+ require += info_simulate[argc];\r
+#endif\r
+#ifdef SIMULATE_VERSION_MAJOR\r
+ require += info_simulate_version[argc];\r
+#endif\r
+#if defined(__CRAYXE) || defined(__CRAYXC)\r
+ require += info_cray[argc];\r
+#endif\r
+ require += info_language_dialect_default[argc];\r
+ (void)argv;\r
+ return require;\r
+}\r