[Cmake-commits] CMake branch, next, updated. v3.1.1-2560-gdc5bd78
Stephen Kelly
steveire at gmail.com
Tue Feb 3 16:32:55 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 dc5bd78ae99b4851dbc505ec5a47622c7045ff9e (commit)
via 584ba3fe68d49dcb7d0d4d5d826f883548a24e5d (commit)
from ff758672b69e0992e4bf7a7c9d031b3ce4bb5d20 (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=dc5bd78ae99b4851dbc505ec5a47622c7045ff9e
commit dc5bd78ae99b4851dbc505ec5a47622c7045ff9e
Merge: ff75867 584ba3f
Author: Stephen Kelly <steveire at gmail.com>
AuthorDate: Tue Feb 3 16:32:54 2015 -0500
Commit: CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Tue Feb 3 16:32:54 2015 -0500
Merge topic 'fix-C-standard-features' into next
584ba3fe Features: Fix C90 feature detection.
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=584ba3fe68d49dcb7d0d4d5d826f883548a24e5d
commit 584ba3fe68d49dcb7d0d4d5d826f883548a24e5d
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 22:05:27 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..d431c0e 100644
--- a/Tests/Module/WriteCompilerDetectionHeader/CMakeLists.txt
+++ b/Tests/Module/WriteCompilerDetectionHeader/CMakeLists.txt
@@ -90,6 +90,15 @@ add_executable(WriteCompilerDetectionHeader main.cpp)
set_property(TARGET WriteCompilerDetectionHeader PROPERTY CXX_STANDARD 98)
set_defines(WriteCompilerDetectionHeader "${true_defs}" "${false_defs}")
+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)
+
write_compiler_detection_header(
FILE "${CMAKE_CURRENT_BINARY_DIR}/compiler_multi_files/multi_file_compiler_detection.h"
PREFIX MULTI
@@ -130,3 +139,12 @@ 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}")
+
+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)
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:
Modules/Compiler/AppleClang-C-FeatureTests.cmake | 2 +-
Modules/Compiler/Clang-C-FeatureTests.cmake | 2 +-
Modules/Compiler/GNU-C-FeatureTests.cmake | 2 +-
Tests/CompileFeatures/CMakeLists.txt | 32 +++++++++++++++++
Tests/CompileFeatures/genex_test.c | 38 ++++++++++++++++++++
.../WriteCompilerDetectionHeader/CMakeLists.txt | 18 ++++++++++
Tests/Module/WriteCompilerDetectionHeader/main.c | 29 +++++++++++++++
.../WriteCompilerDetectionHeader/main_multi.c | 29 +++++++++++++++
8 files changed, 149 insertions(+), 3 deletions(-)
create mode 100644 Tests/CompileFeatures/genex_test.c
create mode 100644 Tests/Module/WriteCompilerDetectionHeader/main.c
create mode 100644 Tests/Module/WriteCompilerDetectionHeader/main_multi.c
hooks/post-receive
--
CMake
More information about the Cmake-commits
mailing list