mirror of
https://github.com/Kitware/CMake.git
synced 2026-04-27 09:29:15 -05:00
Merge topic 'test-compile-features'
31acc90abeci: Record expected C and CXX language standard supportc37e279014Tests/CompileFeatures: Cover c_std_## and cxx_std_## meta-features58cd9ee03cTests/CompileFeatures: Factor out headers to compute C and C++ standard levels Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !9401
This commit is contained in:
@@ -1,3 +1,6 @@
|
||||
set(CMake_TEST_C_STANDARDS "90;99;11;17;23" CACHE STRING "")
|
||||
set(CMake_TEST_CXX_STANDARDS "98;11;14;17;20;23" CACHE STRING "")
|
||||
|
||||
set(CMake_TEST_CTestUpdate_BZR "ON" CACHE BOOL "")
|
||||
set(CMake_TEST_CTestUpdate_CVS "ON" CACHE BOOL "")
|
||||
set(CMake_TEST_CTestUpdate_GIT "ON" CACHE BOOL "")
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
set(CMake_TEST_C_STANDARDS "90;99;11;17;23" CACHE STRING "")
|
||||
set(CMake_TEST_CXX_STANDARDS "98;11;14;17;20;23" CACHE STRING "")
|
||||
|
||||
if (NOT "$ENV{CMAKE_CI_NIGHTLY}" STREQUAL "")
|
||||
set(CMake_TEST_TICLANG_TOOLCHAINS "$ENV{CI_PROJECT_DIR}/.gitlab/ticlang" CACHE PATH "")
|
||||
endif()
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
set(CMake_TEST_C_STANDARDS "90;99;11;17;23" CACHE STRING "")
|
||||
set(CMake_TEST_CXX_STANDARDS "98;11;14;17;20;23" CACHE STRING "")
|
||||
|
||||
set(CMake_TEST_CTestUpdate_BZR "ON" CACHE BOOL "")
|
||||
set(CMake_TEST_CTestUpdate_CVS "ON" CACHE BOOL "")
|
||||
set(CMake_TEST_CTestUpdate_GIT "ON" CACHE BOOL "")
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
set(CMake_TEST_C_STANDARDS "90;99;11;17;23" CACHE STRING "")
|
||||
set(CMake_TEST_CXX_STANDARDS "98;11;14;17;20;23" CACHE STRING "")
|
||||
|
||||
set(CMake_TEST_CTestUpdate_BZR "ON" CACHE BOOL "")
|
||||
set(CMake_TEST_CTestUpdate_GIT "ON" CACHE BOOL "")
|
||||
set(CMake_TEST_CTestUpdate_HG "ON" CACHE BOOL "")
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
set(CMake_TEST_C_STANDARDS "90;99;11;17;23" CACHE STRING "")
|
||||
set(CMake_TEST_CXX_STANDARDS "98;11;14;17;20;23" CACHE STRING "")
|
||||
|
||||
set(CMake_TEST_FindOpenAL "ON" CACHE BOOL "")
|
||||
set(CMake_TEST_FindOpenMP "ON" CACHE BOOL "")
|
||||
set(CMake_TEST_FindOpenMP_C "ON" CACHE BOOL "")
|
||||
@@ -5,5 +8,6 @@ set(CMake_TEST_FindOpenMP_CXX "ON" CACHE BOOL "")
|
||||
set(CMake_TEST_GUI "ON" CACHE BOOL "")
|
||||
set(CMake_TEST_TLS_VERIFY_URL "https://gitlab.kitware.com" CACHE STRING "")
|
||||
set(CMake_TEST_TLS_VERSION "1.3" CACHE STRING "")
|
||||
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/configure_macos_common.cmake")
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/configure_common.cmake")
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
set(CMake_TEST_C_STANDARDS "90;99;11;17;23" CACHE STRING "")
|
||||
set(CMake_TEST_CXX_STANDARDS "98;11;14;17;20;23" CACHE STRING "")
|
||||
|
||||
set(CMake_TEST_FindOpenAL "ON" CACHE BOOL "")
|
||||
set(CMake_TEST_FindOpenMP "ON" CACHE BOOL "")
|
||||
set(CMake_TEST_FindOpenMP_C "ON" CACHE BOOL "")
|
||||
|
||||
@@ -1,3 +1,12 @@
|
||||
if("$ENV{CMAKE_CI_BUILD_NAME}" MATCHES "(^|_)gnu(_|$)")
|
||||
set(CMake_TEST_C_STANDARDS "90;99;11;17;23" CACHE STRING "")
|
||||
set(CMake_TEST_CXX_STANDARDS "98;11;14;17;20;23" CACHE STRING "")
|
||||
else()
|
||||
# FIXME: Implement C23 and C++23 support for clang-cl.
|
||||
set(CMake_TEST_C_STANDARDS "90;99;11;17" CACHE STRING "")
|
||||
set(CMake_TEST_CXX_STANDARDS "98;11;14;17;20" CACHE STRING "")
|
||||
endif()
|
||||
|
||||
set(CMake_TEST_FindOpenMP "ON" CACHE BOOL "")
|
||||
set(CMake_TEST_FindOpenMP_C "ON" CACHE BOOL "")
|
||||
set(CMake_TEST_FindOpenMP_CXX "ON" CACHE BOOL "")
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
set(CMake_TEST_C_STANDARDS "90;99;11;17" CACHE STRING "")
|
||||
set(CMake_TEST_CXX_STANDARDS "98;11;14;17;20;23" CACHE STRING "")
|
||||
|
||||
if (NOT "$ENV{CMAKE_CI_NIGHTLY}" STREQUAL "")
|
||||
set(CMake_TEST_CPACK_INNOSETUP "ON" CACHE STRING "")
|
||||
set(CMake_TEST_ISPC "ON" CACHE STRING "")
|
||||
|
||||
@@ -392,7 +392,15 @@ if(BUILD_TESTING)
|
||||
ADD_TEST_MACRO(TryCompile TryCompile)
|
||||
ADD_TEST_MACRO(SystemInformation SystemInformation)
|
||||
ADD_TEST_MACRO(MathTest MathTest)
|
||||
|
||||
string(REPLACE ";" "$<SEMICOLON>" TEST_STDS_C "${CMake_TEST_C_STANDARDS}")
|
||||
string(REPLACE ";" "$<SEMICOLON>" TEST_STDS_CXX "${CMake_TEST_CXX_STANDARDS}")
|
||||
set(CompileFeatures_BUILD_OPTIONS
|
||||
-DCMake_TEST_C_STANDARDS=${TEST_STDS_C}
|
||||
-DCMake_TEST_CXX_STANDARDS=${TEST_STDS_CXX}
|
||||
)
|
||||
ADD_TEST_MACRO(CompileFeatures CompileFeatures)
|
||||
|
||||
ADD_TEST_MACRO(CMakeCommands.target_compile_features)
|
||||
|
||||
if(CMake_TEST_RESOURCES)
|
||||
|
||||
@@ -6,6 +6,19 @@ project(CompileFeatures)
|
||||
|
||||
set(ext_C c)
|
||||
set(ext_CXX cpp)
|
||||
set(std_C 90 99 11 17 23)
|
||||
set(std_CXX 98 11 14 17 20 23)
|
||||
|
||||
foreach(lang C CXX)
|
||||
foreach(std IN LISTS std_${lang})
|
||||
string(TOLOWER "${lang}_std_${std}" feature)
|
||||
if("${std}" IN_LIST CMake_TEST_${lang}_STANDARDS
|
||||
OR CMAKE_${lang}${std}_STANDARD_COMPILE_OPTION)
|
||||
add_library(test_${feature} OBJECT ${feature}.${ext_${lang}})
|
||||
target_compile_features(test_${feature} PRIVATE ${feature})
|
||||
endif()
|
||||
endforeach()
|
||||
endforeach()
|
||||
|
||||
macro(run_test feature lang)
|
||||
if (${feature} IN_LIST CMAKE_${lang}_COMPILE_FEATURES)
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
#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
|
||||
@@ -0,0 +1,5 @@
|
||||
#include "c_std.h"
|
||||
#if defined(C_STD) && C_STD <= C_STD_99 && \
|
||||
!(defined(__SUNPRO_C) && __SUNPRO_C < 0x5140 && C_STD == C_STD_99)
|
||||
# error "c_std_11 not honored"
|
||||
#endif
|
||||
@@ -0,0 +1,4 @@
|
||||
#include "c_std.h"
|
||||
#if defined(C_STD) && C_STD <= C_STD_11
|
||||
# error "c_std_17 not honored"
|
||||
#endif
|
||||
@@ -0,0 +1,6 @@
|
||||
#include "c_std.h"
|
||||
#if defined(C_STD) && C_STD <= C_STD_17 && \
|
||||
!(C_STD == C_STD_17 && defined(__apple_build_version__) && \
|
||||
defined(__clang_major__) && __clang_major__ < 14)
|
||||
# error "c_std_23 not honored"
|
||||
#endif
|
||||
@@ -0,0 +1,4 @@
|
||||
#include "c_std.h"
|
||||
#if defined(C_STD) && C_STD < C_STD_99
|
||||
# error "c_std_99 not honored"
|
||||
#endif
|
||||
@@ -0,0 +1,50 @@
|
||||
#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)
|
||||
# if _MSVC_LANG > CXX_STD_17
|
||||
# define CXX_STD _MSVC_LANG
|
||||
# elif _MSVC_LANG == CXX_STD_17 && defined(__cpp_aggregate_paren_init)
|
||||
# define CXX_STD CXX_STD_20
|
||||
# elif _MSVC_LANG > CXX_STD_14 && __cplusplus > CXX_STD_17
|
||||
# define CXX_STD CXX_STD_20
|
||||
# elif _MSVC_LANG > CXX_STD_14
|
||||
# define CXX_STD CXX_STD_17
|
||||
# elif defined(__INTEL_CXX11_MODE__) && defined(__cpp_aggregate_nsdmi)
|
||||
# define CXX_STD CXX_STD_14
|
||||
# elif defined(__INTEL_CXX11_MODE__)
|
||||
# define CXX_STD CXX_STD_11
|
||||
# else
|
||||
# define CXX_STD CXX_STD_98
|
||||
# endif
|
||||
#elif defined(_MSC_VER) && defined(_MSVC_LANG)
|
||||
# define CXX_STD _MSVC_LANG
|
||||
#elif defined(__NVCOMPILER)
|
||||
# if __cplusplus == CXX_STD_17 && defined(__cpp_aggregate_paren_init)
|
||||
# define CXX_STD CXX_STD_20
|
||||
# else
|
||||
# define CXX_STD __cplusplus
|
||||
# endif
|
||||
#elif defined(__INTEL_COMPILER) || defined(__PGI)
|
||||
# if __cplusplus == CXX_STD_11 && defined(__cpp_namespace_attributes)
|
||||
# define CXX_STD CXX_STD_17
|
||||
# elif __cplusplus == CXX_STD_11 && defined(__cpp_aggregate_nsdmi)
|
||||
# define CXX_STD CXX_STD_14
|
||||
# else
|
||||
# define CXX_STD __cplusplus
|
||||
# endif
|
||||
#elif (defined(__IBMCPP__) || defined(__ibmxl__)) && defined(__linux__)
|
||||
# if __cplusplus == CXX_STD_11 && defined(__cpp_aggregate_nsdmi)
|
||||
# define CXX_STD CXX_STD_14
|
||||
# else
|
||||
# define CXX_STD __cplusplus
|
||||
# endif
|
||||
#elif __cplusplus == 1 && defined(__GXX_EXPERIMENTAL_CXX0X__)
|
||||
# define CXX_STD CXX_STD_11
|
||||
#else
|
||||
# define CXX_STD __cplusplus
|
||||
#endif
|
||||
@@ -0,0 +1,6 @@
|
||||
#include "cxx_std.h"
|
||||
#if defined(CXX_STD) && CXX_STD < CXX_STD_11 && \
|
||||
!(CXX_STD == CXX_STD_98 && \
|
||||
(defined(__IBMCPP__) && defined(_AIX) && __IBMCPP__ == 1610))
|
||||
# error "cxx_std_11 not honored"
|
||||
#endif
|
||||
@@ -0,0 +1,9 @@
|
||||
#include "cxx_std.h"
|
||||
#if defined(CXX_STD) && CXX_STD <= CXX_STD_11 && \
|
||||
!(CXX_STD == CXX_STD_11 && \
|
||||
((defined(__GNUC__) && defined(__GNUC_MINOR__) && __GNUC__ == 4 && \
|
||||
__GNUC_MINOR__ <= 8 && !defined(__clang__) && \
|
||||
!defined(__INTEL_COMPILER) && !defined(__PGI)) || \
|
||||
(defined(__SUNPRO_CC) && __SUNPRO_CC < 0x5150)))
|
||||
# error "cxx_std_14 not honored"
|
||||
#endif
|
||||
@@ -0,0 +1,4 @@
|
||||
#include "cxx_std.h"
|
||||
#if defined(CXX_STD) && CXX_STD <= CXX_STD_14
|
||||
# error "cxx_std_17 not honored"
|
||||
#endif
|
||||
@@ -0,0 +1,4 @@
|
||||
#include "cxx_std.h"
|
||||
#if defined(CXX_STD) && CXX_STD <= CXX_STD_17
|
||||
# error "cxx_std_20 not honored"
|
||||
#endif
|
||||
@@ -0,0 +1,4 @@
|
||||
#include "cxx_std.h"
|
||||
#if defined(CXX_STD) && CXX_STD <= CXX_STD_20
|
||||
# error "cxx_std_23 not honored"
|
||||
#endif
|
||||
@@ -1,11 +1,4 @@
|
||||
#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
|
||||
#include "c_std.h"
|
||||
|
||||
#if DEFAULT_C23
|
||||
# if C_STD <= C_STD_17
|
||||
|
||||
@@ -1,58 +1,8 @@
|
||||
#include "cxx_std.h"
|
||||
|
||||
template <long l>
|
||||
struct Outputter;
|
||||
|
||||
#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)
|
||||
# if _MSVC_LANG > CXX_STD_17
|
||||
# define CXX_STD _MSVC_LANG
|
||||
# elif _MSVC_LANG == CXX_STD_17 && defined(__cpp_aggregate_paren_init)
|
||||
# define CXX_STD CXX_STD_20
|
||||
# elif _MSVC_LANG > CXX_STD_14 && __cplusplus > CXX_STD_17
|
||||
# define CXX_STD CXX_STD_20
|
||||
# elif _MSVC_LANG > CXX_STD_14
|
||||
# define CXX_STD CXX_STD_17
|
||||
# elif defined(__INTEL_CXX11_MODE__) && defined(__cpp_aggregate_nsdmi)
|
||||
# define CXX_STD CXX_STD_14
|
||||
# elif defined(__INTEL_CXX11_MODE__)
|
||||
# define CXX_STD CXX_STD_11
|
||||
# else
|
||||
# define CXX_STD CXX_STD_98
|
||||
# endif
|
||||
#elif defined(_MSC_VER) && defined(_MSVC_LANG)
|
||||
# define CXX_STD _MSVC_LANG
|
||||
#elif defined(__NVCOMPILER)
|
||||
# if __cplusplus == CXX_STD_17 && defined(__cpp_aggregate_paren_init)
|
||||
# define CXX_STD CXX_STD_20
|
||||
# else
|
||||
# define CXX_STD __cplusplus
|
||||
# endif
|
||||
#elif defined(__INTEL_COMPILER) || defined(__PGI)
|
||||
# if __cplusplus == CXX_STD_11 && defined(__cpp_namespace_attributes)
|
||||
# define CXX_STD CXX_STD_17
|
||||
# elif __cplusplus == CXX_STD_11 && defined(__cpp_aggregate_nsdmi)
|
||||
# define CXX_STD CXX_STD_14
|
||||
# else
|
||||
# define CXX_STD __cplusplus
|
||||
# endif
|
||||
#elif (defined(__IBMCPP__) || defined(__ibmxl__)) && defined(__linux__)
|
||||
# if __cplusplus == CXX_STD_11 && defined(__cpp_aggregate_nsdmi)
|
||||
# define CXX_STD CXX_STD_14
|
||||
# else
|
||||
# define CXX_STD __cplusplus
|
||||
# endif
|
||||
#elif __cplusplus == 1 && defined(__GXX_EXPERIMENTAL_CXX0X__)
|
||||
# define CXX_STD CXX_STD_11
|
||||
#else
|
||||
# define CXX_STD __cplusplus
|
||||
#endif
|
||||
|
||||
#if DEFAULT_CXX23
|
||||
# if CXX_STD <= CXX_STD_20
|
||||
Outputter<CXX_STD> o;
|
||||
|
||||
Reference in New Issue
Block a user