[Cmake-commits] CMake branch, master, updated. v3.15.3-993-g95d4a2d

Kitware Robot kwrobot at kitware.com
Tue Sep 10 11:09:07 EDT 2019


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  95d4a2d05562c5f0a4113527d31dadef4d7756bd (commit)
       via  054d626c9cca0facb372ba740b8a797d463141a3 (commit)
       via  5b96fd5b81bde4655e471a31bf0fc579c1d10136 (commit)
       via  5eaf1e1be289245267263536f5464e40d2a677c0 (commit)
       via  75692393628d757a3dadb090179e167cd9539e2f (commit)
      from  bbf48c494ad28d1c8ac5aa6e4cecb35c2cbf1b84 (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=95d4a2d05562c5f0a4113527d31dadef4d7756bd
commit 95d4a2d05562c5f0a4113527d31dadef4d7756bd
Merge: 054d626 7569239
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Tue Sep 10 14:59:21 2019 +0000
Commit:     Kitware Robot <kwrobot at kitware.com>
CommitDate: Tue Sep 10 10:59:39 2019 -0400

    Merge topic 'move-setting-GENERATE-upfront'
    
    7569239362 cmMakefile: set GENERATED property of outputs upfront
    
    Acked-by: Kitware Robot <kwrobot at kitware.com>
    Merge-request: !3789


https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=054d626c9cca0facb372ba740b8a797d463141a3
commit 054d626c9cca0facb372ba740b8a797d463141a3
Merge: bbf48c4 5b96fd5
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Tue Sep 10 14:58:45 2019 +0000
Commit:     Kitware Robot <kwrobot at kitware.com>
CommitDate: Tue Sep 10 10:58:53 2019 -0400

    Merge topic 'MoveIfDifferent'
    
    5b96fd5b81 use cmSystemTools::MoveFileIfDifferent()
    5eaf1e1be2 cmSystemTools: introduce MoveFileIfDifferent()
    
    Acked-by: Kitware Robot <kwrobot at kitware.com>
    Merge-request: !3794


https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=5b96fd5b81bde4655e471a31bf0fc579c1d10136
commit 5b96fd5b81bde4655e471a31bf0fc579c1d10136
Author:     Rolf Eike Beer <eb at emlix.com>
AuthorDate: Mon Sep 9 10:34:08 2019 +0200
Commit:     Rolf Eike Beer <eb at emlix.com>
CommitDate: Mon Sep 9 10:34:08 2019 +0200

    use cmSystemTools::MoveFileIfDifferent()
    
    This is better than doing CopyFileIfDifferent() followed by RemoveFile() in
    two ways:
    
     - it is more efficient, as it avoids disk I/O for the data, even if the
       files here are usually small
     - it is atomic, so an abort during the copy will not leave a destination file
       with partial data behind

diff --git a/Source/cmGeneratorTarget.cxx b/Source/cmGeneratorTarget.cxx
index b4706a3..f1c48cc 100644
--- a/Source/cmGeneratorTarget.cxx
+++ b/Source/cmGeneratorTarget.cxx
@@ -3417,8 +3417,7 @@ std::string cmGeneratorTarget::GetPchHeader(const std::string& config,
         file << pchEpilogue << "\n";
       }
     }
-    cmSystemTools::CopyFileIfDifferent(filename_tmp, filename);
-    cmSystemTools::RemoveFile(filename_tmp);
+    cmSystemTools::MoveFileIfDifferent(filename_tmp, filename);
   }
   return inserted.first->second;
 }
@@ -3451,8 +3450,7 @@ std::string cmGeneratorTarget::GetPchSource(const std::string& config,
       cmGeneratedFileStream file(filename_tmp);
       file << "/* generated by CMake */\n";
     }
-    cmSystemTools::CopyFileIfDifferent(filename_tmp, filename);
-    cmSystemTools::RemoveFile(filename_tmp);
+    cmSystemTools::MoveFileIfDifferent(filename_tmp, filename);
   }
   return inserted.first->second;
 }
diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx
index 9152e94..3d8c3fb 100644
--- a/Source/cmLocalGenerator.cxx
+++ b/Source/cmLocalGenerator.cxx
@@ -2275,8 +2275,7 @@ void cmLocalGenerator::AddUnityBuild(cmGeneratorTarget* target,
           }
         }
       }
-      cmSystemTools::CopyFileIfDifferent(filename_tmp, filename);
-      cmSystemTools::RemoveFile(filename_tmp);
+      cmSystemTools::MoveFileIfDifferent(filename_tmp, filename);
 
       target->AddSource(filename, true);
 
