1
0
Эх сурвалжийг харах

find_program: Revert "Find programs that are executable but not readable"

The fix in commit 86e6349ef7 (find_program: Find programs that are
executable but not readable, 2020-04-04, v3.18.0-rc1~372^2) can break
existing projects that were (likely accidentally) relying on the
old behavior to find files that are readable but not executable.
Revert the fix for now.  We can re-introduce it with a policy later.

Instead of reverting the test case, update it to cover the old behavior.
That can serve as a reference for testing the policy when introduced.

Fixes: #20814
Issue: #10468
Brad King 5 жил өмнө
parent
commit
cc02ced530

+ 1 - 1
Source/cmFindProgramCommand.cxx

@@ -85,7 +85,7 @@ struct cmFindProgramHelper
       this->TestNameExt = cmStrCat(name, ext);
       this->TestPath =
         cmSystemTools::CollapseFullPath(this->TestNameExt, path);
-      bool exists = cmSystemTools::FileIsExecutable(this->TestPath);
+      bool exists = cmSystemTools::FileExists(this->TestPath, true);
       exists ? this->DebugSearches.FoundAt(this->TestPath)
              : this->DebugSearches.FailedAt(this->TestPath);
       if (exists) {

+ 1 - 1
Tests/RunCMake/find_program/ExeNoRead-stdout.txt

@@ -1 +1 @@
--- ExeNoRead_EXECUTABLE='.*/Tests/RunCMake/find_program/ExeNoRead-build/ExeNoRead'
+-- ExeNoRead_EXECUTABLE='ExeNoRead_EXECUTABLE-NOTFOUND'

+ 9 - 3
Tests/RunCMake/find_program/RunCMakeTest.cmake

@@ -9,8 +9,14 @@ run_cmake(Required)
 if(CMAKE_SYSTEM_NAME MATCHES "^(Windows|CYGWIN)$")
   run_cmake(WindowsCom)
   run_cmake(WindowsExe)
-endif()
+else()
+  # test non readable file only if not root
+  execute_process(
+    COMMAND id -u $ENV{USER}
+    OUTPUT_VARIABLE uid
+    OUTPUT_STRIP_TRAILING_WHITESPACE)
 
-if(UNIX)
-  run_cmake(ExeNoRead)
+  if(NOT "${uid}" STREQUAL "0")
+    run_cmake(ExeNoRead)
+  endif()
 endif()