mirror of
https://github.com/Kitware/CMake.git
synced 2025-12-31 10:50:16 -06:00
CompilerId: Clarify C and C++ standard level detection
Use named constants. Regularize comparison patterns.
This commit is contained in:
@@ -39,19 +39,28 @@ char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]";
|
||||
@CMAKE_C_COMPILER_ID_PLATFORM_CONTENT@
|
||||
@CMAKE_C_COMPILER_ID_ERROR_FOR_TEST@
|
||||
|
||||
#define C_STD_99 199901L
|
||||
#define C_STD_11 201112L
|
||||
#define C_STD_17 201710L
|
||||
#define C_STD_23 202311L
|
||||
|
||||
#ifdef __STDC_VERSION__
|
||||
# define C_STD __STDC_VERSION__
|
||||
#endif
|
||||
|
||||
#if !defined(__STDC__) && !defined(__clang__)
|
||||
# if defined(_MSC_VER) || defined(__ibmxl__) || defined(__IBMC__)
|
||||
# define C_VERSION "90"
|
||||
# else
|
||||
# define C_VERSION
|
||||
# endif
|
||||
#elif __STDC_VERSION__ > 201710L
|
||||
#elif C_STD > C_STD_17
|
||||
# define C_VERSION "23"
|
||||
#elif __STDC_VERSION__ >= 201710L
|
||||
#elif C_STD > C_STD_11
|
||||
# define C_VERSION "17"
|
||||
#elif __STDC_VERSION__ >= 201000L
|
||||
#elif C_STD > C_STD_99
|
||||
# define C_VERSION "11"
|
||||
#elif __STDC_VERSION__ >= 199901L
|
||||
#elif C_STD >= C_STD_99
|
||||
# define C_VERSION "99"
|
||||
#else
|
||||
# define C_VERSION "90"
|
||||
|
||||
@@ -33,15 +33,23 @@ char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]";
|
||||
@CMAKE_CXX_COMPILER_ID_PLATFORM_CONTENT@
|
||||
@CMAKE_CXX_COMPILER_ID_ERROR_FOR_TEST@
|
||||
|
||||
#if defined(__INTEL_COMPILER) && defined(_MSVC_LANG) && _MSVC_LANG < 201403L
|
||||
#define CXX_STD_98 199711L
|
||||
#define CXX_STD_11 201103L
|
||||
#define CXX_STD_14 201402L
|
||||
#define CXX_STD_17 201703L
|
||||
#define CXX_STD_20 202002L
|
||||
#define CXX_STD_23 202302L
|
||||
|
||||
#if defined(__INTEL_COMPILER) && defined(_MSVC_LANG) && \
|
||||
_MSVC_LANG <= CXX_STD_14
|
||||
# if defined(__INTEL_CXX11_MODE__)
|
||||
# if defined(__cpp_aggregate_nsdmi)
|
||||
# define CXX_STD 201402L
|
||||
# define CXX_STD CXX_STD_14
|
||||
# else
|
||||
# define CXX_STD 201103L
|
||||
# define CXX_STD CXX_STD_11
|
||||
# endif
|
||||
# else
|
||||
# define CXX_STD 199711L
|
||||
# define CXX_STD CXX_STD_98
|
||||
# endif
|
||||
#elif defined(_MSC_VER) && defined(_MSVC_LANG)
|
||||
# define CXX_STD _MSVC_LANG
|
||||
@@ -50,15 +58,15 @@ char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]";
|
||||
#endif
|
||||
|
||||
const char* info_language_standard_default = "INFO" ":" "standard_default["
|
||||
#if CXX_STD > 202002L
|
||||
#if CXX_STD > CXX_STD_20
|
||||
"23"
|
||||
#elif CXX_STD > 201703L
|
||||
#elif CXX_STD > CXX_STD_17
|
||||
"20"
|
||||
#elif CXX_STD >= 201703L
|
||||
#elif CXX_STD > CXX_STD_14
|
||||
"17"
|
||||
#elif CXX_STD >= 201402L
|
||||
#elif CXX_STD > CXX_STD_11
|
||||
"14"
|
||||
#elif CXX_STD >= 201103L
|
||||
#elif CXX_STD >= CXX_STD_11
|
||||
"11"
|
||||
#else
|
||||
"98"
|
||||
|
||||
@@ -1,18 +1,26 @@
|
||||
#define C_STD_99 199901L
|
||||
#define C_STD_11 201112L
|
||||
#define C_STD_17 201710L
|
||||
#define C_STD_23 202311L
|
||||
|
||||
#ifdef __STDC_VERSION__
|
||||
# define C_STD __STDC_VERSION__
|
||||
#endif
|
||||
|
||||
#if DEFAULT_C23
|
||||
# if __STDC_VERSION__ <= 201710L
|
||||
# if C_STD <= C_STD_17
|
||||
# error Unexpected value for __STDC_VERSION__.
|
||||
# endif
|
||||
#elif DEFAULT_C17
|
||||
# if __STDC_VERSION__ < 201710L
|
||||
# if C_STD <= C_STD_11
|
||||
# error Unexpected value for __STDC_VERSION__.
|
||||
# endif
|
||||
#elif DEFAULT_C11
|
||||
# if __STDC_VERSION__ < 201112L
|
||||
# if C_STD <= C_STD_99
|
||||
# error Unexpected value for __STDC_VERSION__.
|
||||
# endif
|
||||
#elif DEFAULT_C99
|
||||
# if __STDC_VERSION__ != 199901L
|
||||
# if C_STD != C_STD_99
|
||||
# error Unexpected value for __STDC_VERSION__.
|
||||
# endif
|
||||
#else
|
||||
|
||||
@@ -2,15 +2,23 @@
|
||||
template <long l>
|
||||
struct Outputter;
|
||||
|
||||
#if defined(__INTEL_COMPILER) && defined(_MSVC_LANG) && _MSVC_LANG < 201403L
|
||||
#define CXX_STD_98 199711L
|
||||
#define CXX_STD_11 201103L
|
||||
#define CXX_STD_14 201402L
|
||||
#define CXX_STD_17 201703L
|
||||
#define CXX_STD_20 202002L
|
||||
#define CXX_STD_23 202302L
|
||||
|
||||
#if defined(__INTEL_COMPILER) && defined(_MSVC_LANG) && \
|
||||
_MSVC_LANG <= CXX_STD_14
|
||||
# if defined(__INTEL_CXX11_MODE__)
|
||||
# if defined(__cpp_aggregate_nsdmi)
|
||||
# define CXX_STD 201402L
|
||||
# define CXX_STD CXX_STD_14
|
||||
# else
|
||||
# define CXX_STD 201103L
|
||||
# define CXX_STD CXX_STD_11
|
||||
# endif
|
||||
# else
|
||||
# define CXX_STD 199711L
|
||||
# define CXX_STD CXX_STD_98
|
||||
# endif
|
||||
#elif defined(_MSC_VER) && defined(_MSVC_LANG)
|
||||
# define CXX_STD _MSVC_LANG
|
||||
@@ -19,30 +27,30 @@ struct Outputter;
|
||||
#endif
|
||||
|
||||
#if DEFAULT_CXX23
|
||||
# if CXX_STD <= 202002L
|
||||
# if CXX_STD <= CXX_STD_20
|
||||
Outputter<CXX_STD> o;
|
||||
# endif
|
||||
#elif DEFAULT_CXX20
|
||||
# if CXX_STD <= 201703L
|
||||
# if CXX_STD <= CXX_STD_17
|
||||
Outputter<CXX_STD> o;
|
||||
# endif
|
||||
#elif DEFAULT_CXX17
|
||||
# if CXX_STD <= 201402L
|
||||
# if CXX_STD <= CXX_STD_14
|
||||
Outputter<CXX_STD> o;
|
||||
# endif
|
||||
#elif DEFAULT_CXX14
|
||||
# if CXX_STD != 201402L
|
||||
# if CXX_STD <= CXX_STD_11
|
||||
Outputter<CXX_STD> o;
|
||||
# endif
|
||||
#elif DEFAULT_CXX11
|
||||
# if CXX_STD != 201103L
|
||||
# if CXX_STD != CXX_STD_11
|
||||
Outputter<CXX_STD> o;
|
||||
# endif
|
||||
#else
|
||||
# if !DEFAULT_CXX98
|
||||
# error Buildsystem error
|
||||
# endif
|
||||
# if CXX_STD != 199711L && CXX_STD != 1 && \
|
||||
# if CXX_STD != CXX_STD_98 && CXX_STD != 1 && \
|
||||
!defined(__GXX_EXPERIMENTAL_CXX0X__)
|
||||
Outputter<CXX_STD> o;
|
||||
# endif
|
||||
|
||||
Reference in New Issue
Block a user