[Cmake-commits] CMake branch, next, updated. v3.1.1-2566-g8beff48

Stephen Kelly steveire at gmail.com
Tue Feb 3 17:50:29 EST 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  8beff487b2f22cb03b78fcc1f6375a63ce04420e (commit)
       via  5c23ef334f3c5132f24d96dee23bf1a8430951f3 (commit)
      from  b7225ddb44bf375df320a3c9096ab8dac965c3a8 (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=8beff487b2f22cb03b78fcc1f6375a63ce04420e
commit 8beff487b2f22cb03b78fcc1f6375a63ce04420e
Merge: b7225dd 5c23ef3
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Tue Feb 3 17:50:28 2015 -0500
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Tue Feb 3 17:50:28 2015 -0500

    Merge topic 'fix-C-standard-features' into next
    
    5c23ef33 Features: Fix C90 feature detection.


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=5c23ef334f3c5132f24d96dee23bf1a8430951f3
commit 5c23ef334f3c5132f24d96dee23bf1a8430951f3
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Tue Feb 3 21:47:45 2015 +0100
Commit:     Stephen Kelly <steveire at gmail.com>
CommitDate: Tue Feb 3 23:50:13 2015 +0100

    Features: Fix C90 feature detection.
    
    This bug caused c_function_prototypes to not be recorded at configure
    time when compiling with -std=gnu99 or similar. In the case of feature
    recording, that was not a problem, because the logic in
    CMakeDetermineCompileFeatures.cmake currently assumes that a feature
    present for an earlier standard is present for a later standard.
    
    However, the detection strings are also used in WriteCompilerDetectionHeader,
    so the feature macro has been defined to '0' when using a later language
    dialect.
    
    Fix that by not checking the existence of the __STDC_VERSION__ macro at
    all when detecting C90 features.

diff --git a/Modules/Compiler/AppleClang-C-FeatureTests.cmake b/Modules/Compiler/AppleClang-C-FeatureTests.cmake
index 6f3d6a7..e80b526 100644
--- a/Modules/Compiler/AppleClang-C-FeatureTests.cmake
+++ b/Modules/Compiler/AppleClang-C-FeatureTests.cmake
@@ -7,5 +7,5 @@ set(AppleClang_C99 "${_cmake_oldestSupported} && defined(__STDC_VERSION__) && __
 set(_cmake_feature_test_c_restrict "${AppleClang_C99}")
 set(_cmake_feature_test_c_variadic_macros "${AppleClang_C99}")
 
-set(AppleClang_C90 "${_cmake_oldestSupported} && !defined(__STDC_VERSION__)")
+set(AppleClang_C90 "${_cmake_oldestSupported}")
 set(_cmake_feature_test_c_function_prototypes "${AppleClang_C90}")
diff --git a/Modules/Compiler/Clang-C-FeatureTests.cmake b/Modules/Compiler/Clang-C-FeatureTests.cmake
index 2d8673d..99c2252 100644
--- a/Modules/Compiler/Clang-C-FeatureTests.cmake
+++ b/Modules/Compiler/Clang-C-FeatureTests.cmake
@@ -7,5 +7,5 @@ set(Clang_C99 "${_cmake_oldestSupported} && defined(__STDC_VERSION__) && __STDC_
 set(_cmake_feature_test_c_restrict "${Clang_C99}")
 set(_cmake_feature_test_c_variadic_macros "${Clang_C99}")
 
-set(Clang_C90 "${_cmake_oldestSupported} && !defined(__STDC_VERSION__)")
+set(Clang_C90 "${_cmake_oldestSupported}")
 set(_cmake_feature_test_c_function_prototypes "${Clang_C90}")
diff --git a/Modules/Compiler/GNU-C-FeatureTests.cmake b/Modules/Compiler/GNU-C-FeatureTests.cmake
index d8e456c..b3fe33f 100644
--- a/Modules/Compiler/GNU-C-FeatureTests.cmake
+++ b/Modules/Compiler/GNU-C-FeatureTests.cmake
@@ -13,5 +13,5 @@ set(GNU44_C99 "(__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && defined(__STDC_VERSIO
 set(_cmake_feature_test_c_restrict "${GNU44_C99}")
 set(_cmake_feature_test_c_variadic_macros "${GNU44_C99}")
 
-set(GNU_C90 "${_cmake_oldestSupported} && !defined(__STDC_VERSION__)")
+set(GNU_C90 "${_cmake_oldestSupported}")
 set(_cmake_feature_test_c_function_prototypes "${GNU_C90}")
diff --git a/Tests/CompileFeatures/CMakeLists.txt b/Tests/CompileFeatures/CMakeLists.txt
index 38c44c8..3ba1e0a 100644
--- a/Tests/CompileFeatures/CMakeLists.txt
+++ b/Tests/CompileFeatures/CMakeLists.txt
@@ -164,6 +164,38 @@ if (CMAKE_C_COMPILE_FEATURES)
       )
     endif()
   endif()
+
+  add_executable(CompileFeaturesGenex_C genex_test.c)
+  set_property(TARGET CompileFeaturesGenex_C PROPERTY C_STANDARD 11)
+
+  if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
+    if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.6)
+      list(APPEND expected_defs
+        EXPECT_C_STATIC_ASSERT=1
+      )
+    else()
+      list(APPEND expected_defs
+        EXPECT_C_STATIC_ASSERT=0
+      )
+    endif()
+  elseif(CMAKE_C_COMPILER_ID STREQUAL "Clang"
+      OR CMAKE_C_COMPILER_ID STREQUAL "AppleClang")
+    list(APPEND expected_defs
+      EXPECT_C_STATIC_ASSERT=1
+    )
+  endif()
+
+  list(APPEND expected_defs
+    EXPECT_C_FUNCTION_PROTOTYPES=1
+    EXPECT_C_RESTRICT=1
+  )
+
+  target_compile_definitions(CompileFeaturesGenex_C PRIVATE
+    HAVE_C_FUNCTION_PROTOTYPES=$<COMPILE_FEATURES:c_function_prototypes>
+    HAVE_C_RESTRICT=$<COMPILE_FEATURES:c_restrict>
+    HAVE_C_STATIC_ASSERT=$<COMPILE_FEATURES:c_static_assert>
+    ${expected_defs}
+  )
 endif()
 
 if (CMAKE_CXX_COMPILE_FEATURES)
diff --git a/Tests/CompileFeatures/genex_test.c b/Tests/CompileFeatures/genex_test.c
new file mode 100644
index 0000000..b1215bd
--- /dev/null
+++ b/Tests/CompileFeatures/genex_test.c
@@ -0,0 +1,38 @@
+#ifndef EXPECT_C_STATIC_ASSERT
+# error EXPECT_C_STATIC_ASSERT not defined
+#endif
+#ifndef EXPECT_C_FUNCTION_PROTOTYPES
+# error EXPECT_C_FUNCTION_PROTOTYPES not defined
+#endif
+#ifndef EXPECT_C_RESTRICT
+# error EXPECT_C_RESTRICT not defined
+#endif
+
+#if !EXPECT_C_STATIC_ASSERT
+#if EXPECT_C_STATIC_ASSERT
+#error "Expect c_static_assert feature"
+#endif
+#else
+#if !EXPECT_C_STATIC_ASSERT
+#error "Expect no c_static_assert feature"
+#endif
+#endif
+
+#if !EXPECT_C_FUNCTION_PROTOTYPES
+#  error Expect c_function_prototypes support
+#endif
+
+#if !EXPECT_C_RESTRICT
+#  if EXPECT_C_RESTRICT
+#    error Expect c_restrict support
+#  endif
+#else
+#  if !EXPECT_C_RESTRICT
+#    error Expect no c_restrict support
+#  endif
+#endif
+
+int main()
+{
+
+}
diff --git a/Tests/Module/WriteCompilerDetectionHeader/CMakeLists.txt b/Tests/Module/WriteCompilerDetectionHeader/CMakeLists.txt
index e70a977..c538280 100644
--- a/Tests/Module/WriteCompilerDetectionHeader/CMakeLists.txt
+++ b/Tests/Module/WriteCompilerDetectionHeader/CMakeLists.txt
@@ -84,6 +84,15 @@ if (CMAKE_C_COMPILER_ID STREQUAL "GNU"
   add_executable(C_undefined c_undefined.c)
   set_property(TARGET C_undefined PROPERTY C_STANDARD 90)
   target_compile_options(C_undefined PRIVATE -Werror=undef)
+
+  add_executable(WriteCompilerDetectionHeader_C main.c)
+  set_property(TARGET WriteCompilerDetectionHeader_C PROPERTY C_STANDARD 90)
+  set_defines(WriteCompilerDetectionHeader_C "EXPECTED_COMPILER_C_FUNCTION_PROTOTYPES" "EXPECTED_COMPILER_C_RESTRICT")
+
+  add_executable(WriteCompilerDetectionHeader_C_multi main_multi.c)
+  set_property(TARGET WriteCompilerDetectionHeader_C_multi PROPERTY C_STANDARD 90)
+  set_defines(WriteCompilerDetectionHeader_C_multi "EXPECTED_COMPILER_C_FUNCTION_PROTOTYPES" "EXPECTED_COMPILER_C_RESTRICT")
+  target_include_directories(WriteCompilerDetectionHeader_C_multi PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/compiler_multi_files)
 endif()
 
 add_executable(WriteCompilerDetectionHeader main.cpp)
@@ -130,3 +139,16 @@ add_executable(multi_files_11 multi_files.cpp)
 set_property(TARGET multi_files_11 PROPERTY CXX_STANDARD 11)
 target_include_directories(multi_files_11 PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/compiler_multi_files)
 set_defines(multi_files_11 "${true_defs}" "${false_defs}")
+
+if (CMAKE_C_COMPILER_ID STREQUAL "GNU"
+    OR CMAKE_C_COMPILER_ID STREQUAL "Clang"
+    OR CMAKE_C_COMPILER_ID STREQUAL "AppleClang")
+  add_executable(WriteCompilerDetectionHeader_C11 main.c)
+  set_property(TARGET WriteCompilerDetectionHeader_C11 PROPERTY C_STANDARD 11)
+  set_defines(WriteCompilerDetectionHeader_C11 "EXPECTED_COMPILER_C_FUNCTION_PROTOTYPES;EXPECTED_COMPILER_C_RESTRICT" "")
+
+  add_executable(WriteCompilerDetectionHeader_C11_multi main_multi.c)
+  set_property(TARGET WriteCompilerDetectionHeader_C11_multi PROPERTY C_STANDARD 11)
+  set_defines(WriteCompilerDetectionHeader_C11_multi "EXPECTED_COMPILER_C_FUNCTION_PROTOTYPES;EXPECTED_COMPILER_C_RESTRICT" "")
+  target_include_directories(WriteCompilerDetectionHeader_C11_multi PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/compiler_multi_files)
+endif()
diff --git a/Tests/Module/WriteCompilerDetectionHeader/main.c b/Tests/Module/WriteCompilerDetectionHeader/main.c
new file mode 100644
index 0000000..9023b0f
--- /dev/null
+++ b/Tests/Module/WriteCompilerDetectionHeader/main.c
@@ -0,0 +1,29 @@
+
+#include "test_compiler_detection.h"
+
+#if !defined(TEST_COMPILER_C_FUNCTION_PROTOTYPES) || !TEST_COMPILER_C_FUNCTION_PROTOTYPES
+#  error Expected TEST_COMPILER_C_FUNCTION_PROTOTYPES
+#endif
+
+#if !EXPECTED_COMPILER_C_FUNCTION_PROTOTYPES
+#  error Expected EXPECTED_COMPILER_C_FUNCTION_PROTOTYPES
+#endif
+
+#if !defined(TEST_COMPILER_C_RESTRICT) || !TEST_COMPILER_C_RESTRICT
+#  if EXPECTED_COMPILER_C_RESTRICT
+#    error Expected TEST_COMPILER_C_RESTRICT
+#  endif
+#else
+#  if !EXPECTED_COMPILER_C_RESTRICT
+#    error Expect no TEST_COMPILER_C_RESTRICT
+#  endif
+#endif
+
+#ifdef TEST_COMPILER_CXX_STATIC_ASSERT
+#error Expect no CXX features defined
+#endif
+
+int main()
+{
+  return 0;
+}
diff --git a/Tests/Module/WriteCompilerDetectionHeader/main_multi.c b/Tests/Module/WriteCompilerDetectionHeader/main_multi.c
new file mode 100644
index 0000000..6f4573f
--- /dev/null
+++ b/Tests/Module/WriteCompilerDetectionHeader/main_multi.c
@@ -0,0 +1,29 @@
+
+#include "multi_file_compiler_detection.h"
+
+#if !defined(MULTI_COMPILER_C_FUNCTION_PROTOTYPES) || !MULTI_COMPILER_C_FUNCTION_PROTOTYPES
+#  error Expected MULTI_COMPILER_C_FUNCTION_PROTOTYPES
+#endif
+
+#if !EXPECTED_COMPILER_C_FUNCTION_PROTOTYPES
+#  error Expected EXPECTED_COMPILER_C_FUNCTION_PROTOTYPES
+#endif
+
+#if !defined(MULTI_COMPILER_C_RESTRICT) || !MULTI_COMPILER_C_RESTRICT
+#  if EXPECTED_COMPILER_C_RESTRICT
+#    error Expected MULTI_COMPILER_C_RESTRICT
+#  endif
+#else
+#  if !EXPECTED_COMPILER_C_RESTRICT
+#    error Expect no MULTI_COMPILER_C_RESTRICT
+#  endif
+#endif
+
+#ifdef MULTI_COMPILER_CXX_STATIC_ASSERT
+#error Expect no CXX features defined
+#endif
+
+int main()
+{
+  return 0;
+}

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

Summary of changes:


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list