Bläddra i källkod

Merge topic 'cmcoretrycompile_cleanup_symlinks'

a024d614ca cmCoreTryCompile::CleanupFiles now removes symlinks instead of their contents.

Acked-by: Kitware Robot <[email protected]>
Merge-request: !4158
Kyle Edwards 6 år sedan
förälder
incheckning
e8776d6e3a

+ 3 - 1
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 {

+ 21 - 0
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}")

+ 4 - 0
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()