[Cmake-commits] CMake branch, next, updated. v3.0.0-rc4-2787-gef63068
Stephen Kelly
steveire at gmail.com
Tue May 6 12:05: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 ef63068176eded03ef481adeab0c23b3cdedee67 (commit)
via f1f20e72b87fcc29608ba0d1e77ba5f5e1153c43 (commit)
from 569516534eb8c24fa66fb5bd0427e144ac2294c8 (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=ef63068176eded03ef481adeab0c23b3cdedee67
commit ef63068176eded03ef481adeab0c23b3cdedee67
Merge: 5695165 f1f20e7
Author: Stephen Kelly <steveire at gmail.com>
AuthorDate: Tue May 6 12:05:14 2014 -0400
Commit: CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Tue May 6 12:05:14 2014 -0400
Merge topic 'clang-features' into next
f1f20e72 Features: Record for Clang 3.4
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=f1f20e72b87fcc29608ba0d1e77ba5f5e1153c43
commit f1f20e72b87fcc29608ba0d1e77ba5f5e1153c43
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 18:04:01 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..8fcea34 100644
--- a/Modules/Compiler/Clang-CXX.cmake
+++ b/Modules/Compiler/Clang-CXX.cmake
@@ -22,3 +22,19 @@ 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})
+ if (NOT _result EQUAL 0)
+ return()
+ endif()
+ 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)
+ _get_clang_features(c++98 CMAKE_CXX98_COMPILE_FEATURES)
+ 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:
Modules/Compiler/Clang-CXX-FeatureTests.cmake | 71 ++++++++++++++++++++
Modules/Compiler/Clang-CXX.cmake | 16 +++++
Modules/WriteCompilerDetectionHeader.cmake | 1 +
.../WriteCompilerDetectionHeader/CMakeLists.txt | 8 ++-
4 files changed, 93 insertions(+), 3 deletions(-)
create mode 100644 Modules/Compiler/Clang-CXX-FeatureTests.cmake
hooks/post-receive
--
CMake
More information about the Cmake-commits
mailing list