diff --git a/Source/cmUseMangledMesaCommand.cxx b/Source/cmUseMangledMesaCommand.cxx
index cfc00e8..1fd386b 100644
--- a/Source/cmUseMangledMesaCommand.cxx
+++ b/Source/cmUseMangledMesaCommand.cxx
@@ -98,7 +98,6 @@ void CopyAndFullPathMesaHeader(const std::string& source,
   // close the files before attempting to copy
   fin.close();
   fout.close();
-  cmSystemTools::CopyFileIfDifferent(tempOutputFile, outFile);
-  cmSystemTools::RemoveFile(tempOutputFile);
+  cmSystemTools::MoveFileIfDifferent(tempOutputFile, outFile);
 }
 }

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=5eaf1e1be289245267263536f5464e40d2a677c0
commit 5eaf1e1be289245267263536f5464e40d2a677c0
Author:     Rolf Eike Beer <eb at emlix.com>
AuthorDate: Mon Sep 9 09:09:48 2019 +0200
Commit:     Rolf Eike Beer <eb at emlix.com>
CommitDate: Mon Sep 9 10:30:25 2019 +0200

    cmSystemTools: introduce MoveFileIfDifferent()

diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx
index b7287d9..074faa5 100644
--- a/Source/cmSystemTools.cxx
+++ b/Source/cmSystemTools.cxx
@@ -855,6 +855,18 @@ bool cmSystemTools::RenameFile(const std::string& oldname,
 #endif
 }
 
+void cmSystemTools::MoveFileIfDifferent(const std::string& source,
+                                        const std::string& destination)
+{
+  if (FilesDiffer(source, destination)) {
+    if (RenameFile(source, destination)) {
+      return;
+    }
+    CopyFileAlways(source, destination);
+  }
+  RemoveFile(source);
+}
+
 std::string cmSystemTools::ComputeFileHash(const std::string& source,
                                            cmCryptoHash::Algo algo)
 {
diff --git a/Source/cmSystemTools.h b/Source/cmSystemTools.h
index 863db3f..8ca4939 100644
--- a/Source/cmSystemTools.h
+++ b/Source/cmSystemTools.h
@@ -131,6 +131,10 @@ public:
   static bool RenameFile(const std::string& oldname,
                          const std::string& newname);
 
+  //! Rename a file if contents are different, delete the source otherwise
+  static void MoveFileIfDifferent(const std::string& source,
+                                  const std::string& destination);
+
   //! Compute the hash of a file
   static std::string ComputeFileHash(const std::string& source,
                                      cmCryptoHash::Algo algo);

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=75692393628d757a3dadb090179e167cd9539e2f
commit 75692393628d757a3dadb090179e167cd9539e2f
Author:     Daniel Eiband <daniel.eiband at brainlab.com>
AuthorDate: Fri Sep 6 19:17:37 2019 +0200
Commit:     Daniel Eiband <daniel.eiband at brainlab.com>
CommitDate: Fri Sep 6 22:22:22 2019 +0200

    cmMakefile: set GENERATED property of outputs upfront
    
    Setting the GENERATED property of outputs upfront is a precondition for delayed
    custom command creation (generator expressions in outputs).
    
    Issue: 12877

diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx
index 411add3..d729451 100644
--- a/Source/cmMakefile.cxx
+++ b/Source/cmMakefile.cxx
@@ -860,7 +860,7 @@ void cmMakefile::AddCustomCommandToTarget(
         e << "No TARGET '" << target
           << "' has been created in this directory.";
       }
-      IssueMessage(messageType, e.str());
+      this->IssueMessage(messageType, e.str());
     }
 
     return;
@@ -886,11 +886,7 @@ void cmMakefile::AddCustomCommandToTarget(
   }
 
   // Always create the byproduct sources and mark them generated.
-  for (std::string const& o : byproducts) {
-    if (cmSourceFile* out = this->GetOrCreateSource(o, true)) {
-      out->SetProperty("GENERATED", "1");
-    }
-  }
+  this->CreateGeneratedSources(byproducts);
 
   // Add the command to the appropriate build step for the target.
   std::vector<std::string> no_output;
@@ -940,6 +936,10 @@ cmSourceFile* cmMakefile::AddCustomCommandToOutput(
     }
   }
 
