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, master has been updated
       via  a1d0653fc8d8cc07aa130920b86e605e17beaa79 (commit)
       via  aa6437e3e0132b959cc28cb7a8115f82b92c754e (commit)
       via  ba773cfec84540799a8a741ec388218013699769 (commit)
       via  5aa94a1d0d4b4645ce6a73bd2d0c560dee86b466 (commit)
       via  fb7f8e5fbdfce6e7d98781544d8cd28fe8911a8b (commit)
       via  92c4c852db821bc75ef0a20db4855e3af57ef80d (commit)
       via  7d6639bf8d9298d9f4c81fa035cda5d34a6e1622 (commit)
       via  5cf404d36f24ed8caebceb7083cef7fb44f179f3 (commit)
       via  7e86f71eff72a12e903cdd2efccf55ec3d58a106 (commit)
       via  c5fb36a4cb8bd3272e2e0b54e3947886ad7eb778 (commit)
      from  843936f51b4f409d3106857a3954ff2db669becd (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=a1d0653fc8d8cc07aa130920b86e605e17beaa79
commit a1d0653fc8d8cc07aa130920b86e605e17beaa79
Merge: aa6437e3e0 92c4c852db
Author:     Brad King <brad.k...@kitware.com>
AuthorDate: Tue Nov 19 16:30:06 2019 +0000
Commit:     Kitware Robot <kwro...@kitware.com>
CommitDate: Tue Nov 19 11:31:16 2019 -0500

    Merge topic 'xcode-scheme-workdir'
    
    92c4c852db Xcode: Add custom working directory property
    
    Acked-by: Kitware Robot <kwro...@kitware.com>
    Merge-request: !4063


https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=aa6437e3e0132b959cc28cb7a8115f82b92c754e
commit aa6437e3e0132b959cc28cb7a8115f82b92c754e
Merge: ba773cfec8 7d6639bf8d
Author:     Brad King <brad.k...@kitware.com>
AuthorDate: Tue Nov 19 16:28:40 2019 +0000
Commit:     Kitware Robot <kwro...@kitware.com>
CommitDate: Tue Nov 19 11:30:20 2019 -0500

    Merge topic 'codelite_make_j_0'
    
    7d6639bf8d CodeLite: Do not pass -j argument with CPU count 0
    
    Acked-by: Kitware Robot <kwro...@kitware.com>
    Merge-request: !4067


https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=ba773cfec84540799a8a741ec388218013699769
commit ba773cfec84540799a8a741ec388218013699769
Merge: 5aa94a1d0d 7e86f71eff
Author:     Brad King <brad.k...@kitware.com>
AuthorDate: Tue Nov 19 16:28:14 2019 +0000
Commit:     Kitware Robot <kwro...@kitware.com>
CommitDate: Tue Nov 19 11:29:26 2019 -0500

    Merge topic 'modernize-memory-management'
    
    7e86f71eff cmOutputRequiredFilesCommand: Modernize memory management
    
    Acked-by: Kitware Robot <kwro...@kitware.com>
    Merge-request: !4055


https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=5aa94a1d0d4b4645ce6a73bd2d0c560dee86b466
commit 5aa94a1d0d4b4645ce6a73bd2d0c560dee86b466
Merge: fb7f8e5fbd 5cf404d36f
Author:     Brad King <brad.k...@kitware.com>
AuthorDate: Tue Nov 19 16:27:26 2019 +0000
Commit:     Kitware Robot <kwro...@kitware.com>
CommitDate: Tue Nov 19 11:28:13 2019 -0500

    Merge topic 'sdcc-sdar'
    
    5cf404d36f SDCC compiler: use sdar instead of sdcclib as librarian for 
recent versions
    
    Acked-by: Kitware Robot <kwro...@kitware.com>
    Merge-request: !4065


https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=fb7f8e5fbdfce6e7d98781544d8cd28fe8911a8b
commit fb7f8e5fbdfce6e7d98781544d8cd28fe8911a8b
Merge: 843936f51b c5fb36a4cb
Author:     Brad King <brad.k...@kitware.com>
AuthorDate: Tue Nov 19 16:27:07 2019 +0000
Commit:     Kitware Robot <kwro...@kitware.com>
CommitDate: Tue Nov 19 11:27:15 2019 -0500

    Merge topic 'FindFLEX-work-dir'
    
    c5fb36a4cb FindFLEX: Add policy CMP0098 to run flex in build tree
    
    Acked-by: Kitware Robot <kwro...@kitware.com>
    Merge-request: !3981


https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=92c4c852db821bc75ef0a20db4855e3af57ef80d
commit 92c4c852db821bc75ef0a20db4855e3af57ef80d
Author:     Gregor Jasny <gja...@googlemail.com>
AuthorDate: Mon Nov 18 22:01:04 2019 +0100
Commit:     Gregor Jasny <gja...@googlemail.com>
CommitDate: Mon Nov 18 22:34:34 2019 +0100

    Xcode: Add custom working directory property
    
    Closes: #19967

diff --git a/Help/manual/cmake-properties.7.rst 
b/Help/manual/cmake-properties.7.rst
index 94d08c6b5f..c5ef09abef 100644
--- a/Help/manual/cmake-properties.7.rst
+++ b/Help/manual/cmake-properties.7.rst
@@ -381,6 +381,7 @@ Properties on Targets
    /prop_tgt/XCODE_SCHEME_ADDRESS_SANITIZER
    /prop_tgt/XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN
    /prop_tgt/XCODE_SCHEME_ARGUMENTS
+   /prop_tgt/XCODE_SCHEME_WORKING_DIRECTORY
    /prop_tgt/XCODE_SCHEME_DEBUG_AS_ROOT
    /prop_tgt/XCODE_SCHEME_DEBUG_DOCUMENT_VERSIONING
    /prop_tgt/XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER
diff --git a/Help/manual/cmake-variables.7.rst 
b/Help/manual/cmake-variables.7.rst
index 01dd5fdc4c..0c1d510995 100644
--- a/Help/manual/cmake-variables.7.rst
+++ b/Help/manual/cmake-variables.7.rst
@@ -239,6 +239,7 @@ Variables that Change Behavior
    /variable/CMAKE_XCODE_GENERATE_TOP_LEVEL_PROJECT_ONLY
    /variable/CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER
    /variable/CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN
+   /variable/CMAKE_XCODE_SCHEME_WORKING_DIRECTORY
    /variable/CMAKE_XCODE_SCHEME_DEBUG_DOCUMENT_VERSIONING
    /variable/CMAKE_XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER
    /variable/CMAKE_XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS
diff --git a/Help/prop_tgt/XCODE_SCHEME_WORKING_DIRECTORY.rst 
b/Help/prop_tgt/XCODE_SCHEME_WORKING_DIRECTORY.rst
new file mode 100644
index 0000000000..7ffa74bb43
--- /dev/null
+++ b/Help/prop_tgt/XCODE_SCHEME_WORKING_DIRECTORY.rst
@@ -0,0 +1,13 @@
+XCODE_SCHEME_WORKING_DIRECTORY
+------------------------------
+
+Specify the ``Working Directory`` a of the `Run` and `Profile`
+action in the generated Xcode scheme. In case the value contains
+generator expressions those are evaluated.
+
+This property is initialized by the value of the variable
+:variable:`CMAKE_XCODE_SCHEME_WORKING_DIRECTORY` if it is set
+when a target is created.
+
+Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
+documentation to see all Xcode schema related properties.
diff --git a/Help/release/dev/xcode-scheme-workdir.rst 
b/Help/release/dev/xcode-scheme-workdir.rst
new file mode 100644
index 0000000000..8eb5ed88f8
--- /dev/null
+++ b/Help/release/dev/xcode-scheme-workdir.rst
@@ -0,0 +1,7 @@
+xcode-scheme-workdir
+--------------------
+
+* The Xcode generator learnt to set the value of the
+  ``Custom Working Directory`` schema
+  option with the :prop_tgt:`XCODE_SCHEME_WORKING_DIRECTORY`
+  target property.
diff --git a/Help/variable/CMAKE_XCODE_SCHEME_WORKING_DIRECTORY.rst 
b/Help/variable/CMAKE_XCODE_SCHEME_WORKING_DIRECTORY.rst
new file mode 100644
index 0000000000..cc690f7b1a
--- /dev/null
+++ b/Help/variable/CMAKE_XCODE_SCHEME_WORKING_DIRECTORY.rst
@@ -0,0 +1,12 @@
+CMAKE_XCODE_SCHEME_WORKING_DIRECTORY
+------------------------------------
+
+Specify the ``Working Directory`` a of the `Run` and `Profile`
+action in the generated Xcode scheme.
+
+This variable initializes the
+:prop_tgt:`XCODE_SCHEME_WORKING_DIRECTORY`
+property on all targets.
+
+Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
+documentation to see all Xcode schema related properties.
diff --git a/Source/cmGlobalXCodeGenerator.cxx 
b/Source/cmGlobalXCodeGenerator.cxx
index 154bd8ede9..40e8d4862f 100644
--- a/Source/cmGlobalXCodeGenerator.cxx
+++ b/Source/cmGlobalXCodeGenerator.cxx
@@ -3414,7 +3414,7 @@ bool cmGlobalXCodeGenerator::OutputXCodeSharedSchemes(
           (root->GetMakefile()->GetCMakeInstance()->GetIsInTryCompile() ||
            obj->GetTarget()->GetPropertyAsBool("XCODE_GENERATE_SCHEME"))) {
         const std::string& targetName = obj->GetTarget()->GetName();
-        cmXCodeScheme schm(obj, testables[targetName],
+        cmXCodeScheme schm(root, obj, testables[targetName],
                            this->CurrentConfigurationTypes,
                            this->XcodeVersion);
         schm.WriteXCodeSharedScheme(xcProjDir,
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index 14635f7b43..b9bf7a5611 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -371,6 +371,7 @@ cmTarget::cmTarget(std::string const& name, 
cmStateEnums::TargetType type,
       initProp("XCODE_SCHEME_THREAD_SANITIZER_STOP");
       initProp("XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER");
       initProp("XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP");
+      initProp("XCODE_SCHEME_WORKING_DIRECTORY");
       initProp("XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER");
       initProp("XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP");
       initProp("XCODE_SCHEME_MALLOC_SCRIBBLE");
diff --git a/Source/cmXCodeScheme.cxx b/Source/cmXCodeScheme.cxx
index afc95f56c5..b34c2f6e14 100644
--- a/Source/cmXCodeScheme.cxx
+++ b/Source/cmXCodeScheme.cxx
@@ -8,13 +8,16 @@
 #include <utility>
 
 #include "cmGeneratedFileStream.h"
+#include "cmGeneratorExpression.h"
 #include "cmGeneratorTarget.h"
 #include "cmXMLSafe.h"
 
-cmXCodeScheme::cmXCodeScheme(cmXCodeObject* xcObj, TestObjects tests,
+cmXCodeScheme::cmXCodeScheme(cmLocalGenerator* lg, cmXCodeObject* xcObj,
+                             TestObjects tests,
                              const std::vector<std::string>& configList,
                              unsigned int xcVersion)
-  : Target(xcObj)
+  : LocalGenerator(lg)
+  , Target(xcObj)
   , Tests(std::move(tests))
   , TargetName(xcObj->GetTarget()->GetName())
   , ConfigList(configList)
@@ -135,7 +138,8 @@ void cmXCodeScheme::WriteLaunchAction(cmXMLWriter& xout,
   xout.Attribute("selectedLauncherIdentifier",
                  "Xcode.DebuggerFoundation.Launcher.LLDB");
   xout.Attribute("launchStyle", "0");
-  xout.Attribute("useCustomWorkingDirectory", "NO");
+  WriteCustomWorkingDirectory(xout, configuration);
+
   xout.Attribute("ignoresPersistentStateOnLaunch", "NO");
   WriteLaunchActionBooleanAttribute(xout, "debugDocumentVersioning",
                                     "XCODE_SCHEME_DEBUG_DOCUMENT_VERSIONING",
@@ -355,7 +359,7 @@ void cmXCodeScheme::WriteProfileAction(cmXMLWriter& xout,
   xout.Attribute("buildConfiguration", configuration);
   xout.Attribute("shouldUseLaunchSchemeArgsEnv", "YES");
   xout.Attribute("savedToolIdentifier", "");
-  xout.Attribute("useCustomWorkingDirectory", "NO");
+  WriteCustomWorkingDirectory(xout, configuration);
   WriteLaunchActionBooleanAttribute(xout, "debugDocumentVersioning",
                                     "XCODE_SCHEME_DEBUG_DOCUMENT_VERSIONING",
                                     true);
@@ -395,6 +399,22 @@ void cmXCodeScheme::WriteBuildableReference(cmXMLWriter& 
xout,
   xout.EndElement();
 }
 
+void cmXCodeScheme::WriteCustomWorkingDirectory(
+  cmXMLWriter& xout, const std::string& configuration)
+{
+  std::string propertyValue = this->Target->GetTarget()->GetSafeProperty(
+    "XCODE_SCHEME_WORKING_DIRECTORY");
+  if (propertyValue.empty()) {
+    xout.Attribute("useCustomWorkingDirectory", "NO");
+  } else {
+    xout.Attribute("useCustomWorkingDirectory", "YES");
+
+    auto customWorkingDirectory = cmGeneratorExpression::Evaluate(
+      propertyValue, this->LocalGenerator, configuration);
+    xout.Attribute("customWorkingDirectory", customWorkingDirectory);
+  }
+}
+
 std::string cmXCodeScheme::WriteVersionString()
 {
   std::ostringstream v;
diff --git a/Source/cmXCodeScheme.h b/Source/cmXCodeScheme.h
index dff5e35e39..da4085669f 100644
--- a/Source/cmXCodeScheme.h
+++ b/Source/cmXCodeScheme.h
@@ -20,7 +20,7 @@ class cmXCodeScheme
 public:
   using TestObjects = std::vector<const cmXCodeObject*>;
 
-  cmXCodeScheme(cmXCodeObject* xcObj, TestObjects tests,
+  cmXCodeScheme(cmLocalGenerator* lg, cmXCodeObject* xcObj, TestObjects tests,
                 const std::vector<std::string>& configList,
                 unsigned int xcVersion);
 
@@ -28,6 +28,7 @@ public:
                               const std::string& container);
 
 private:
+  cmLocalGenerator* const LocalGenerator;
   const cmXCodeObject* const Target;
   const TestObjects Tests;
   const std::string& TargetName;
@@ -63,6 +64,9 @@ private:
   void WriteBuildableReference(cmXMLWriter& xout, const cmXCodeObject* xcObj,
                                const std::string& container);
 
+  void WriteCustomWorkingDirectory(cmXMLWriter& xout,
+                                   const std::string& configuration);
+
   std::string WriteVersionString();
   std::string FindConfiguration(const std::string& name);
 
diff --git a/Tests/RunCMake/XcodeProject/XcodeSchemaProperty-check.cmake 
b/Tests/RunCMake/XcodeProject/XcodeSchemaProperty-check.cmake
index 7d83a7034d..c742f50b43 100644
--- a/Tests/RunCMake/XcodeProject/XcodeSchemaProperty-check.cmake
+++ b/Tests/RunCMake/XcodeProject/XcodeSchemaProperty-check.cmake
@@ -45,6 +45,7 @@ check_property("ENVIRONMENT" [=[key="FOO"]=])
 check_property("ENVIRONMENT" [=[value="foo"]=])
 check_property("ENVIRONMENT" [=[key="BAR"]=])
 check_property("ENVIRONMENT" [=[value="bar"]=])
+check_property("WORKING_DIRECTORY" [=["/working/dir"]=])
 
 expect_no_schema("NoSchema")
 
diff --git a/Tests/RunCMake/XcodeProject/XcodeSchemaProperty.cmake 
b/Tests/RunCMake/XcodeProject/XcodeSchemaProperty.cmake
index be219f4115..ce5c0c9593 100644
--- a/Tests/RunCMake/XcodeProject/XcodeSchemaProperty.cmake
+++ b/Tests/RunCMake/XcodeProject/XcodeSchemaProperty.cmake
@@ -35,6 +35,7 @@ endfunction()
 create_scheme_for_property(EXECUTABLE myExecutable)
 create_scheme_for_property(ARGUMENTS "--foo;--bar=baz")
 create_scheme_for_property(ENVIRONMENT "FOO=foo;BAR=bar")
+create_scheme_for_property(WORKING_DIRECTORY "/working/dir")
 
 add_executable(NoSchema main.cpp)
 set_target_properties(NoSchema PROPERTIES XCODE_GENERATE_SCHEME OFF)

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=7d6639bf8d9298d9f4c81fa035cda5d34a6e1622
commit 7d6639bf8d9298d9f4c81fa035cda5d34a6e1622
Author:     Johnny Jazeix <jaz...@gmail.com>
AuthorDate: Mon Nov 18 22:10:57 2019 +0100
Commit:     Johnny Jazeix <jaz...@gmail.com>
CommitDate: Mon Nov 18 22:10:57 2019 +0100

    CodeLite: Do not pass -j argument with CPU count 0
    
    Fixes: #15054, #16727

diff --git a/Source/cmExtraCodeLiteGenerator.cxx 
b/Source/cmExtraCodeLiteGenerator.cxx
index 269e8dde29..3557e5c4cd 100644
--- a/Source/cmExtraCodeLiteGenerator.cxx
+++ b/Source/cmExtraCodeLiteGenerator.cxx
@@ -635,7 +635,10 @@ std::string cmExtraCodeLiteGenerator::GetBuildCommand(
   if (generator == "NMake Makefiles" || generator == "Ninja") {
     ss << make;
   } else if (generator == "MinGW Makefiles" || generator == "Unix Makefiles") {
-    ss << make << " -f$(ProjectPath)/Makefile -j " << this->CpuCount;
+    ss << make << " -f$(ProjectPath)/Makefile";
+    if (this->CpuCount > 0) {
+      ss << " -j " << this->CpuCount;
+    }
   }
   if (!targetName.empty()) {
     ss << " " << targetName;

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=5cf404d36f24ed8caebceb7083cef7fb44f179f3
commit 5cf404d36f24ed8caebceb7083cef7fb44f179f3
Author:     Johnny Jazeix <jaz...@gmail.com>
AuthorDate: Mon Nov 18 20:12:49 2019 +0100
Commit:     Johnny Jazeix <jaz...@gmail.com>
CommitDate: Mon Nov 18 20:12:49 2019 +0100

    SDCC compiler: use sdar instead of sdcclib as librarian for recent versions
    
    Fixes: #19988

diff --git a/Help/release/dev/sdcc-new-librarian.rst 
b/Help/release/dev/sdcc-new-librarian.rst
new file mode 100644
index 0000000000..93961ce6b5
--- /dev/null
+++ b/Help/release/dev/sdcc-new-librarian.rst
@@ -0,0 +1,6 @@
+sdcc-new-librarian
+------------------
+
+* Since sdcc 3.2.0, sdcclib has been deprecated in favor of sdar as librarian.
+  Since sdcc 3.8.6, it has been removed from the distribution.
+  Use sdar if found, else use sdcclib to keep older compatibility.
diff --git a/Modules/Platform/Generic-SDCC-C.cmake 
b/Modules/Platform/Generic-SDCC-C.cmake
index 8f648a1053..c51767e83a 100644
--- a/Modules/Platform/Generic-SDCC-C.cmake
+++ b/Modules/Platform/Generic-SDCC-C.cmake
@@ -19,14 +19,28 @@ set(CMAKE_DL_LIBS "")
 
 set(CMAKE_C_OUTPUT_EXTENSION ".rel")
 
-# find sdcclib as CMAKE_AR
-# since cmake may already have searched for "ar", sdcclib has to
-# be searched with a different variable name (SDCCLIB_EXECUTABLE)
-# and must then be forced into the cache
+# find sdar/sdcclib as CMAKE_AR
+# since cmake may already have searched for "ar", sdar has to
+# be searched with a different variable name (SDCCAR_EXECUTABLE)
+# and must then be forced into the cache.
+# sdcclib has been deprecated in SDCC 3.2.0 and removed in 3.8.6
+# so we first look for sdar
 get_filename_component(SDCC_LOCATION "${CMAKE_C_COMPILER}" PATH)
-find_program(SDCCLIB_EXECUTABLE sdcclib PATHS "${SDCC_LOCATION}" 
NO_DEFAULT_PATH)
-find_program(SDCCLIB_EXECUTABLE sdcclib)
-set(CMAKE_AR "${SDCCLIB_EXECUTABLE}" CACHE FILEPATH "The sdcc librarian" FORCE)
+find_program(SDCCAR_EXECUTABLE sdar NAMES sdcclib PATHS "${SDCC_LOCATION}" 
NO_DEFAULT_PATH)
+find_program(SDCCAR_EXECUTABLE sdar NAMES sdcclib)
+# for compatibility, in case SDCCLIB_EXECUTABLE is set, we use it
+if(DEFINED SDCCLIB_EXECUTABLE)
+  set(CMAKE_AR "${SDCCLIB_EXECUTABLE}" CACHE FILEPATH "The sdcc librarian" 
FORCE)
+else()
+  set(CMAKE_AR "${SDCCAR_EXECUTABLE}" CACHE FILEPATH "The sdcc librarian" 
FORCE)
+endif()
+
+
+if("${SDCCAR_EXECUTABLE}" MATCHES "sdcclib")
+  set(CMAKE_AR_OPTIONS "-a")
+else()
+  set(CMAKE_AR_OPTIONS "-rc")
+endif()
 
 # CMAKE_C_FLAGS_INIT and CMAKE_EXE_LINKER_FLAGS_INIT should be set in a 
CMAKE_SYSTEM_PROCESSOR file
 if(NOT DEFINED CMAKE_C_FLAGS_INIT)
@@ -45,10 +59,10 @@ set(CMAKE_C_COMPILE_OBJECT  "<CMAKE_C_COMPILER> <DEFINES> 
<INCLUDES> <FLAGS> -o
 # link object files to an executable
 set(CMAKE_C_LINK_EXECUTABLE "<CMAKE_C_COMPILER> <FLAGS> <OBJECTS> -o <TARGET> 
<CMAKE_C_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES>")
 
-# needs sdcc 2.7.0 + sddclib from cvs
+# needs sdcc + sdar/sdcclib
 set(CMAKE_C_CREATE_STATIC_LIBRARY
-      "\"${CMAKE_COMMAND}\" -E rm -f <TARGET>"
-      "<CMAKE_AR> -a <TARGET> <LINK_FLAGS> <OBJECTS> ")
+      "\"${CMAKE_COMMAND}\" -E remove <TARGET>"
+      "<CMAKE_AR> ${CMAKE_AR_OPTIONS} <TARGET> <LINK_FLAGS> <OBJECTS> ")
 
 # not supported by sdcc
 set(CMAKE_C_CREATE_SHARED_LIBRARY "")

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=7e86f71eff72a12e903cdd2efccf55ec3d58a106
commit 7e86f71eff72a12e903cdd2efccf55ec3d58a106
Author:     Marc Chevrier <marc.chevr...@gmail.com>
AuthorDate: Fri Nov 15 16:51:54 2019 +0100
Commit:     Marc Chevrier <marc.chevr...@gmail.com>
CommitDate: Fri Nov 15 19:40:48 2019 +0100

    cmOutputRequiredFilesCommand: Modernize memory management
    
    Also use std::string over char* when possible.

diff --git a/Source/cmOutputRequiredFilesCommand.cxx 
b/Source/cmOutputRequiredFilesCommand.cxx
index e093be019c..147f97f731 100644
--- a/Source/cmOutputRequiredFilesCommand.cxx
+++ b/Source/cmOutputRequiredFilesCommand.cxx
@@ -7,10 +7,11 @@
 #include <set>
 #include <utility>
 
+#include <cm/memory>
+
 #include "cmsys/FStream.hxx"
 #include "cmsys/RegularExpression.hxx"
 
-#include "cmAlgorithms.h"
 #include "cmExecutionStatus.h"
 #include "cmGeneratorExpression.h"
 #include "cmMakefile.h"
@@ -94,7 +95,7 @@ public:
   /**
    * Destructor.
    */
-  ~cmLBDepend() { cmDeleteAll(this->DependInformationMap); }
+  ~cmLBDepend() = default;
 
   cmLBDepend(const cmLBDepend&) = delete;
   cmLBDepend& operator=(const cmLBDepend&) = delete;
@@ -152,9 +153,9 @@ public:
    * Generate dependencies for the file given.  Returns a pointer to
    * the cmDependInformation object for the file.
    */
-  const cmDependInformation* FindDependencies(const char* file)
+  const cmDependInformation* FindDependencies(const std::string& file)
   {
-    cmDependInformation* info = this->GetDependInformation(file, nullptr);
+    cmDependInformation* info = this->GetDependInformation(file, "");
     this->GenerateDependInformation(info);
     return info;
   }
@@ -203,7 +204,7 @@ protected:
         }
 
         // Add this file and all its dependencies.
-        this->AddDependency(info, includeFile.c_str());
+        this->AddDependency(info, includeFile);
         /// add the cxx file if it exists
         std::string cxxFile = includeFile;
         std::string::size_type pos = cxxFile.rfind('.');
@@ -254,7 +255,7 @@ protected:
             }
           }
           if (found) {
-            this->AddDependency(info, cxxFile.c_str());
+            this->AddDependency(info, cxxFile);
           }
         }
       }
@@ -264,10 +265,10 @@ protected:
   /**
    * Add a dependency.  Possibly walk it for more dependencies.
    */
-  void AddDependency(cmDependInformation* info, const char* file)
+  void AddDependency(cmDependInformation* info, const std::string& file)
   {
     cmDependInformation* dependInfo =
-      this->GetDependInformation(file, info->PathOnly.c_str());
+      this->GetDependInformation(file, info->PathOnly);
     this->GenerateDependInformation(dependInfo);
     info->AddDependencies(dependInfo);
   }
@@ -313,7 +314,7 @@ protected:
         // Dependency hints have been given.  Use them to begin the
         // recursion.
         for (std::string const& file : cFile.GetDepends()) {
-          this->AddDependency(info, file.c_str());
+          this->AddDependency(info, file);
         }
 
         // Found dependency information.  We are done.
@@ -361,8 +362,8 @@ protected:
    * Get an instance of cmDependInformation corresponding to the given file
    * name.
    */
-  cmDependInformation* GetDependInformation(const char* file,
-                                            const char* extraPath)
+  cmDependInformation* GetDependInformation(const std::string& file,
+                                            const std::string& extraPath)
   {
     // Get the full path for the file so that lookup is unambiguous.
     std::string fullPath = this->FullPath(file, extraPath);
@@ -371,15 +372,16 @@ protected:
     auto result = this->DependInformationMap.find(fullPath);
     if (result != this->DependInformationMap.end()) {
       // Found an instance, return it.
-      return result->second;
+      return result->second.get();
     }
     // Didn't find an instance.  Create a new one and save it.
-    cmDependInformation* info = new cmDependInformation;
+    auto info = cm::make_unique<cmDependInformation>();
+    auto ptr = info.get();
     info->FullPath = fullPath;
     info->PathOnly = cmSystemTools::GetFilenamePath(fullPath);
     info->IncludeName = file;
-    this->DependInformationMap[fullPath] = info;
-    return info;
+    this->DependInformationMap[fullPath] = std::move(info);
+    return ptr;
   }
 
   /**
@@ -387,14 +389,9 @@ protected:
    * This uses the include directories.
    * TODO: Cache path conversions to reduce FileExists calls.
    */
-  std::string FullPath(const char* fname, const char* extraPath)
+  std::string FullPath(const std::string& fname, const std::string& extraPath)
   {
-    DirectoryToFileToPathMapType::iterator m;
-    if (extraPath) {
-      m = this->DirectoryToFileToPathMap.find(extraPath);
-    } else {
-      m = this->DirectoryToFileToPathMap.find("");
-    }
+    auto m = this->DirectoryToFileToPathMap.find(extraPath);
 
     if (m != this->DirectoryToFileToPathMap.end()) {
       FileToPathMapType& map = m->second;
@@ -406,7 +403,7 @@ protected:
 
     if (cmSystemTools::FileExists(fname, true)) {
       std::string fp = cmSystemTools::CollapseFullPath(fname);
-      this->DirectoryToFileToPathMap[extraPath ? extraPath : ""][fname] = fp;
+      this->DirectoryToFileToPathMap[extraPath][fname] = fp;
       return fp;
     }
 
@@ -418,12 +415,12 @@ protected:
       if (cmSystemTools::FileExists(path, true) &&
           !cmSystemTools::FileIsDirectory(path)) {
         std::string fp = cmSystemTools::CollapseFullPath(path);
-        this->DirectoryToFileToPathMap[extraPath ? extraPath : ""][fname] = fp;
+        this->DirectoryToFileToPathMap[extraPath][fname] = fp;
         return fp;
       }
     }
 
-    if (extraPath) {
+    if (!extraPath.empty()) {
       std::string path = extraPath;
       if (!path.empty() && path.back() != '/') {
         path = path + "/";
@@ -438,7 +435,7 @@ protected:
     }
 
     // Couldn't find the file.
-    return std::string(fname);
+    return fname;
   }
 
   cmMakefile* Makefile;
@@ -449,7 +446,8 @@ protected:
   using FileToPathMapType = std::map<std::string, std::string>;
   using DirectoryToFileToPathMapType =
     std::map<std::string, FileToPathMapType>;
-  using DependInformationMapType = std::map<std::string, cmDependInformation*>;
+  using DependInformationMapType =
+    std::map<std::string, std::unique_ptr<cmDependInformation>>;
   DependInformationMapType DependInformationMap;
   DirectoryToFileToPathMapType DirectoryToFileToPathMap;
 };
@@ -476,7 +474,7 @@ bool cmOutputRequiredFilesCommand(std::vector<std::string> 
const& args,
   md.SetMakefile(&status.GetMakefile());
   md.AddSearchPath(status.GetMakefile().GetCurrentSourceDirectory());
   // find the depends for a file
-  const cmDependInformation* info = md.FindDependencies(file.c_str());
+  const cmDependInformation* info = md.FindDependencies(file);
   if (info) {
     // write them out
     FILE* fout = cmsys::SystemTools::Fopen(outputFile, "w");

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=c5fb36a4cb8bd3272e2e0b54e3947886ad7eb778
commit c5fb36a4cb8bd3272e2e0b54e3947886ad7eb778
Author:     Jannick <thirdedit...@gmx.net>
AuthorDate: Thu Nov 7 01:13:27 2019 +0100
Commit:     Brad King <brad.k...@kitware.com>
CommitDate: Fri Nov 15 11:46:06 2019 -0500

    FindFLEX: Add policy CMP0098 to run flex in build tree

diff --git a/Help/manual/cmake-policies.7.rst b/Help/manual/cmake-policies.7.rst
index 44ea1a8fd0..eceeac7200 100644
--- a/Help/manual/cmake-policies.7.rst
+++ b/Help/manual/cmake-policies.7.rst
@@ -51,6 +51,14 @@ The :variable:`CMAKE_MINIMUM_REQUIRED_VERSION` variable may 
also be used
 to determine whether to report an error on use of deprecated macros or
 functions.
 
+Policies Introduced by CMake 3.17
+=================================
+
+.. toctree::
+   :maxdepth: 1
+
+   CMP0098: FindFLEX runs flex in CMAKE_CURRENT_BINARY_DIR when executing. 
</policy/CMP0098>
+
 Policies Introduced by CMake 3.16
 =================================
 
diff --git a/Help/policy/CMP0098.rst b/Help/policy/CMP0098.rst
new file mode 100644
index 0000000000..6d1443b764
--- /dev/null
+++ b/Help/policy/CMP0098.rst
@@ -0,0 +1,30 @@
+CMP0098
+-------
+
+:module:`FindFLEX` runs ``flex`` in directory
+:variable:`CMAKE_CURRENT_BINARY_DIR` when executing.
+
+The module provides a ``FLEX_TARGET`` macro which generates FLEX output.
+In CMake 3.16 and below the macro would generate a custom command that runs
+``flex`` in the current source directory.  CMake 3.17 and later prefer to
+run it in the build directory and use :variable:`CMAKE_CURRENT_BINARY_DIR`
+as the ``WORKING_DIRECTORY`` of its :command:`add_custom_command` invocation.
+This ensures that any implicitly generated file is written relative to the
+build tree rather than the source tree, unless the generated file is
+provided as absolute path.
+
+This policy provides compatibility for projects that have not been updated
+to expect the new behavior.
+
+The ``OLD`` behavior for this policy is for ``FLEX_TARGET`` to use
+the current source directory for the ``WORKING_DIRECTORY`` and where
+to generate implicit files. The ``NEW`` behavior of this policy is to
+use the current binary directory for the ``WORKING_DIRECTORY`` relative to
+which implicit files are generated unless provided as absolute path.
+
+This policy was introduced in CMake version 3.17.  Use the
+:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
+Unlike many policies, CMake version |release| does *not* warn
+when this policy is not set and simply uses ``OLD`` behavior.
+
+.. include:: DEPRECATED.txt
diff --git a/Help/release/dev/FindFLEX-work-dir.rst 
b/Help/release/dev/FindFLEX-work-dir.rst
new file mode 100644
index 0000000000..3569185e28
--- /dev/null
+++ b/Help/release/dev/FindFLEX-work-dir.rst
@@ -0,0 +1,6 @@
+FindFLEX-work-dir
+-----------------
+
+* The :module:`FindFLEX` module's ``FLEX_TARGET`` command now runs ``flex``
+  with :variable:`CMAKE_CURRENT_BINARY_DIR` as the working directory.
+  See policy :policy:`CMP0098`.
diff --git a/Modules/FindFLEX.cmake b/Modules/FindFLEX.cmake
index d22b7ec67a..90e5f86b41 100644
--- a/Modules/FindFLEX.cmake
+++ b/Modules/FindFLEX.cmake
@@ -142,8 +142,6 @@ if(FLEX_EXECUTABLE)
   #============================================================
   #
   macro(FLEX_TARGET Name Input Output)
-    set(FLEX_TARGET_outputs "${Output}")
-    set(FLEX_EXECUTABLE_opts "")
 
     set(FLEX_TARGET_PARAM_OPTIONS)
     set(FLEX_TARGET_PARAM_ONE_VALUE_KEYWORDS
@@ -165,31 +163,68 @@ if(FLEX_EXECUTABLE)
     if(NOT "${FLEX_TARGET_ARG_UNPARSED_ARGUMENTS}" STREQUAL "")
       message(SEND_ERROR ${FLEX_TARGET_usage})
     else()
+
+      cmake_policy(GET CMP0098 _flex_CMP0098
+          PARENT_SCOPE # undocumented, do not use outside of CMake
+        )
+      set(_flex_INPUT "${Input}")
+      if("x${_flex_CMP0098}x" STREQUAL "xNEWx")
+        set(_flex_WORKING_DIR "${CMAKE_CURRENT_BINARY_DIR}")
+        if(NOT IS_ABSOLUTE "${_flex_INPUT}")
+          set(_flex_INPUT "${CMAKE_CURRENT_SOURCE_DIR}/${_flex_INPUT}")
+        endif()
+      else()
+        set(_flex_WORKING_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
+      endif()
+      unset(_flex_CMP0098)
+
+      set(_flex_OUTPUT "${Output}")
+      if(NOT IS_ABSOLUTE ${_flex_OUTPUT})
+        set(_flex_OUTPUT "${_flex_WORKING_DIR}/${_flex_OUTPUT}")
+      endif()
+      set(_flex_TARGET_OUTPUTS "${_flex_OUTPUT}")
+
+      set(_flex_EXE_OPTS "")
       if(NOT "${FLEX_TARGET_ARG_COMPILE_FLAGS}" STREQUAL "")
-        set(FLEX_EXECUTABLE_opts "${FLEX_TARGET_ARG_COMPILE_FLAGS}")
-        separate_arguments(FLEX_EXECUTABLE_opts)
+        set(_flex_EXE_OPTS "${FLEX_TARGET_ARG_COMPILE_FLAGS}")
+        separate_arguments(_flex_EXE_OPTS)
       endif()
+
+      set(_flex_OUTPUT_HEADER "")
       if(NOT "${FLEX_TARGET_ARG_DEFINES_FILE}" STREQUAL "")
-        list(APPEND FLEX_TARGET_outputs "${FLEX_TARGET_ARG_DEFINES_FILE}")
-        list(APPEND FLEX_EXECUTABLE_opts 
--header-file=${FLEX_TARGET_ARG_DEFINES_FILE})
+        set(_flex_OUTPUT_HEADER "${FLEX_TARGET_ARG_DEFINES_FILE}")
+        if(IS_ABSOLUTE "${_flex_OUTPUT_HEADER}")
+          set(_flex_OUTPUT_HEADER_ABS "${_flex_OUTPUT_HEADER}")
+        else()
+          set(_flex_OUTPUT_HEADER_ABS 
"${_flex_WORKING_DIR}/${_flex_OUTPUT_HEADER}")
+        endif()
+        list(APPEND _flex_TARGET_OUTPUTS "${_flex_OUTPUT_HEADER_ABS}")
+        list(APPEND _flex_EXE_OPTS --header-file=${_flex_OUTPUT_HEADER_ABS})
       endif()
 
-      add_custom_command(OUTPUT ${FLEX_TARGET_outputs}
-        COMMAND ${FLEX_EXECUTABLE} ${FLEX_EXECUTABLE_opts} -o${Output} ${Input}
+      get_filename_component(_flex_EXE_NAME_WE "${FLEX_EXECUTABLE}" NAME_WE)
+      add_custom_command(OUTPUT ${_flex_TARGET_OUTPUTS}
+        COMMAND ${FLEX_EXECUTABLE} ${_flex_EXE_OPTS} -o${_flex_OUTPUT} 
${_flex_INPUT}
         VERBATIM
-        DEPENDS ${Input}
-        COMMENT "[FLEX][${Name}] Building scanner with flex ${FLEX_VERSION}"
-        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
+        DEPENDS ${_flex_INPUT}
+        COMMENT "[FLEX][${Name}] Building scanner with ${_flex_EXE_NAME_WE} 
${FLEX_VERSION}"
+        WORKING_DIRECTORY ${_flex_WORKING_DIR})
 
       set(FLEX_${Name}_DEFINED TRUE)
-      set(FLEX_${Name}_OUTPUTS ${Output})
-      set(FLEX_${Name}_INPUT ${Input})
-      set(FLEX_${Name}_COMPILE_FLAGS ${FLEX_EXECUTABLE_opts})
-      if("${FLEX_TARGET_ARG_DEFINES_FILE}" STREQUAL "")
-        set(FLEX_${Name}_OUTPUT_HEADER "")
-      else()
-        set(FLEX_${Name}_OUTPUT_HEADER ${FLEX_TARGET_ARG_DEFINES_FILE})
-      endif()
+      set(FLEX_${Name}_OUTPUTS ${_flex_TARGET_OUTPUTS})
+      set(FLEX_${Name}_INPUT ${_flex_INPUT})
+      set(FLEX_${Name}_COMPILE_FLAGS ${_flex_EXE_OPTS})
+      set(FLEX_${Name}_OUTPUT_HEADER ${_flex_OUTPUT_HEADER})
+
+      unset(_flex_EXE_NAME_WE)
+      unset(_flex_EXE_OPTS)
+      unset(_flex_INPUT)
+      unset(_flex_OUTPUT)
+      unset(_flex_OUTPUT_HEADER)
+      unset(_flex_OUTPUT_HEADER_ABS)
+      unset(_flex_TARGET_OUTPUTS)
+      unset(_flex_WORKING_DIR)
+
     endif()
   endmacro()
   #============================================================
diff --git a/Source/cmPolicies.h b/Source/cmPolicies.h
index 92c80bb4c1..da32204843 100644
--- a/Source/cmPolicies.h
+++ b/Source/cmPolicies.h
@@ -290,7 +290,10 @@ class cmMakefile;
   SELECT(POLICY, CMP0097,                                                     \
          "ExternalProject_Add with GIT_SUBMODULES \"\" initializes no "       \
          "submodules.",                                                       \
-         3, 16, 0, cmPolicies::WARN)
+         3, 16, 0, cmPolicies::WARN)                                          \
+  SELECT(POLICY, CMP0098,                                                     \
+         "FindFLEX runs flex in CMAKE_CURRENT_BINARY_DIR when executing.", 3, \
+         17, 0, cmPolicies::WARN)
 
 #define CM_SELECT_ID(F, A1, A2, A3, A4, A5, A6) F(A1)
 #define CM_FOR_EACH_POLICY_ID(POLICY)                                         \

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

Summary of changes:
 Help/manual/cmake-policies.7.rst                   |  8 +++
 Help/manual/cmake-properties.7.rst                 |  1 +
 Help/manual/cmake-variables.7.rst                  |  1 +
 Help/policy/CMP0098.rst                            | 30 +++++++++
 Help/prop_tgt/XCODE_SCHEME_WORKING_DIRECTORY.rst   | 13 ++++
 Help/release/dev/FindFLEX-work-dir.rst             |  6 ++
 Help/release/dev/sdcc-new-librarian.rst            |  6 ++
 Help/release/dev/xcode-scheme-workdir.rst          |  7 +++
 ...st => CMAKE_XCODE_SCHEME_WORKING_DIRECTORY.rst} |  8 +--
 Modules/FindFLEX.cmake                             | 73 ++++++++++++++++------
 Modules/Platform/Generic-SDCC-C.cmake              | 34 +++++++---
 Source/cmExtraCodeLiteGenerator.cxx                |  5 +-
 Source/cmGlobalXCodeGenerator.cxx                  |  2 +-
 Source/cmOutputRequiredFilesCommand.cxx            | 54 ++++++++--------
 Source/cmPolicies.h                                |  5 +-
 Source/cmTarget.cxx                                |  1 +
 Source/cmXCodeScheme.cxx                           | 28 +++++++--
 Source/cmXCodeScheme.h                             |  6 +-
 .../XcodeProject/XcodeSchemaProperty-check.cmake   |  1 +
 .../XcodeProject/XcodeSchemaProperty.cmake         |  1 +
 20 files changed, 221 insertions(+), 69 deletions(-)
 create mode 100644 Help/policy/CMP0098.rst
 create mode 100644 Help/prop_tgt/XCODE_SCHEME_WORKING_DIRECTORY.rst
 create mode 100644 Help/release/dev/FindFLEX-work-dir.rst
 create mode 100644 Help/release/dev/sdcc-new-librarian.rst
 create mode 100644 Help/release/dev/xcode-scheme-workdir.rst
 copy Help/variable/{CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER.rst => 
CMAKE_XCODE_SCHEME_WORKING_DIRECTORY.rst} (55%)


hooks/post-receive
-- 
CMake
_______________________________________________
Cmake-commits mailing list
Cmake-commits@cmake.org
https://cmake.org/mailman/listinfo/cmake-commits

Reply via email to