[Cmake-commits] CMake branch, next, updated. v3.0.0-rc4-2892-g46afd26

Stephen Kelly steveire at gmail.com
Tue May 6 17:33:54 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  46afd26fb8807a9c9d03ea21afde46f5ddb2f929 (commit)
       via  5d60be1a1d5763ae9712dafd867561605b8b82e4 (commit)
      from  10373b3fa5639e4c4ffa161254872892c48e2589 (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=46afd26fb8807a9c9d03ea21afde46f5ddb2f929
commit 46afd26fb8807a9c9d03ea21afde46f5ddb2f929
Merge: 10373b3 5d60be1
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Tue May 6 17:33:53 2014 -0400
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Tue May 6 17:33:53 2014 -0400

    Merge topic 'clang-features' into next
    
    5d60be1a Features: Record for Clang 3.4


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=5d60be1a1d5763ae9712dafd867561605b8b82e4
commit 5d60be1a1d5763ae9712dafd867561605b8b82e4
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:33:07 2014 +0200

    Features: Record for Clang 3.4
    
    Exclude FreeBSD. Features are not recorded for it, apparently.

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..0b813a6 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})
+  endmacro()
+
+  if (UNIX AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME STREQUAL FreeBSD
+      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..21d1913 100644
--- a/Tests/Module/WriteCompilerDetectionHeader/CMakeLists.txt
+++ b/Tests/Module/WriteCompilerDetectionHeader/CMakeLists.txt
@@ -1,7 +1,9 @@
 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)
+    OR CMAKE_SYSTEM_NAME STREQUAL FreeBSD)
   file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/dummy.cpp"
     "int main(int,char**) { return 0; }\n"
   )
@@ -18,7 +20,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 +42,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