Features: Fix the default C dialect for Clang and GNU.
Clang 3.4 uses C99 by default, and Clang 3.6 uses C11 by default: http://thread.gmane.org/gmane.comp.compilers.clang.devel/39379 GNU 4.9 uses C90 by default, and GNU 5.0 uses C11 by default: https://gcc.gnu.org/gcc-5/changes.html Test that the default compiler settings result in the expected dialect macros being defined for both C and CXX. Remove the unused main.c file from the CompileFeatures unit test.
This commit is contained in:
parent
49e2b689a8
commit
a3d0ae1758
|
@ -17,7 +17,11 @@ if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 3.4)
|
|||
set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu11")
|
||||
endif()
|
||||
|
||||
set(CMAKE_C_STANDARD_DEFAULT 90)
|
||||
if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 3.6)
|
||||
set(CMAKE_C_STANDARD_DEFAULT 11)
|
||||
elseif(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 3.4)
|
||||
set(CMAKE_C_STANDARD_DEFAULT 99)
|
||||
endif()
|
||||
|
||||
macro(cmake_record_c_compile_features)
|
||||
macro(_get_clang_features std_version list)
|
||||
|
|
|
@ -12,8 +12,11 @@ if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.7)
|
|||
set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu11")
|
||||
endif()
|
||||
|
||||
# This may change in a future GNU version.
|
||||
set(CMAKE_C_STANDARD_DEFAULT 90)
|
||||
if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 5.0)
|
||||
set(CMAKE_C_STANDARD_DEFAULT 11)
|
||||
else(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.7)
|
||||
set(CMAKE_C_STANDARD_DEFAULT 90)
|
||||
endif()
|
||||
|
||||
macro(cmake_record_c_compile_features)
|
||||
macro(_get_gcc_features std_version list)
|
||||
|
|
|
@ -77,7 +77,29 @@ foreach(lang CXX C)
|
|||
endif()
|
||||
endforeach()
|
||||
|
||||
if (CMAKE_C_COMPILE_FEATURES)
|
||||
string(FIND "${CMAKE_C_FLAGS}" "-std=" std_flag_idx)
|
||||
if (std_flag_idx EQUAL -1)
|
||||
add_executable(default_dialect_C default_dialect.c)
|
||||
target_compile_definitions(default_dialect_C PRIVATE
|
||||
DEFAULT_C11=$<EQUAL:${CMAKE_C_STANDARD_DEFAULT},11>
|
||||
DEFAULT_C99=$<EQUAL:${CMAKE_C_STANDARD_DEFAULT},99>
|
||||
DEFAULT_C90=$<EQUAL:${CMAKE_C_STANDARD_DEFAULT},90>
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (CMAKE_CXX_COMPILE_FEATURES)
|
||||
string(FIND "${CMAKE_CXX_FLAGS}" "-std=" std_flag_idx)
|
||||
if (std_flag_idx EQUAL -1)
|
||||
add_executable(default_dialect default_dialect.cpp)
|
||||
target_compile_definitions(default_dialect PRIVATE
|
||||
DEFAULT_CXX14=$<EQUAL:${CMAKE_CXX_STANDARD_DEFAULT},14>
|
||||
DEFAULT_CXX11=$<EQUAL:${CMAKE_CXX_STANDARD_DEFAULT},11>
|
||||
DEFAULT_CXX98=$<EQUAL:${CMAKE_CXX_STANDARD_DEFAULT},98>
|
||||
)
|
||||
endif()
|
||||
|
||||
add_executable(CompileFeatures main.cpp)
|
||||
set_property(TARGET CompileFeatures
|
||||
PROPERTY COMPILE_FEATURES "cxx_auto_type"
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
|
||||
#if DEFAULT_C11
|
||||
# if __STDC_VERSION__ != 201112L
|
||||
# error Unexpected value for __STDC_VERSION__.
|
||||
# endif
|
||||
#elif DEFAULT_C99
|
||||
# if __STDC_VERSION__ != 199901L
|
||||
# error Unexpected value for __STDC_VERSION__.
|
||||
# endif
|
||||
#else
|
||||
# if !DEFAULT_C90
|
||||
# error Buildsystem error
|
||||
# endif
|
||||
# if defined(__STDC_VERSION__)
|
||||
# error Unexpected __STDC_VERSION__ definition
|
||||
# endif
|
||||
#endif
|
||||
|
||||
int main()
|
||||
{
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
|
||||
template<long l>
|
||||
struct Outputter;
|
||||
|
||||
#if DEFAULT_CXX14
|
||||
# if __cplusplus != 201402L
|
||||
Outputter<__cplusplus> o;
|
||||
# endif
|
||||
#elif DEFAULT_CXX11
|
||||
# if __cplusplus != 201103L
|
||||
Outputter<__cplusplus> o;
|
||||
# endif
|
||||
#else
|
||||
# if !DEFAULT_CXX98
|
||||
# error Buildsystem error
|
||||
# endif
|
||||
# if __cplusplus != 199711L
|
||||
Outputter<__cplusplus> o;
|
||||
# endif
|
||||
#endif
|
||||
|
||||
int main()
|
||||
{
|
||||
return 0;
|
||||
}
|
|
@ -1,12 +0,0 @@
|
|||
|
||||
int foo(int * restrict a, int * restrict b)
|
||||
{
|
||||
(void)a;
|
||||
(void)b;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue