[Cmake-commits] CMake branch, next, updated. v3.5.0-rc3-343-gb6b5792

Brad King brad.king at kitware.com
Mon Mar 7 14:08:08 EST 2016


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  b6b5792286f9618cb4051585f534feb48f8a1b3f (commit)
       via  72e0dc58d3caf63a57975e97ce13c5dc4b38cf9b (commit)
      from  f10ee09337753fb072f7be49c8be76e702cd90fb (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 -----------------------------------------------------------------
https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=b6b5792286f9618cb4051585f534feb48f8a1b3f
commit b6b5792286f9618cb4051585f534feb48f8a1b3f
Merge: f10ee09 72e0dc5
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Mon Mar 7 14:08:07 2016 -0500
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Mon Mar 7 14:08:07 2016 -0500

    Merge topic 'toolchain-file-project' into next
    
    72e0dc58 Diagnose recursive project/enable_language without crashing (#15999)


https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=72e0dc58d3caf63a57975e97ce13c5dc4b38cf9b
commit 72e0dc58d3caf63a57975e97ce13c5dc4b38cf9b
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Mon Mar 7 13:31:25 2016 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Mon Mar 7 13:52:38 2016 -0500

    Diagnose recursive project/enable_language without crashing (#15999)
    
    Calling `project()` or `enable_language()` from a toolchain file will
    infinitely recurse since those commands load the toolchain file.
    Diagnose and reject this case with an error message instead of crashing
    when the stack eventually overflows.

diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx
index 848028f..c628406 100644
--- a/Source/cmGlobalGenerator.cxx
+++ b/Source/cmGlobalGenerator.cxx
@@ -398,6 +398,21 @@ cmGlobalGenerator::EnableLanguage(std::vector<std::string>const& languages,
     return;
     }
 
+  std::set<std::string> cur_languages(languages.begin(), languages.end());
+  for (std::set<std::string>::iterator li = cur_languages.begin();
+       li != cur_languages.end(); ++li)
+    {
+    if (!this->LanguagesInProgress.insert(*li).second)
+      {
+      std::ostringstream e;
+      e << "Language '" << *li << "' is currently being enabled.  "
+        "Recursive call not allowed.";
+      mf->IssueMessage(cmake::FATAL_ERROR, e.str());
+      cmSystemTools::SetFatalErrorOccured();
+      return;
+      }
+    }
+
   if(this->TryCompileOuterMakefile)
     {
     // In a try-compile we can only enable languages provided by caller.
@@ -823,6 +838,12 @@ cmGlobalGenerator::EnableLanguage(std::vector<std::string>const& languages,
     {
     cmSystemTools::SetFatalErrorOccured();
     }
+
+  for (std::set<std::string>::iterator li = cur_languages.begin();
+       li != cur_languages.end(); ++li)
+    {
+    this->LanguagesInProgress.erase(*li);
+    }
 }
 
 //----------------------------------------------------------------------------
diff --git a/Source/cmGlobalGenerator.h b/Source/cmGlobalGenerator.h
index 48fa704..6e819d3 100644
--- a/Source/cmGlobalGenerator.h
+++ b/Source/cmGlobalGenerator.h
@@ -457,6 +457,7 @@ private:
   // in EnableLanguagesFromGenerator
   std::map<std::string, bool> IgnoreExtensions;
   std::set<std::string> LanguagesReady; // Ready for try_compile
+  std::set<std::string> LanguagesInProgress;
   std::map<std::string, std::string> OutputExtensions;
   std::map<std::string, std::string> LanguageToOutputExtension;
   std::map<std::string, std::string> ExtensionToLanguage;
diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt
index 5bef629..23b9b42 100644
--- a/Tests/RunCMake/CMakeLists.txt
+++ b/Tests/RunCMake/CMakeLists.txt
@@ -152,6 +152,7 @@ add_RunCMake_test(ObjectLibrary)
 add_RunCMake_test(Swift)
 add_RunCMake_test(TargetObjects)
 add_RunCMake_test(TargetSources)
+add_RunCMake_test(ToolchainFile)
 add_RunCMake_test(find_dependency)
 add_RunCMake_test(CompileDefinitions)
 add_RunCMake_test(CompileFeatures)
diff --git a/Tests/RunCMake/ToolchainFile/CMakeLists.txt b/Tests/RunCMake/ToolchainFile/CMakeLists.txt
new file mode 100644
index 0000000..93ee9df
--- /dev/null
+++ b/Tests/RunCMake/ToolchainFile/CMakeLists.txt
@@ -0,0 +1,3 @@
+cmake_minimum_required(VERSION 3.5)
+project(${RunCMake_TEST} NONE)
+include(${RunCMake_TEST}.cmake)
diff --git a/Tests/RunCMake/ToolchainFile/CallEnableLanguage-result.txt b/Tests/RunCMake/ToolchainFile/CallEnableLanguage-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/ToolchainFile/CallEnableLanguage-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/ToolchainFile/CallEnableLanguage-stderr.txt b/Tests/RunCMake/ToolchainFile/CallEnableLanguage-stderr.txt
new file mode 100644
index 0000000..0de51c6
--- /dev/null
+++ b/Tests/RunCMake/ToolchainFile/CallEnableLanguage-stderr.txt
@@ -0,0 +1,5 @@
+^CMake Error at CallEnableLanguage-toolchain.cmake:[0-9]+ \(enable_language\):
+  Language 'NONE' is currently being enabled.  Recursive call not allowed.
+Call Stack \(most recent call first\):
+  .*/Modules/CMakeDetermineSystem.cmake:[0-9]+ \(include\)
+  CMakeLists.txt:[0-9]+ \(project\)$
diff --git a/Tests/RunCMake/ToolchainFile/CallEnableLanguage-toolchain.cmake b/Tests/RunCMake/ToolchainFile/CallEnableLanguage-toolchain.cmake
new file mode 100644
index 0000000..8145101
--- /dev/null
+++ b/Tests/RunCMake/ToolchainFile/CallEnableLanguage-toolchain.cmake
@@ -0,0 +1 @@
+enable_language(NONE)
diff --git a/Tests/RunCMake/ToolchainFile/CallEnableLanguage.cmake b/Tests/RunCMake/ToolchainFile/CallEnableLanguage.cmake
new file mode 100644
index 0000000..e69de29
diff --git a/Tests/RunCMake/ToolchainFile/CallProject-result.txt b/Tests/RunCMake/ToolchainFile/CallProject-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/ToolchainFile/CallProject-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/ToolchainFile/CallProject-stderr.txt b/Tests/RunCMake/ToolchainFile/CallProject-stderr.txt
new file mode 100644
index 0000000..e2b9f1b
--- /dev/null
+++ b/Tests/RunCMake/ToolchainFile/CallProject-stderr.txt
@@ -0,0 +1,5 @@
+^CMake Error at CallProject-toolchain.cmake:[0-9]+ \(project\):
+  Language 'NONE' is currently being enabled.  Recursive call not allowed.
+Call Stack \(most recent call first\):
+  .*/Modules/CMakeDetermineSystem.cmake:[0-9]+ \(include\)
+  CMakeLists.txt:[0-9]+ \(project\)$
diff --git a/Tests/RunCMake/ToolchainFile/CallProject-toolchain.cmake b/Tests/RunCMake/ToolchainFile/CallProject-toolchain.cmake
new file mode 100644
index 0000000..b113c13
--- /dev/null
+++ b/Tests/RunCMake/ToolchainFile/CallProject-toolchain.cmake
@@ -0,0 +1 @@
+project(Bad NONE)
diff --git a/Tests/RunCMake/ToolchainFile/CallProject.cmake b/Tests/RunCMake/ToolchainFile/CallProject.cmake
new file mode 100644
index 0000000..e69de29
diff --git a/Tests/RunCMake/ToolchainFile/RunCMakeTest.cmake b/Tests/RunCMake/ToolchainFile/RunCMakeTest.cmake
new file mode 100644
index 0000000..75293e7
--- /dev/null
+++ b/Tests/RunCMake/ToolchainFile/RunCMakeTest.cmake
@@ -0,0 +1,9 @@
+include(RunCMake)
+
+function(run_cmake_toolchain t)
+  set(RunCMake_TEST_OPTIONS -DCMAKE_TOOLCHAIN_FILE=${RunCMake_SOURCE_DIR}/${t}-toolchain.cmake)
+  run_cmake(${t})
+endfunction()
+
+run_cmake_toolchain(CallEnableLanguage)
+run_cmake_toolchain(CallProject)

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

Summary of changes:
 Source/cmGlobalGenerator.cxx                       |   21 ++++++++++++++++++++
 Source/cmGlobalGenerator.h                         |    1 +
 Tests/RunCMake/CMakeLists.txt                      |    1 +
 .../CMakeLists.txt                                 |    2 +-
 .../CallEnableLanguage-result.txt}                 |    0
 .../ToolchainFile/CallEnableLanguage-stderr.txt    |    5 +++++
 .../CallEnableLanguage-toolchain.cmake             |    1 +
 .../ToolchainFile/CallEnableLanguage.cmake         |    0
 .../CallProject-result.txt}                        |    0
 .../RunCMake/ToolchainFile/CallProject-stderr.txt  |    5 +++++
 .../ToolchainFile/CallProject-toolchain.cmake      |    1 +
 .../RunCMake/ToolchainFile/CallProject.cmake       |    0
 Tests/RunCMake/ToolchainFile/RunCMakeTest.cmake    |    9 +++++++++
 13 files changed, 45 insertions(+), 1 deletion(-)
 copy Tests/RunCMake/{AutoExportDll => ToolchainFile}/CMakeLists.txt (63%)
 copy Tests/RunCMake/{CMP0004/CMP0004-NEW-result.txt => ToolchainFile/CallEnableLanguage-result.txt} (100%)
 create mode 100644 Tests/RunCMake/ToolchainFile/CallEnableLanguage-stderr.txt
 create mode 100644 Tests/RunCMake/ToolchainFile/CallEnableLanguage-toolchain.cmake
 copy Modules/IntelVSImplicitPath/hello.f => Tests/RunCMake/ToolchainFile/CallEnableLanguage.cmake (100%)
 copy Tests/RunCMake/{CMP0004/CMP0004-NEW-result.txt => ToolchainFile/CallProject-result.txt} (100%)
 create mode 100644 Tests/RunCMake/ToolchainFile/CallProject-stderr.txt
 create mode 100644 Tests/RunCMake/ToolchainFile/CallProject-toolchain.cmake
 copy Modules/IntelVSImplicitPath/hello.f => Tests/RunCMake/ToolchainFile/CallProject.cmake (100%)
 create mode 100644 Tests/RunCMake/ToolchainFile/RunCMakeTest.cmake


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list