[Cmake-commits] CMake branch, next, updated. v3.3.1-2949-g6729ca6

Brad King brad.king at kitware.com
Tue Sep 15 10:53:16 EDT 2015


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  6729ca6133294c86b1d6ae6870616181f0b6d8d1 (commit)
       via  ffa6f057b4ae07c9dc7b9e1d12ecc0a2e19333a1 (commit)
      from  a0544f782ca86fc9858f4228faf95390ab56198f (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=6729ca6133294c86b1d6ae6870616181f0b6d8d1
commit 6729ca6133294c86b1d6ae6870616181f0b6d8d1
Merge: a0544f7 ffa6f05
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Tue Sep 15 10:53:15 2015 -0400
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Tue Sep 15 10:53:15 2015 -0400

    Merge topic 'detect-c11-broken-thread-local' into next
    
    ffa6f057 Avoid using C11 to build CMake if _Thread_local support is broken


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=ffa6f057b4ae07c9dc7b9e1d12ecc0a2e19333a1
commit ffa6f057b4ae07c9dc7b9e1d12ecc0a2e19333a1
Author:     Raphael Kubo da Costa <rakuco at FreeBSD.org>
AuthorDate: Tue Sep 15 16:31:12 2015 +0200
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Tue Sep 15 10:51:54 2015 -0400

    Avoid using C11 to build CMake if _Thread_local support is broken
    
    Support for C11's _Thread_local was introduced in GCC in the 4.9 series,
    even though we make the C11 compiler flags available in CMake with GCC
    >= 4.6.
    
    FreeBSD's runetype.h uses _Thread_local, which causes CMake's own build
    to fail when using GCC < 4.9 and -std=gnu11:
    
      /usr/include/runetype.h:92:22: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'const'
       extern _Thread_local const _RuneLocale *_ThreadRuneLocale;
    
    Add a test for _Thread_local support and only build CMake itself with
    C11 support if it works.
    
    Bug: http://www.cmake.org/Bug/view.php?id=15741

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5e13a7e..94d138c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -38,7 +38,12 @@ endif()
 
 # Use most-recent available language dialects with GNU and Clang
 if(NOT DEFINED CMAKE_C_STANDARD AND NOT CMake_NO_C_STANDARD)
-  set(CMAKE_C_STANDARD 11)
+  include(${CMake_SOURCE_DIR}/Source/Checks/cm_c11_thread_local.cmake)
+  if(NOT CMake_C11_THREAD_LOCAL_BROKEN)
+    set(CMAKE_C_STANDARD 11)
+  else()
+    set(CMAKE_C_STANDARD 99)
+  endif()
 endif()
 if(NOT DEFINED CMAKE_CXX_STANDARD AND NOT CMake_NO_CXX_STANDARD)
   include(${CMake_SOURCE_DIR}/Source/Checks/cm_cxx14_cstdio.cmake)
diff --git a/Source/Checks/cm_c11_thread_local.c b/Source/Checks/cm_c11_thread_local.c
new file mode 100644
index 0000000..ab780f2
--- /dev/null
+++ b/Source/Checks/cm_c11_thread_local.c
@@ -0,0 +1,2 @@
+_Thread_local int i = 42;
+int main(void) { return 0; }
diff --git a/Source/Checks/cm_c11_thread_local.cmake b/Source/Checks/cm_c11_thread_local.cmake
new file mode 100644
index 0000000..6b8d10b
--- /dev/null
+++ b/Source/Checks/cm_c11_thread_local.cmake
@@ -0,0 +1,33 @@
+set(CMake_C11_THREAD_LOCAL_BROKEN 0)
+if(CMAKE_CXX_COMPILER_ID MATCHES "GNU" AND CMAKE_C11_STANDARD_COMPILE_OPTION)
+  if(NOT DEFINED CMake_C11_THREAD_LOCAL_WORKS)
+    message(STATUS "Checking if compiler supports C11 _Thread_local")
+    try_compile(CMake_C11_THREAD_LOCAL_WORKS
+      ${CMAKE_CURRENT_BINARY_DIR}
+      ${CMAKE_CURRENT_LIST_DIR}/cm_c11_thread_local.c
+      CMAKE_FLAGS -DCMAKE_C_STANDARD=11
+      OUTPUT_VARIABLE OUTPUT
+      )
+    if(CMake_C11_THREAD_LOCAL_WORKS AND "${OUTPUT}" MATCHES "error: expected '=', ',', ';', 'asm' or '__attribute__' before 'int'")
+      set_property(CACHE CMake_C11_THREAD_LOCAL_WORKS PROPERTY VALUE 0)
+    endif()
+    if(CMake_C11_THREAD_LOCAL_WORKS)
+      message(STATUS "Checking if compiler supports C11 _Thread_local - yes")
+      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+        "Determining if compiler supports C11 _Thread_local passed with the following output:\n"
+        "${OUTPUT}\n"
+        "\n"
+        )
+    else()
+      message(STATUS "Checking if compiler supports C11 _Thread_local - no")
+      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+        "Determining if compiler supports C11 _Thread_local failed with the following output:\n"
+        "${OUTPUT}\n"
+        "\n"
+        )
+    endif()
+  endif()
+  if(NOT CMake_C11_THREAD_LOCAL_WORKS)
+    set(CMake_C11_THREAD_LOCAL_BROKEN 1)
+  endif()
+endif()

-----------------------------------------------------------------------

Summary of changes:
 CMakeLists.txt                                     |    7 ++++-
 .../main.c => Source/Checks/cm_c11_thread_local.c  |    1 +
 Source/Checks/cm_c11_thread_local.cmake            |   33 ++++++++++++++++++++
 3 files changed, 40 insertions(+), 1 deletion(-)
 copy Tests/CMakeOnly/LinkInterfaceLoop/main.c => Source/Checks/cm_c11_thread_local.c (52%)
 create mode 100644 Source/Checks/cm_c11_thread_local.cmake


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list