Merge branch 'default-lang-dialect' into step2
Conflicts: Modules/Compiler/Clang-C.cmake
This commit is contained in:
commit
f327a9fd26
|
@ -6,7 +6,7 @@ if(WIN32 OR (APPLE AND NOT appleClangPolicy STREQUAL NEW))
|
||||||
return()
|
return()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.4)
|
if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 3.4)
|
||||||
set(CMAKE_C90_STANDARD_COMPILE_OPTION "-std=c90")
|
set(CMAKE_C90_STANDARD_COMPILE_OPTION "-std=c90")
|
||||||
set(CMAKE_C90_EXTENSION_COMPILE_OPTION "-std=gnu90")
|
set(CMAKE_C90_EXTENSION_COMPILE_OPTION "-std=gnu90")
|
||||||
|
|
||||||
|
@ -17,14 +17,18 @@ if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.4)
|
||||||
set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu11")
|
set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu11")
|
||||||
endif()
|
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(cmake_record_c_compile_features)
|
||||||
macro(_get_clang_features std_version list)
|
macro(_get_clang_features std_version list)
|
||||||
record_compiler_features(C "${std_version}" ${list})
|
record_compiler_features(C "${std_version}" ${list})
|
||||||
endmacro()
|
endmacro()
|
||||||
|
|
||||||
if (UNIX AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.4)
|
if (UNIX AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 3.4)
|
||||||
_get_clang_features(${CMAKE_C11_STANDARD_COMPILE_OPTION} CMAKE_C11_COMPILE_FEATURES)
|
_get_clang_features(${CMAKE_C11_STANDARD_COMPILE_OPTION} CMAKE_C11_COMPILE_FEATURES)
|
||||||
if (_result EQUAL 0)
|
if (_result EQUAL 0)
|
||||||
_get_clang_features(${CMAKE_C99_STANDARD_COMPILE_OPTION} CMAKE_C99_COMPILE_FEATURES)
|
_get_clang_features(${CMAKE_C99_STANDARD_COMPILE_OPTION} CMAKE_C99_COMPILE_FEATURES)
|
||||||
|
|
|
@ -12,8 +12,11 @@ if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.7)
|
||||||
set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu11")
|
set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu11")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# This may change in a future GNU version.
|
if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 5.0)
|
||||||
set(CMAKE_C_STANDARD_DEFAULT 90)
|
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(cmake_record_c_compile_features)
|
||||||
macro(_get_gcc_features std_version list)
|
macro(_get_gcc_features std_version list)
|
||||||
|
|
|
@ -292,11 +292,11 @@ if(BUILD_TESTING)
|
||||||
endif()
|
endif()
|
||||||
ADD_TEST_MACRO(SourcesProperty SourcesProperty)
|
ADD_TEST_MACRO(SourcesProperty SourcesProperty)
|
||||||
if(CMAKE_CXX_COMPILER_ID STREQUAL GNU
|
if(CMAKE_CXX_COMPILER_ID STREQUAL GNU
|
||||||
AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.6)
|
AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.7)
|
||||||
set(runCxxDialectTest 1)
|
set(runCxxDialectTest 1)
|
||||||
endif()
|
endif()
|
||||||
if(CMAKE_CXX_COMPILER_ID STREQUAL Clang
|
if(CMAKE_CXX_COMPILER_ID STREQUAL Clang
|
||||||
AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 2.9)
|
AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.4)
|
||||||
if(NOT APPLE OR POLICY CMP0025)
|
if(NOT APPLE OR POLICY CMP0025)
|
||||||
set(runCxxDialectTest 1)
|
set(runCxxDialectTest 1)
|
||||||
endif()
|
endif()
|
||||||
|
|
|
@ -77,36 +77,60 @@ foreach(lang CXX C)
|
||||||
endif()
|
endif()
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
add_executable(CompileFeatures main.cpp)
|
if (CMAKE_C_COMPILE_FEATURES)
|
||||||
set_property(TARGET CompileFeatures
|
string(FIND "${CMAKE_C_FLAGS}" "-std=" std_flag_idx)
|
||||||
PROPERTY COMPILE_FEATURES "cxx_auto_type"
|
if (std_flag_idx EQUAL -1)
|
||||||
)
|
add_executable(default_dialect_C default_dialect.c)
|
||||||
set_property(TARGET CompileFeatures
|
target_compile_definitions(default_dialect_C PRIVATE
|
||||||
PROPERTY CXX_STANDARD_REQUIRED TRUE
|
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()
|
||||||
|
|
||||||
add_executable(GenexCompileFeatures main.cpp)
|
if (CMAKE_CXX_COMPILE_FEATURES)
|
||||||
set_property(TARGET GenexCompileFeatures
|
string(FIND "${CMAKE_CXX_FLAGS}" "-std=" std_flag_idx)
|
||||||
PROPERTY COMPILE_FEATURES "$<1:cxx_auto_type>;$<0:not_a_feature>"
|
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_library(iface INTERFACE)
|
add_executable(CompileFeatures main.cpp)
|
||||||
set_property(TARGET iface
|
set_property(TARGET CompileFeatures
|
||||||
PROPERTY INTERFACE_COMPILE_FEATURES "cxx_auto_type"
|
PROPERTY COMPILE_FEATURES "cxx_auto_type"
|
||||||
)
|
)
|
||||||
add_executable(IfaceCompileFeatures main.cpp)
|
set_property(TARGET CompileFeatures
|
||||||
target_link_libraries(IfaceCompileFeatures iface)
|
PROPERTY CXX_STANDARD_REQUIRED TRUE
|
||||||
|
)
|
||||||
|
|
||||||
add_executable(CompileFeaturesGenex genex_test.cpp)
|
add_executable(GenexCompileFeatures main.cpp)
|
||||||
set_property(TARGET CompileFeaturesGenex PROPERTY CXX_STANDARD 11)
|
set_property(TARGET GenexCompileFeatures
|
||||||
target_compile_definitions(CompileFeaturesGenex PRIVATE HAVE_OVERRIDE_CONTROL=$<COMPILE_FEATURES:cxx_final,cxx_override>)
|
PROPERTY COMPILE_FEATURES "$<1:cxx_auto_type>;$<0:not_a_feature>"
|
||||||
|
)
|
||||||
|
|
||||||
add_executable(CompileFeaturesGenex2 genex_test.cpp)
|
add_library(iface INTERFACE)
|
||||||
target_compile_features(CompileFeaturesGenex2 PRIVATE cxx_constexpr)
|
set_property(TARGET iface
|
||||||
target_compile_definitions(CompileFeaturesGenex2 PRIVATE HAVE_OVERRIDE_CONTROL=$<COMPILE_FEATURES:cxx_final,cxx_override>)
|
PROPERTY INTERFACE_COMPILE_FEATURES "cxx_auto_type"
|
||||||
|
)
|
||||||
|
add_executable(IfaceCompileFeatures main.cpp)
|
||||||
|
target_link_libraries(IfaceCompileFeatures iface)
|
||||||
|
|
||||||
add_library(noexcept_iface INTERFACE)
|
add_executable(CompileFeaturesGenex genex_test.cpp)
|
||||||
target_compile_features(noexcept_iface INTERFACE cxx_noexcept)
|
set_property(TARGET CompileFeaturesGenex PROPERTY CXX_STANDARD 11)
|
||||||
add_executable(CompileFeaturesGenex3 genex_test.cpp)
|
target_compile_definitions(CompileFeaturesGenex PRIVATE HAVE_OVERRIDE_CONTROL=$<COMPILE_FEATURES:cxx_final,cxx_override>)
|
||||||
target_link_libraries(CompileFeaturesGenex3 PRIVATE noexcept_iface)
|
|
||||||
target_compile_definitions(CompileFeaturesGenex3 PRIVATE HAVE_OVERRIDE_CONTROL=$<COMPILE_FEATURES:cxx_final,cxx_override>)
|
add_executable(CompileFeaturesGenex2 genex_test.cpp)
|
||||||
|
target_compile_features(CompileFeaturesGenex2 PRIVATE cxx_constexpr)
|
||||||
|
target_compile_definitions(CompileFeaturesGenex2 PRIVATE HAVE_OVERRIDE_CONTROL=$<COMPILE_FEATURES:cxx_final,cxx_override>)
|
||||||
|
|
||||||
|
add_library(noexcept_iface INTERFACE)
|
||||||
|
target_compile_features(noexcept_iface INTERFACE cxx_noexcept)
|
||||||
|
add_executable(CompileFeaturesGenex3 genex_test.cpp)
|
||||||
|
target_link_libraries(CompileFeaturesGenex3 PRIVATE noexcept_iface)
|
||||||
|
target_compile_definitions(CompileFeaturesGenex3 PRIVATE HAVE_OVERRIDE_CONTROL=$<COMPILE_FEATURES:cxx_final,cxx_override>)
|
||||||
|
endif()
|
||||||
|
|
|
@ -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