Ver Fonte

Merge topic 'shared-string'

be7807478c cmDefinitions: Reduce allocation of keys and values in MakeClosure
e07e2bc8bb bootstrap: Compile cm::String
c1787cb5eb cpack.cxx: Re-order include blocks to follow our conventions
141e307484 cmConfigure.h: Tell windows.h not to define min/max macros

Acked-by: Kitware Robot <[email protected]>
Merge-request: !3669
Brad King há 6 anos atrás
pai
commit
dfb5936f0f

+ 15 - 14
Source/CPack/cpack.cxx

@@ -1,20 +1,6 @@
 /* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
    file Copyright.txt or https://cmake.org/licensing for details.  */
 
-#include "cmsys/CommandLineArguments.hxx"
-#include "cmsys/Encoding.hxx"
-#include <iostream>
-#include <map>
-#include <sstream>
-#include <stddef.h>
-#include <string>
-#include <utility>
-#include <vector>
-
-#if defined(_WIN32) && !defined(CMAKE_BOOTSTRAP)
-#  include "cmsys/ConsoleBuf.hxx"
-#endif
-
 #include "cmCPackGenerator.h"
 #include "cmCPackGeneratorFactory.h"
 #include "cmCPackLog.h"
@@ -29,6 +15,21 @@
 #include "cmSystemTools.h"
 #include "cmake.h"
 
+#include "cmsys/CommandLineArguments.hxx"
+#include "cmsys/Encoding.hxx"
+
+#if defined(_WIN32) && !defined(CMAKE_BOOTSTRAP)
+#  include "cmsys/ConsoleBuf.hxx"
+#endif
+
+#include <iostream>
+#include <map>
+#include <sstream>
+#include <stddef.h>
+#include <string>
+#include <utility>
+#include <vector>
+
 namespace {
 const char* cmDocumentationName[][2] = {
   { nullptr, "  cpack - Packaging driver provided by CMake." },

+ 4 - 0
Source/cmConfigure.cmake.h.in

@@ -26,4 +26,8 @@
 
 #define CM_FALLTHROUGH cmsys_FALLTHROUGH
 
+#if defined(_WIN32) && !defined(NOMINMAX)
+#  define NOMINMAX
+#endif
+
 #endif

+ 9 - 9
Source/cmDefinitions.cxx

@@ -17,7 +17,7 @@ cmDefinitions::Def const& cmDefinitions::GetInternal(const std::string& key,
 {
   assert(begin != end);
   {
-    auto it = begin->Map.find(key);
+    auto it = begin->Map.find(cm::String::borrow(key));
     if (it != begin->Map.end()) {
       it->second.Used = true;
       return it->second;
@@ -39,7 +39,7 @@ const std::string* cmDefinitions::Get(const std::string& key, StackIter begin,
                                       StackIter end)
 {
   Def const& def = cmDefinitions::GetInternal(key, begin, end, false);
-  return def.Exists ? &def.Value : nullptr;
+  return def.Value ? def.Value.str_if_stable() : nullptr;
 }
 
 void cmDefinitions::Raise(const std::string& key, StackIter begin,
@@ -52,7 +52,7 @@ bool cmDefinitions::HasKey(const std::string& key, StackIter begin,
                            StackIter end)
 {
   for (StackIter it = begin; it != end; ++it) {
-    if (it->Map.find(key) != it->Map.end()) {
+    if (it->Map.find(cm::String::borrow(key)) != it->Map.end()) {
       return true;
     }
   }
@@ -68,11 +68,11 @@ cmDefinitions cmDefinitions::MakeClosure(StackIter begin, StackIter end)
     for (auto const& mi : it->Map) {
       // Use this key if it is not already set or unset.
       if (closure.Map.find(mi.first) == closure.Map.end() &&
-          undefined.find(mi.first) == undefined.end()) {
-        if (mi.second.Exists) {
+          undefined.find(mi.first.view()) == undefined.end()) {
+        if (mi.second.Value) {
           closure.Map.insert(mi);
         } else {
-          undefined.emplace(mi.first);
+          undefined.emplace(mi.first.view());
         }
       }
     }
@@ -90,8 +90,8 @@ std::vector<std::string> cmDefinitions::ClosureKeys(StackIter begin,
     defined.reserve(defined.size() + it->Map.size());
     for (auto const& mi : it->Map) {
       // Use this key if it is not already set or unset.
-      if (bound.emplace(mi.first).second && mi.second.Exists) {
-        defined.push_back(mi.first);
+      if (bound.emplace(mi.first.view()).second && mi.second.Value) {
+        defined.push_back(*mi.first.str_if_stable());
       }
     }
   }
@@ -116,7 +116,7 @@ std::vector<std::string> cmDefinitions::UnusedKeys() const
   // Consider local definitions.
   for (auto const& mi : this->Map) {
     if (!mi.second.Used) {
-      keys.push_back(mi.first);
+      keys.push_back(*mi.first.str_if_stable());
     }
   }
   return keys;

+ 4 - 4
Source/cmDefinitions.h

@@ -8,7 +8,9 @@
 #include "cm_string_view.hxx"
 
 #include "cmLinkedTree.h"
+#include "cmString.hxx"
 
+#include <functional>
 #include <string>
 #include <unordered_map>
 #include <vector>
@@ -57,16 +59,14 @@ private:
     Def() = default;
     Def(cm::string_view value)
       : Value(value)
-      , Exists(true)
     {
     }
-    std::string Value;
-    bool Exists = false;
+    cm::String Value;
     bool Used = false;
   };
   static Def NoDef;
 
-  std::unordered_map<std::string, Def> Map;
+  std::unordered_map<cm::String, Def> Map;
 
   static Def const& GetInternal(const std::string& key, StackIter begin,
                                 StackIter end, bool raise);

+ 1 - 1
Source/cmGeneratorExpressionNode.cxx

@@ -19,11 +19,11 @@
 #include "cmState.h"
 #include "cmStateSnapshot.h"
 #include "cmStateTypes.h"
+#include "cmString.hxx"
 #include "cmStringAlgorithms.h"
 #include "cmSystemTools.h"
 #include "cmTarget.h"
 #include "cm_static_string_view.hxx"
-#include "cm_string_view.hxx"
 #include "cmake.h"
 
 #include "cmsys/RegularExpression.hxx"

+ 7 - 0
bootstrap

@@ -423,6 +423,7 @@ CMAKE_CXX_SOURCES="\
   cmState \
   cmStateDirectory \
   cmStateSnapshot \
+  cmString \
   cmStringAlgorithms \
   cmStringReplaceHelper \
   cmStringCommand \
@@ -1364,6 +1365,12 @@ cmake_report cmConfigure.h${_tmp} "#define CMAKE_BIN_DIR \"/bootstrap-not-insall
 cmake_report cmConfigure.h${_tmp} "#define CMAKE_DATA_DIR \"/bootstrap-not-insalled\""
 cmake_report cmConfigure.h${_tmp} "#define CM_FALLTHROUGH"
 
+if ${cmake_system_mingw}; then
+  cmake_report cmConfigure.h${_tmp} "#if defined(_WIN32) && !defined(NOMINMAX)"
+  cmake_report cmConfigure.h${_tmp} "#  define NOMINMAX"
+  cmake_report cmConfigure.h${_tmp} "#endif"
+fi
+
 # Regenerate configured headers
 for h in Configure VersionConfig; do
   if "${_diff}" cm${h}.h cm${h}.h${_tmp} > /dev/null 2> /dev/null; then