[Cmake-commits] CMake branch, next, updated. v3.0.0-rc4-2633-g7770e68

Stephen Kelly steveire at gmail.com
Wed Apr 30 12:43:13 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  7770e68229ec829f613b2f6e3a3168d0caa40f80 (commit)
       via  0f9f8f6528bcdd8ff59b035ce97045635c76bc3b (commit)
      from  f31aa633293f3c4f4b72d11af9884984efa82cfd (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=7770e68229ec829f613b2f6e3a3168d0caa40f80
commit 7770e68229ec829f613b2f6e3a3168d0caa40f80
Merge: f31aa63 0f9f8f6
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Wed Apr 30 12:43:12 2014 -0400
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Wed Apr 30 12:43:12 2014 -0400

    Merge topic 'decay-language-version' into next
    
    0f9f8f65 cmTarget: Add CXX_STANDARD_REQUIRED to control decay.


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=0f9f8f6528bcdd8ff59b035ce97045635c76bc3b
commit 0f9f8f6528bcdd8ff59b035ce97045635c76bc3b
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Wed Apr 30 18:07:38 2014 +0200
Commit:     Stephen Kelly <steveire at gmail.com>
CommitDate: Wed Apr 30 18:39:19 2014 +0200

    cmTarget: Add CXX_STANDARD_REQUIRED to control decay.

diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx
index a29a0cd..afb2ce8 100644
--- a/Source/cmLocalGenerator.cxx
+++ b/Source/cmLocalGenerator.cxx
@@ -2161,6 +2161,26 @@ AddCompilerRequirementFlag(std::string &flags, cmTarget* target,
   bool ext = target->GetPropertyAsBool(extProp);
   std::string type = ext ? "EXTENSION" : "STANDARD";
 
+  if (target->GetPropertyAsBool(lang + "_STANDARD_REQUIRED"))
+    {
+    std::string option_flag =
+              "CMAKE_" + lang + standardProp
+                      + "_" + type + "_COMPILE_OPTION";
+
+    const char *opt = target->GetMakefile()->GetDefinition(option_flag);
+    if (!opt)
+      {
+      cmOStringStream e;
+      e << "Target \"" << target->GetName() << "\" requires the language "
+           "dialect \"" << lang << standardProp << "\" "
+        << (ext ? "(with compiler extensions)" : "") << ", but CMake "
+           "does not know the compile flags to use to enable it.";
+      this->GetMakefile()->IssueMessage(cmake::FATAL_ERROR, e.str());
+      }
+    this->AppendFlags(flags, opt);
+    return;
+    }
+
   static std::map<std::string, std::vector<std::string> > langStdMap;
   if (langStdMap.empty())
     {
diff --git a/Tests/CompileFeatures/CMakeLists.txt b/Tests/CompileFeatures/CMakeLists.txt
index ce5004b..31dfbba 100644
--- a/Tests/CompileFeatures/CMakeLists.txt
+++ b/Tests/CompileFeatures/CMakeLists.txt
@@ -30,6 +30,9 @@ add_executable(CompileFeatures main.cpp)
 set_property(TARGET CompileFeatures
   PROPERTY COMPILE_FEATURES "cxx_auto_type"
 )
+set_property(TARGET CompileFeatures
+  PROPERTY CXX_STANDARD_REQUIRED TRUE
+)
 
 add_executable(GenexCompileFeatures main.cpp)
 set_property(TARGET GenexCompileFeatures
diff --git a/Tests/RunCMake/CompileFeatures/RequireCXX11-result.txt b/Tests/RunCMake/CompileFeatures/RequireCXX11-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/CompileFeatures/RequireCXX11-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/CompileFeatures/RequireCXX11-stderr.txt b/Tests/RunCMake/CompileFeatures/RequireCXX11-stderr.txt
new file mode 100644
index 0000000..0fc9112
--- /dev/null
+++ b/Tests/RunCMake/CompileFeatures/RequireCXX11-stderr.txt
@@ -0,0 +1,3 @@
+CMake Error in CMakeLists.txt:
+  Target "foo" requires the language dialect "CXX11" , but CMake does not
+  know the compile flags to use to enable it.
diff --git a/Tests/RunCMake/CompileFeatures/RequireCXX11.cmake b/Tests/RunCMake/CompileFeatures/RequireCXX11.cmake
new file mode 100644
index 0000000..01d3e71
--- /dev/null
+++ b/Tests/RunCMake/CompileFeatures/RequireCXX11.cmake
@@ -0,0 +1,9 @@
+
+foreach(standard 98 11)
+  unset(CMAKE_CXX${standard}_STANDARD_COMPILE_OPTION)
+  unset(CMAKE_CXX${standard}_EXTENSION_COMPILE_OPTION)
+endforeach()
+
+add_library(foo empty.cpp)
+set_property(TARGET foo PROPERTY CXX_STANDARD 11)
+set_property(TARGET foo PROPERTY CXX_STANDARD_REQUIRED TRUE)
diff --git a/Tests/RunCMake/CompileFeatures/RequireCXX11Ext-result.txt b/Tests/RunCMake/CompileFeatures/RequireCXX11Ext-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/CompileFeatures/RequireCXX11Ext-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/CompileFeatures/RequireCXX11Ext-stderr.txt b/Tests/RunCMake/CompileFeatures/RequireCXX11Ext-stderr.txt
new file mode 100644
index 0000000..5c68a1c
--- /dev/null
+++ b/Tests/RunCMake/CompileFeatures/RequireCXX11Ext-stderr.txt
@@ -0,0 +1,3 @@
+CMake Error in CMakeLists.txt:
+  Target "foo" requires the language dialect "CXX11" \(with compiler
+  extensions\), but CMake does not know the compile flags to use to enable it.
diff --git a/Tests/RunCMake/CompileFeatures/RequireCXX11Ext.cmake b/Tests/RunCMake/CompileFeatures/RequireCXX11Ext.cmake
new file mode 100644
index 0000000..9e726c8
--- /dev/null
+++ b/Tests/RunCMake/CompileFeatures/RequireCXX11Ext.cmake
@@ -0,0 +1,5 @@
+
+add_library(foo empty.cpp)
+set_property(TARGET foo PROPERTY CXX_STANDARD 11)
+set_property(TARGET foo PROPERTY CXX_EXTENSIONS TRUE)
+set_property(TARGET foo PROPERTY CXX_STANDARD_REQUIRED TRUE)
diff --git a/Tests/RunCMake/CompileFeatures/RequireCXX98-result.txt b/Tests/RunCMake/CompileFeatures/RequireCXX98-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/CompileFeatures/RequireCXX98-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/CompileFeatures/RequireCXX98-stderr.txt b/Tests/RunCMake/CompileFeatures/RequireCXX98-stderr.txt
new file mode 100644
index 0000000..47c8688
--- /dev/null
+++ b/Tests/RunCMake/CompileFeatures/RequireCXX98-stderr.txt
@@ -0,0 +1,3 @@
+CMake Error in CMakeLists.txt:
+  Target "foo" requires the language dialect "CXX98" , but CMake does not
+  know the compile flags to use to enable it.
diff --git a/Tests/RunCMake/CompileFeatures/RequireCXX98.cmake b/Tests/RunCMake/CompileFeatures/RequireCXX98.cmake
new file mode 100644
index 0000000..4ea595e
--- /dev/null
+++ b/Tests/RunCMake/CompileFeatures/RequireCXX98.cmake
@@ -0,0 +1,4 @@
+
+add_library(foo empty.cpp)
+set_property(TARGET foo PROPERTY CXX_STANDARD 98)
+set_property(TARGET foo PROPERTY CXX_STANDARD_REQUIRED TRUE)
diff --git a/Tests/RunCMake/CompileFeatures/RequireCXX98Ext-result.txt b/Tests/RunCMake/CompileFeatures/RequireCXX98Ext-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/CompileFeatures/RequireCXX98Ext-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/CompileFeatures/RequireCXX98Ext-stderr.txt b/Tests/RunCMake/CompileFeatures/RequireCXX98Ext-stderr.txt
new file mode 100644
index 0000000..b4fdf8a
--- /dev/null
+++ b/Tests/RunCMake/CompileFeatures/RequireCXX98Ext-stderr.txt
@@ -0,0 +1,3 @@
+CMake Error in CMakeLists.txt:
+  Target "foo" requires the language dialect "CXX98" \(with compiler
+  extensions\), but CMake does not know the compile flags to use to enable it.
diff --git a/Tests/RunCMake/CompileFeatures/RequireCXX98Ext.cmake b/Tests/RunCMake/CompileFeatures/RequireCXX98Ext.cmake
new file mode 100644
index 0000000..fdf4cc7
--- /dev/null
+++ b/Tests/RunCMake/CompileFeatures/RequireCXX98Ext.cmake
@@ -0,0 +1,5 @@
+
+add_library(foo empty.cpp)
+set_property(TARGET foo PROPERTY CXX_STANDARD 98)
+set_property(TARGET foo PROPERTY CXX_EXTENSIONS TRUE)
+set_property(TARGET foo PROPERTY CXX_STANDARD_REQUIRED TRUE)
diff --git a/Tests/RunCMake/CompileFeatures/RunCMakeTest.cmake b/Tests/RunCMake/CompileFeatures/RunCMakeTest.cmake
index 43d4cb3..50c7269 100644
--- a/Tests/RunCMake/CompileFeatures/RunCMakeTest.cmake
+++ b/Tests/RunCMake/CompileFeatures/RunCMakeTest.cmake
@@ -18,3 +18,16 @@ if (NOT FEATURES)
   run_cmake(NoSupportedCxxFeatures)
   run_cmake(NoSupportedCxxFeaturesGenex)
 endif()
+
+foreach(standard 98 11)
+  file(READ
+    "${RunCMake_BINARY_DIR}/generate_feature_list-build/cxx${standard}_flag.txt"
+    CXX${standard}_FLAG
+  )
+  if (CXX${standard}_FLAG STREQUAL NOTFOUND)
+    run_cmake(RequireCXX${standard})
+  endif()
+  if (CXX${standard}EXT_FLAG STREQUAL NOTFOUND)
+    run_cmake(RequireCXX${standard}Ext)
+  endif()
+endforeach()
diff --git a/Tests/RunCMake/CompileFeatures/generate_feature_list.cmake b/Tests/RunCMake/CompileFeatures/generate_feature_list.cmake
index 2bbbd17..06c4f73 100644
--- a/Tests/RunCMake/CompileFeatures/generate_feature_list.cmake
+++ b/Tests/RunCMake/CompileFeatures/generate_feature_list.cmake
@@ -2,3 +2,22 @@
 file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/features.txt"
   "${CMAKE_CXX_COMPILE_FEATURES}"
 )
+
+foreach(standard 98 11)
+  set(CXX${standard}_FLAG NOTFOUND)
+  if (DEFINED CMAKE_CXX${standard}_STANDARD_COMPILE_OPTION)
+    set(CXX${standard}_FLAG ${CMAKE_CXX${standard}_STANDARD_COMPILE_OPTION})
+  endif()
+
+  file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/cxx${standard}_flag.txt"
+    "${CXX${standard}_FLAG}"
+  )
+  set(CXX${standard}EXT_FLAG NOTFOUND)
+  if (DEFINED CMAKE_CXX${standard}_EXTENSION_COMPILE_OPTION)
+    set(CXX${standard}EXT_FLAG ${CMAKE_CXX${standard}_EXTENSION_COMPILE_OPTION})
+  endif()
+
+  file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/cxx${standard}ext_flag.txt"
+    "${CXX${standard}EXT_FLAG}"
+  )
+endforeach()

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

Summary of changes:
 Source/cmLocalGenerator.cxx                        |   20 ++++++++++++++++++++
 Tests/CompileFeatures/CMakeLists.txt               |    3 +++
 .../RequireCXX11-result.txt}                       |    0
 .../CompileFeatures/RequireCXX11-stderr.txt        |    3 +++
 Tests/RunCMake/CompileFeatures/RequireCXX11.cmake  |    9 +++++++++
 .../RequireCXX11Ext-result.txt}                    |    0
 .../CompileFeatures/RequireCXX11Ext-stderr.txt     |    3 +++
 .../RunCMake/CompileFeatures/RequireCXX11Ext.cmake |    5 +++++
 .../RequireCXX98-result.txt}                       |    0
 .../CompileFeatures/RequireCXX98-stderr.txt        |    3 +++
 Tests/RunCMake/CompileFeatures/RequireCXX98.cmake  |    4 ++++
 .../RequireCXX98Ext-result.txt}                    |    0
 .../CompileFeatures/RequireCXX98Ext-stderr.txt     |    3 +++
 .../RunCMake/CompileFeatures/RequireCXX98Ext.cmake |    5 +++++
 Tests/RunCMake/CompileFeatures/RunCMakeTest.cmake  |   13 +++++++++++++
 .../CompileFeatures/generate_feature_list.cmake    |   19 +++++++++++++++++++
 16 files changed, 90 insertions(+)
 copy Tests/RunCMake/{CMP0004/CMP0004-NEW-result.txt => CompileFeatures/RequireCXX11-result.txt} (100%)
 create mode 100644 Tests/RunCMake/CompileFeatures/RequireCXX11-stderr.txt
 create mode 100644 Tests/RunCMake/CompileFeatures/RequireCXX11.cmake
 copy Tests/RunCMake/{CMP0004/CMP0004-NEW-result.txt => CompileFeatures/RequireCXX11Ext-result.txt} (100%)
 create mode 100644 Tests/RunCMake/CompileFeatures/RequireCXX11Ext-stderr.txt
 create mode 100644 Tests/RunCMake/CompileFeatures/RequireCXX11Ext.cmake
 copy Tests/RunCMake/{CMP0004/CMP0004-NEW-result.txt => CompileFeatures/RequireCXX98-result.txt} (100%)
 create mode 100644 Tests/RunCMake/CompileFeatures/RequireCXX98-stderr.txt
 create mode 100644 Tests/RunCMake/CompileFeatures/RequireCXX98.cmake
 copy Tests/RunCMake/{CMP0004/CMP0004-NEW-result.txt => CompileFeatures/RequireCXX98Ext-result.txt} (100%)
 create mode 100644 Tests/RunCMake/CompileFeatures/RequireCXX98Ext-stderr.txt
 create mode 100644 Tests/RunCMake/CompileFeatures/RequireCXX98Ext.cmake


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list