[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