summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2012-02-13 15:02:58 (GMT)
committerBrad King <brad.king@kitware.com>2012-02-16 15:13:50 (GMT)
commit4fbdce2b79b28566ae2c6708c99af5e0e8e0177b (patch)
tree8612c2de5c4d0658ed061d67a20b1134771fe68a
parent16b1a6e4e07b223c7ead20cd40346fc327e90569 (diff)
downloadCMake-4fbdce2b79b28566ae2c6708c99af5e0e8e0177b.zip
CMake-4fbdce2b79b28566ae2c6708c99af5e0e8e0177b.tar.gz
CMake-4fbdce2b79b28566ae2c6708c99af5e0e8e0177b.tar.bz2
try_compile: Use random executable file name (#12957)
Append a random number to the "cmTryCompileExec" file name to avoid rapid creation and deletion of the same executable file name. Some filesystems lock executable files when they are created and cause subsequent try-compile tests to fail arbitrarily. Use a different name each time to avoid conflict.
-rw-r--r--Source/cmCoreTryCompile.cxx13
1 files changed, 9 insertions, 4 deletions
diff --git a/Source/cmCoreTryCompile.cxx b/Source/cmCoreTryCompile.cxx
index dca2fb3..7d84ba6 100644
--- a/Source/cmCoreTryCompile.cxx
+++ b/Source/cmCoreTryCompile.cxx
@@ -26,6 +26,7 @@ int cmCoreTryCompile::TryCompileCode(std::vector<std::string> const& argv)
const char* sourceDirectory = argv[2].c_str();
const char* projectName = 0;
const char* targetName = 0;
+ char targetNameBuf[64];
int extraArgs = 0;
// look for CMAKE_FLAGS and store them
@@ -281,16 +282,20 @@ int cmCoreTryCompile::TryCompileCode(std::vector<std::string> const& argv)
cmakeFlags.push_back(flag);
}
+ /* Use a random file name to avoid rapid creation and deletion
+ of the same executable name (some filesystems fail on that). */
+ sprintf(targetNameBuf, "cmTryCompileExec%u",
+ cmSystemTools::RandomSeed());
+ targetName = targetNameBuf;
+
/* Put the executable at a known location (for COPY_FILE). */
fprintf(fout, "SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY \"%s\")\n",
this->BinaryDirectory.c_str());
/* Create the actual executable. */
- fprintf(fout, "ADD_EXECUTABLE(cmTryCompileExec \"%s\")\n",source.c_str());
- fprintf(fout,
- "TARGET_LINK_LIBRARIES(cmTryCompileExec ${LINK_LIBRARIES})\n");
+ fprintf(fout, "ADD_EXECUTABLE(%s \"%s\")\n", targetName, source.c_str());
+ fprintf(fout, "TARGET_LINK_LIBRARIES(%s ${LINK_LIBRARIES})\n",targetName);
fclose(fout);
projectName = "CMAKE_TRY_COMPILE";
- targetName = "cmTryCompileExec";
// if the source is not in CMakeTmp
if(source.find("CMakeTmp") == source.npos)
{