[Cmake-commits] CMake branch, next, updated. v3.0.0-rc4-2886-gb0ba370
Stephen Kelly
steveire at gmail.com
Tue May 6 17:25:15 EDT 2014
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".
The branch, next has been updated
via b0ba370ba65818fb061e41edf280f61eec2cae66 (commit)
via a1750ce3b7aa37140532f4ba7945394b21c042ff (commit)
from eb547e2920c37e58efceec4ac5c9569fa7af124e (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=b0ba370ba65818fb061e41edf280f61eec2cae66
commit b0ba370ba65818fb061e41edf280f61eec2cae66
Merge: eb547e2 a1750ce
Author: Stephen Kelly <steveire at gmail.com>
AuthorDate: Tue May 6 17:25:14 2014 -0400
Commit: CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Tue May 6 17:25:14 2014 -0400
Merge topic 'clang-features' into next
a1750ce3 Features: Record for Clang 3.4
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=a1750ce3b7aa37140532f4ba7945394b21c042ff
commit a1750ce3b7aa37140532f4ba7945394b21c042ff
Author: Stephen Kelly <steveire at gmail.com>
AuthorDate: Tue May 6 11:59:12 2014 +0200
Commit: Stephen Kelly <steveire at gmail.com>
CommitDate: Tue May 6 23:25:00 2014 +0200
Features: Record for Clang 3.4
diff --git a/Modules/Compiler/Clang-CXX-FeatureTests.cmake b/Modules/Compiler/Clang-CXX-FeatureTests.cmake
new file mode 100644
index 0000000..2a16e70
--- /dev/null
+++ b/Modules/Compiler/Clang-CXX-FeatureTests.cmake
@@ -0,0 +1,71 @@
+
+# Reference: http://clang.llvm.org/cxx_status.html
+# http://clang.llvm.org/docs/LanguageExtensions.html
+
+set(testable_features
+ cxx_alias_templates
+ cxx_alignas
+ cxx_attributes
+ cxx_auto_type
+ cxx_constexpr
+ cxx_decltype
+ cxx_decltype_incomplete_return_types
+ cxx_default_function_template_args
+ cxx_defaulted_functions
+ cxx_delegating_constructors
+ cxx_deleted_functions
+ cxx_explicit_conversions
+ cxx_generalized_initializers
+ cxx_inheriting_constructors
+ cxx_lambdas
+ cxx_local_type_template_args
+ cxx_noexcept
+ cxx_nonstatic_member_init
+ cxx_nullptr
+ cxx_range_for
+ cxx_raw_string_literals
+ cxx_reference_qualified_functions
+ cxx_rvalue_references
+ cxx_static_assert
+ cxx_strong_enums
+ cxx_thread_local
+ cxx_unicode_literals
+ cxx_unrestricted_unions
+ cxx_user_literals
+ cxx_variadic_templates
+)
+foreach(feature ${testable_features})
+ set(_cmake_feature_test_${feature} "__has_feature(${feature})")
+endforeach()
+
+unset(testable_features)
+
+set(_cmake_feature_test_cxx_trailing_return_types "__has_feature(cxx_trailing_return)")
+set(_cmake_feature_test_cxx_alignof "__has_feature(cxx_alignas)")
+set(_cmake_feature_test_cxx_final "__has_feature(cxx_override_control)")
+set(_cmake_feature_test_cxx_override "__has_feature(cxx_override_control)")
+set(_cmake_feature_test_cxx_uniform_initialization "__has_feature(cxx_generalized_initializers)")
+set(_cmake_feature_test_cxx_defaulted_move_initializers "__has_feature(cxx_defaulted_functions)")
+
+set(_oldestSupported "((__clang_major__ * 100) + __clang_minor__) >= 304")
+# TODO: Should be supported by Clang 3.1
+set(Clang31_CXX11 "${_oldestSupported} && __cplusplus >= 201103L")
+set(_cmake_feature_test_cxx_enum_forward_declarations "${Clang31_CXX11}")
+set(_cmake_feature_test_cxx_sizeof_member "${Clang31_CXX11}")
+set(_cmake_feature_test_cxx_sizeof_member "${Clang31_CXX11}")
+# TODO: Should be supported by Clang 2.9
+set(Clang29_CXX11 "${_oldestSupported} && __cplusplus >= 201103L")
+set(_cmake_feature_test_cxx_extended_friend_declarations "${Clang29_CXX11}")
+set(_cmake_feature_test_cxx_extern_templates "${Clang29_CXX11}")
+set(_cmake_feature_test_cxx_func_identifier "${Clang29_CXX11}")
+set(_cmake_feature_test_cxx_inline_namespaces "${Clang29_CXX11}")
+set(_cmake_feature_test_cxx_long_long_type "${Clang29_CXX11}")
+set(_cmake_feature_test_cxx_right_angle_brackets "${Clang29_CXX11}")
+set(_cmake_feature_test_cxx_variadic_macros "${Clang29_CXX11}")
+
+# TODO: Should be supported forever?
+set(Clang_CXX98 "${_oldestSupported} && __cplusplus >= 199711L")
+set(_cmake_feature_test_cxx_template_template_parameters "${Clang_CXX98}")
+set(_cmake_feature_test_gnu_cxx_typeof "${_oldestSupported} && !defined(__STRICT_ANSI__)")
+
+set(_oldestSupported)
diff --git a/Modules/Compiler/Clang-CXX.cmake b/Modules/Compiler/Clang-CXX.cmake
index a1b3a10..8f2da8b 100644
--- a/Modules/Compiler/Clang-CXX.cmake
+++ b/Modules/Compiler/Clang-CXX.cmake
@@ -22,3 +22,18 @@ elseif(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 2.1)
set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "-std=c++0x")
set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-std=gnu++0x")
endif()
+
+macro(cmake_record_cxx_compile_features)
+ macro(_get_clang_features std_version list)
+ record_compiler_features(CXX "-std=${std_version}" ${list})
+ endmacro()
+
+ if (UNIX AND NOT APPLE AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.4)
+ _get_clang_features(c++11 CMAKE_CXX11_COMPILE_FEATURES)
+ if (_result EQUAL 0)
+ _get_clang_features(c++98 CMAKE_CXX98_COMPILE_FEATURES)
+ endif()
+ else()
+ set(_result 0)
+ endif()
+endmacro()
diff --git a/Modules/WriteCompilerDetectionHeader.cmake b/Modules/WriteCompilerDetectionHeader.cmake
index 2b677d9..ea7dc15 100644
--- a/Modules/WriteCompilerDetectionHeader.cmake
+++ b/Modules/WriteCompilerDetectionHeader.cmake
@@ -191,6 +191,7 @@ function(write_compiler_detection_header
set(compilers
GNU
+ Clang
)
foreach(_comp ${_WCD_COMPILERS})
list(FIND compilers ${_comp} idx)
diff --git a/Tests/Module/WriteCompilerDetectionHeader/CMakeLists.txt b/Tests/Module/WriteCompilerDetectionHeader/CMakeLists.txt
index 2f815fb..b329244 100644
--- a/Tests/Module/WriteCompilerDetectionHeader/CMakeLists.txt
+++ b/Tests/Module/WriteCompilerDetectionHeader/CMakeLists.txt
@@ -1,7 +1,8 @@
cmake_minimum_required(VERSION 3.0.0)
project(WriteCompilerDetectionHeader)
-if (NOT CMAKE_CXX_COMPILER_ID STREQUAL GNU)
+if (NOT CMAKE_CXX_COMPILER_ID STREQUAL GNU
+ AND NOT CMAKE_CXX_COMPILER_ID STREQUAL Clang)
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/dummy.cpp"
"int main(int,char**) { return 0; }\n"
)
@@ -18,7 +19,7 @@ get_property(known_features GLOBAL PROPERTY CMAKE_CXX_KNOWN_FEATURES)
write_compiler_detection_header(
FILE "${CMAKE_CURRENT_BINARY_DIR}/test_compiler_detection.h"
PREFIX TEST
- COMPILERS GNU
+ COMPILERS GNU Clang
VERSION 3.1
PROLOG "// something"
EPILOG "// more"
@@ -40,7 +41,8 @@ macro(set_defines target true_defs false_defs)
)
endmacro()
-if (CMAKE_CXX_COMPILER_ID STREQUAL GNU)
+if (CMAKE_CXX_COMPILER_ID STREQUAL GNU
+ OR CMAKE_CXX_COMPILER_ID STREQUAL Clang)
# False for C++98 mode.
list(APPEND false_defs EXPECTED_COMPILER_CXX_DELEGATING_CONSTRUCTORS)
list(APPEND false_defs EXPECTED_COMPILER_CXX_VARIADIC_TEMPLATES)
-----------------------------------------------------------------------
Summary of changes:
hooks/post-receive
--
CMake
More information about the Cmake-commits
mailing list