[Cmake-commits] CMake branch, next, updated. v3.2.2-2644-g27ffcfc

Brad King brad.king at kitware.com
Fri May 8 11:10:35 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  27ffcfc50e8c3319cec3c752cce976b2c75ceae5 (commit)
       via  3307e10fc4ef5ffb551df35bc0978a2543305e9d (commit)
      from  7335b4fdee8363f233f83f5937c0ecd3113c330d (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=27ffcfc50e8c3319cec3c752cce976b2c75ceae5
commit 27ffcfc50e8c3319cec3c752cce976b2c75ceae5
Merge: 7335b4f 3307e10
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Fri May 8 11:10:34 2015 -0400
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Fri May 8 11:10:34 2015 -0400

    Merge topic 'detect-c++14-missing-gets' into next
    
    3307e10f Avoid using C++14 to build CMake if cstdio breaks


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=3307e10fc4ef5ffb551df35bc0978a2543305e9d
commit 3307e10fc4ef5ffb551df35bc0978a2543305e9d
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Fri May 8 11:04:21 2015 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Fri May 8 11:04:21 2015 -0400

    Avoid using C++14 to build CMake if cstdio breaks
    
    The GNU 4.8 standard library's cstdio header is not aware that C++14
    honors C11's removal of "gets" from stdio.h and results in an error:
    
      /.../include/c++/4.8/cstdio:120:11: error: no member named 'gets' in the global namespace
    
    Detect this problematic case and default to using C++11 instead of
    C++14 for building CMake itself.

diff --git a/CMakeLists.txt b/CMakeLists.txt
index e979d4f..19d83f1 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -41,7 +41,12 @@ if(NOT DEFINED CMAKE_C_STANDARD AND NOT CMake_NO_C_STANDARD)
   set(CMAKE_C_STANDARD 11)
 endif()
 if(NOT DEFINED CMAKE_CXX_STANDARD AND NOT CMake_NO_CXX_STANDARD)
-  set(CMAKE_CXX_STANDARD 14)
+  include(${CMake_SOURCE_DIR}/Source/Checks/cm_cxx14_cstdio.cmake)
+  if(NOT CMake_CXX14_CSTDIO_BROKEN)
+    set(CMAKE_CXX_STANDARD 14)
+  else()
+    set(CMAKE_CXX_STANDARD 11)
+  endif()
 endif()
 
 # option to set the internal encoding of CMake to UTF-8
diff --git a/Source/Checks/cm_cxx14_cstdio.cmake b/Source/Checks/cm_cxx14_cstdio.cmake
new file mode 100644
index 0000000..73f7e2e
--- /dev/null
+++ b/Source/Checks/cm_cxx14_cstdio.cmake
@@ -0,0 +1,33 @@
+set(CMake_CXX14_CSTDIO_BROKEN 0)
+if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang" AND CMAKE_CXX14_STANDARD_COMPILE_OPTION)
+  if(NOT DEFINED CMake_CXX14_CSTDIO_WORKS)
+    message(STATUS "Checking if compiler supports C++14 cstdio")
+    try_compile(CMake_CXX14_CSTDIO_WORKS
+      ${CMAKE_CURRENT_BINARY_DIR}
+      ${CMAKE_CURRENT_LIST_DIR}/cm_cxx14_cstdio.cpp
+      CMAKE_FLAGS -DCMAKE_CXX_STANDARD=14
+      OUTPUT_VARIABLE OUTPUT
+      )
+    if(CMake_CXX14_CSTDIO_WORKS AND "${OUTPUT}" MATCHES "error: no member named.*gets.*in the global namespace")
+      set_property(CACHE CMake_CXX14_CSTDIO_WORKS PROPERTY VALUE 0)
+    endif()
+    if(CMake_CXX14_CSTDIO_WORKS)
+      message(STATUS "Checking if compiler supports C++14 cstdio - yes")
+      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+        "Determining if compiler supports C++14 cstdio passed with the following output:\n"
+        "${OUTPUT}\n"
+        "\n"
+        )
+    else()
+      message(STATUS "Checking if compiler supports C++14 cstdio - no")
+      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+        "Determining if compiler supports C++14 cstdio failed with the following output:\n"
+        "${OUTPUT}\n"
+        "\n"
+        )
+    endif()
+  endif()
+  if(NOT CMake_CXX14_CSTDIO_WORKS)
+    set(CMake_CXX14_CSTDIO_BROKEN 1)
+  endif()
+endif()
diff --git a/Source/Checks/cm_cxx14_cstdio.cpp b/Source/Checks/cm_cxx14_cstdio.cpp
new file mode 100644
index 0000000..3a6a699
--- /dev/null
+++ b/Source/Checks/cm_cxx14_cstdio.cpp
@@ -0,0 +1,2 @@
+#include <cstdio>
+int main() { return 0; }

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

Summary of changes:
 CMakeLists.txt                                     |    7 ++++-
 Source/Checks/cm_cxx14_cstdio.cmake                |   33 ++++++++++++++++++++
 .../dummy.c => Source/Checks/cm_cxx14_cstdio.cpp   |    1 +
 3 files changed, 40 insertions(+), 1 deletion(-)
 create mode 100644 Source/Checks/cm_cxx14_cstdio.cmake
 copy Tests/FindPackageTest/Exporter/dummy.c => Source/Checks/cm_cxx14_cstdio.cpp (58%)


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list