[Cmake-commits] CMake branch, next, updated. v2.8.10.2-2111-gb1caac7
Brad King
brad.king at kitware.com
Tue Feb 12 13:56:42 EST 2013
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 b1caac79288bae0226dbb750f0768dfa26ea90a1 (commit)
via 2dc17f88dd2de900154f153f521b803ec9b7c377 (commit)
from a5fc93d6e49fea7f6651885a6ec42ab78ca7ea8c (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=b1caac79288bae0226dbb750f0768dfa26ea90a1
commit b1caac79288bae0226dbb750f0768dfa26ea90a1
Merge: a5fc93d 2dc17f8
Author: Brad King <brad.king at kitware.com>
AuthorDate: Tue Feb 12 13:56:35 2013 -0500
Commit: CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Tue Feb 12 13:56:35 2013 -0500
Merge topic 'vs-atomic-generated-stamp' into next
2dc17f8 VS: Replace generation timestamp file atomically
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=2dc17f88dd2de900154f153f521b803ec9b7c377
commit 2dc17f88dd2de900154f153f521b803ec9b7c377
Author: Brad King <brad.king at kitware.com>
AuthorDate: Tue Feb 12 10:46:22 2013 -0500
Commit: Brad King <brad.king at kitware.com>
CommitDate: Tue Feb 12 13:55:53 2013 -0500
VS: Replace generation timestamp file atomically
Since commit 34c882a9 (Allow VS 7 project Rebuild and Solution Rebuild to
work, 2007-11-10) we use a "CMakeFiles/generated.stamp" and some
associated files in the build tree to avoid re-running CMake when the
inputs have not changed but VS has cleaned the outputs it knows about.
When we do not really need to re-run we restore the generated.stamp file.
The non-re-run case can happen in multiple targets in parallel in VS >= 10
so we must restore the file atomically to avoid races. Write the stamp
file to a random temporary name and then atomically rename it to the real
stamp file.
diff --git a/Source/cmake.cxx b/Source/cmake.cxx
index d57e981..3071aeb 100644
--- a/Source/cmake.cxx
+++ b/Source/cmake.cxx
@@ -4033,10 +4033,18 @@ static bool cmakeCheckStampFile(const char* stampName)
}
// The build system is up to date. The stamp file has been removed
- // by the VS IDE due to a "rebuild" request. Just restore it.
- std::ofstream stamp(stampName);
+ // by the VS IDE due to a "rebuild" request. Restore it atomically.
+ cmOStringStream stampTempStream;
+ stampTempStream << stampName << ".tmp" << cmSystemTools::RandomSeed();
+ std::string stampTempString = stampTempStream.str();
+ const char* stampTemp = stampTempString.c_str();
+ {
+ // TODO: Teach cmGeneratedFileStream to use a random temp file (with
+ // multiple tries in unlikely case of conflict) and use that here.
+ std::ofstream stamp(stampTemp);
stamp << "# CMake generation timestamp file this directory.\n";
- if(stamp)
+ }
+ if(cmSystemTools::RenameFile(stampTemp, stampName))
{
// Notify the user why CMake is not re-running. It is safe to
// just print to stdout here because this code is only reachable
@@ -4047,6 +4055,7 @@ static bool cmakeCheckStampFile(const char* stampName)
}
else
{
+ cmSystemTools::RemoveFile(stampTemp);
cmSystemTools::Error("Cannot restore timestamp ", stampName);
return false;
}
-----------------------------------------------------------------------
Summary of changes:
Source/cmake.cxx | 15 ++++++++++++---
1 files changed, 12 insertions(+), 3 deletions(-)
hooks/post-receive
--
CMake
More information about the Cmake-commits
mailing list