File:  [Coherent Logic Development] / ChivanetAimPidgin / CMakeFiles / 3.31.5 / CompilerIdCXX / CMakeCXXCompilerId.cpp
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Mon Jan 27 19:48:25 2025 UTC (6 months ago) by snw
Branches: MAIN, CoherentLogicDevelopment
CVS tags: test-tag, start, HEAD
Pidgin AIM Plugin for ChivaNet

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

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>