+  // Always create the output sources and mark them generated.
+  this->CreateGeneratedSources(outputs, cmSourceFileLocationKind::Known);
+  this->CreateGeneratedSources(byproducts, cmSourceFileLocationKind::Known);
+
   // Choose a source file on which to store the custom command.
   cmSourceFile* file = nullptr;
   if (!commandLines.empty() && !main_dependency.empty()) {
@@ -987,20 +987,6 @@ cmSourceFile* cmMakefile::AddCustomCommandToOutput(
     file->SetProperty("__CMAKE_RULE", "1");
   }
 
-  // Always create the output sources and mark them generated.
-  for (std::string const& o : outputs) {
-    if (cmSourceFile* out =
-          this->GetOrCreateSource(o, true, cmSourceFileLocationKind::Known)) {
-      out->SetProperty("GENERATED", "1");
-    }
-  }
-  for (std::string const& o : byproducts) {
-    if (cmSourceFile* out =
-          this->GetOrCreateSource(o, true, cmSourceFileLocationKind::Known)) {
-      out->SetProperty("GENERATED", "1");
-    }
-  }
-
   // Attach the custom command to the file.
   if (file) {
     // Construct a complete list of dependencies.
@@ -1180,6 +1166,7 @@ cmTarget* cmMakefile::AddUtilityCommand(
   if (excludeFromAll || this->GetPropertyAsBool("EXCLUDE_FROM_ALL")) {
     target->SetProperty("EXCLUDE_FROM_ALL", "TRUE");
   }
+
   if (!comment) {
     // Use an empty comment to avoid generation of default comment.
     comment = "";
@@ -1187,6 +1174,9 @@ cmTarget* cmMakefile::AddUtilityCommand(
 
   // Store the custom command in the target.
   if (!commandLines.empty() || !depends.empty()) {
+    // Always create the byproduct sources and mark them generated.
+    this->CreateGeneratedSources(byproducts, cmSourceFileLocationKind::Known);
+
     std::string force =
       cmStrCat(this->GetCurrentBinaryDirectory(), "/CMakeFiles/", utilityName);
     std::vector<std::string> forced;
@@ -1205,14 +1195,6 @@ cmTarget* cmMakefile::AddUtilityCommand(
     } else {
       cmSystemTools::Error("Could not get source file entry for " + force);
     }
-
-    // Always create the byproduct sources and mark them generated.
-    for (std::string const& byproduct : byproducts) {
-      if (cmSourceFile* out = this->GetOrCreateSource(
-            byproduct, true, cmSourceFileLocationKind::Known)) {
-        out->SetProperty("GENERATED", "1");
-      }
-    }
   }
   return target;
 }
@@ -3325,6 +3307,16 @@ cmSourceFile* cmMakefile::GetOrCreateSource(const std::string& sourceName,
   return this->CreateSource(sourceName, generated, kind);
 }
 
+void cmMakefile::CreateGeneratedSources(
+  const std::vector<std::string>& outputs, cmSourceFileLocationKind kind)
+{
+  for (std::string const& output : outputs) {
+    if (cmSourceFile* out = this->GetOrCreateSource(output, true, kind)) {
+      out->SetProperty("GENERATED", "1");
+    }
+  }
+}
+
 void cmMakefile::AddTargetObject(std::string const& tgtName,
                                  std::string const& objFile)
 {
diff --git a/Source/cmMakefile.h b/Source/cmMakefile.h
index 09f53c9..52464d6 100644
--- a/Source/cmMakefile.h
+++ b/Source/cmMakefile.h
@@ -1030,6 +1030,11 @@ private:
                                          bool escapeQuotes, bool noEscapes,
                                          bool atOnly, const char* filename,
                                          long line, bool replaceAt) const;
+
+  void CreateGeneratedSources(
+    const std::vector<std::string>& outputs,
+    cmSourceFileLocationKind kind = cmSourceFileLocationKind::Ambiguous);
+
   /**
    * Old version of GetSourceFileWithOutput(const std::string&) kept for
    * backward-compatibility. It implements a linear search and support

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

Summary of changes:
 Source/cmGeneratorTarget.cxx       |  6 ++---
 Source/cmLocalGenerator.cxx        |  3 +--
 Source/cmMakefile.cxx              | 48 ++++++++++++++++----------------------
 Source/cmMakefile.h                |  5 ++++
 Source/cmSystemTools.cxx           | 12 ++++++++++
 Source/cmSystemTools.h             |  4 ++++
 Source/cmUseMangledMesaCommand.cxx |  3 +--
 7 files changed, 45 insertions(+), 36 deletions(-)


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list