diff options
author | Brad King <brad.king@kitware.com> | 2012-02-13 15:02:58 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2012-02-16 15:13:50 (GMT) |
commit | 4fbdce2b79b28566ae2c6708c99af5e0e8e0177b (patch) | |
tree | 8612c2de5c4d0658ed061d67a20b1134771fe68a | |
parent | 16b1a6e4e07b223c7ead20cd40346fc327e90569 (diff) | |
download | CMake-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.cxx | 13 |
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) { |