summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKyle Edwards <kyle.edwards@kitware.com>2019-12-27 15:52:28 (GMT)
committerKitware Robot <kwrobot@kitware.com>2019-12-27 15:52:36 (GMT)
commite8776d6e3ad2575d647d4b53dab65100c05a547e (patch)
tree0728892edeba50ae71a334101298ed296b600a95
parentc63bf5a3e557e79a8bc39627e952ed5720623c1f (diff)
parenta024d614ca60080e71cdca6c56fed44f9a9e64a3 (diff)
downloadCMake-e8776d6e3ad2575d647d4b53dab65100c05a547e.zip
CMake-e8776d6e3ad2575d647d4b53dab65100c05a547e.tar.gz
CMake-e8776d6e3ad2575d647d4b53dab65100c05a547e.tar.bz2
Merge topic 'cmcoretrycompile_cleanup_symlinks'
a024d614ca cmCoreTryCompile::CleanupFiles now removes symlinks instead of their contents. Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !4158
-rw-r--r--Source/cmCoreTryCompile.cxx4
-rw-r--r--Tests/RunCMake/try_compile/CleanupNoFollowSymlink.cmake21
-rw-r--r--Tests/RunCMake/try_compile/RunCMakeTest.cmake4
3 files changed, 28 insertions, 1 deletions
diff --git a/Source/cmCoreTryCompile.cxx b/Source/cmCoreTryCompile.cxx
index 4715cfa..da04396 100644
--- a/Source/cmCoreTryCompile.cxx
+++ b/Source/cmCoreTryCompile.cxx
@@ -1045,7 +1045,9 @@ void cmCoreTryCompile::CleanupFiles(std::string const& binDir)
if (deletedFiles.insert(fileName).second) {
std::string const fullPath =
std::string(binDir).append("/").append(fileName);
- if (cmSystemTools::FileIsDirectory(fullPath)) {
+ if (cmSystemTools::FileIsSymlink(fullPath)) {
+ cmSystemTools::RemoveFile(fullPath);
+ } else if (cmSystemTools::FileIsDirectory(fullPath)) {
this->CleanupFiles(fullPath);
cmSystemTools::RemoveADirectory(fullPath);
} else {
diff --git a/Tests/RunCMake/try_compile/CleanupNoFollowSymlink.cmake b/Tests/RunCMake/try_compile/CleanupNoFollowSymlink.cmake
new file mode 100644
index 0000000..dea0f61
--- /dev/null
+++ b/Tests/RunCMake/try_compile/CleanupNoFollowSymlink.cmake
@@ -0,0 +1,21 @@
+enable_language(C)
+
+set(out "${CMAKE_CURRENT_BINARY_DIR}/folder")
+set(link_folder "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/CMakeTmp")
+set(link_dir "${link_folder}/link_dir")
+file(MAKE_DIRECTORY "${out}")
+file(MAKE_DIRECTORY "${link_folder}")
+file(WRITE ${out}/empty_file "")
+file(CREATE_LINK ${out} ${link_dir} SYMBOLIC)
+
+try_compile(res ${CMAKE_CURRENT_BINARY_DIR}
+ SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src.c)
+
+if(EXISTS ${link_dir})
+ message(FATAL_ERROR "did not remove ${link_dir}")
+endif()
+if(NOT EXISTS ${out})
+ message(FATAL_ERROR "should not have removed ${out}/dir")
+endif()
+
+file(REMOVE_RECURSE "${out}")
diff --git a/Tests/RunCMake/try_compile/RunCMakeTest.cmake b/Tests/RunCMake/try_compile/RunCMakeTest.cmake
index e838b2d..bee9e5b 100644
--- a/Tests/RunCMake/try_compile/RunCMakeTest.cmake
+++ b/Tests/RunCMake/try_compile/RunCMakeTest.cmake
@@ -94,3 +94,7 @@ if(RunCMake_GENERATOR MATCHES "Make|Ninja")
unset(RunCMake_TEST_BINARY_DIR)
unset(RunCMake_TEST_NO_CLEAN)
endif()
+
+if(UNIX)
+ run_cmake(CleanupNoFollowSymlink)
+endif()