diff options
author | Brad King <brad.king@kitware.com> | 2020-04-08 12:48:40 (GMT) |
---|---|---|
committer | Kitware Robot <kwrobot@kitware.com> | 2020-04-08 12:48:56 (GMT) |
commit | d5e44d7a38b9b592f69a53f5322f2ad159086907 (patch) | |
tree | 188bf4e50adcd3a29ad7e44d2eb58cb497b38c60 | |
parent | 12cdb3692dbf33eb61bd42f7b1b01fa5d6a7b474 (diff) | |
parent | ff2e597ba23227e61c7d33a1168a5b5b9c858606 (diff) | |
download | CMake-d5e44d7a38b9b592f69a53f5322f2ad159086907.zip CMake-d5e44d7a38b9b592f69a53f5322f2ad159086907.tar.gz CMake-d5e44d7a38b9b592f69a53f5322f2ad159086907.tar.bz2 |
Merge topic 'update-kwsys'
ff2e597ba2 Merge branch 'upstream-KWSys' into update-kwsys
c5635588ad KWSys 2020-04-07 (caff9c3b)
2cc7baa1bc Tests: Fix get_filename_component PROGRAM test to use an executable
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !4578
-rw-r--r-- | Source/kwsys/SystemTools.cxx | 19 | ||||
-rw-r--r-- | Source/kwsys/SystemTools.hxx.in | 5 | ||||
-rw-r--r-- | Tests/RunCMake/get_filename_component/KnownComponents.cmake | 8 | ||||
-rwxr-xr-x | Tests/RunCMake/get_filename_component/KnownComponents.sh | 1 |
4 files changed, 22 insertions, 11 deletions
diff --git a/Source/kwsys/SystemTools.cxx b/Source/kwsys/SystemTools.cxx index 5ae4ff8..880b2d2 100644 --- a/Source/kwsys/SystemTools.cxx +++ b/Source/kwsys/SystemTools.cxx @@ -2807,7 +2807,7 @@ std::string SystemTools::FindProgram(const std::string& name, for (std::string const& ext : extensions) { tryPath = name; tryPath += ext; - if (SystemTools::FileExists(tryPath, true)) { + if (SystemTools::FileIsExecutable(tryPath)) { return SystemTools::CollapseFullPath(tryPath); } } @@ -2815,7 +2815,7 @@ std::string SystemTools::FindProgram(const std::string& name, #endif // now try just the name - if (SystemTools::FileExists(name, true)) { + if (SystemTools::FileIsExecutable(name)) { return SystemTools::CollapseFullPath(name); } // now construct the path @@ -2845,7 +2845,7 @@ std::string SystemTools::FindProgram(const std::string& name, tryPath = p; tryPath += name; tryPath += ext; - if (SystemTools::FileExists(tryPath, true)) { + if (SystemTools::FileIsExecutable(tryPath)) { return SystemTools::CollapseFullPath(tryPath); } } @@ -2853,7 +2853,7 @@ std::string SystemTools::FindProgram(const std::string& name, // now try it without them tryPath = p; tryPath += name; - if (SystemTools::FileExists(tryPath, true)) { + if (SystemTools::FileIsExecutable(tryPath)) { return SystemTools::CollapseFullPath(tryPath); } } @@ -3008,6 +3008,11 @@ bool SystemTools::FileIsDirectory(const std::string& inName) } } +bool SystemTools::FileIsExecutable(const std::string& name) +{ + return !FileIsDirectory(name) && TestFileAccess(name, TEST_FILE_EXECUTE); +} + bool SystemTools::FileIsSymlink(const std::string& name) { #if defined(_WIN32) @@ -3172,7 +3177,7 @@ bool SystemTools::FindProgramPath(const char* argv0, std::string& pathOut, failures.push_back(self); SystemTools::ConvertToUnixSlashes(self); self = SystemTools::FindProgram(self); - if (!SystemTools::FileExists(self)) { + if (!SystemTools::FileIsExecutable(self)) { if (buildDir) { std::string intdir = "."; #ifdef CMAKE_INTDIR @@ -3187,14 +3192,14 @@ bool SystemTools::FindProgramPath(const char* argv0, std::string& pathOut, } } if (installPrefix) { - if (!SystemTools::FileExists(self)) { + if (!SystemTools::FileIsExecutable(self)) { failures.push_back(self); self = installPrefix; self += "/bin/"; self += exeName; } } - if (!SystemTools::FileExists(self)) { + if (!SystemTools::FileIsExecutable(self)) { failures.push_back(self); std::ostringstream msg; msg << "Can not find the command line program "; diff --git a/Source/kwsys/SystemTools.hxx.in b/Source/kwsys/SystemTools.hxx.in index e13d03e..cd7b728 100644 --- a/Source/kwsys/SystemTools.hxx.in +++ b/Source/kwsys/SystemTools.hxx.in @@ -677,6 +677,11 @@ public: static bool FileIsDirectory(const std::string& name); /** + * Return true if the file is an executable + */ + static bool FileIsExecutable(const std::string& name); + + /** * Return true if the file is a symlink */ static bool FileIsSymlink(const std::string& name); diff --git a/Tests/RunCMake/get_filename_component/KnownComponents.cmake b/Tests/RunCMake/get_filename_component/KnownComponents.cmake index 54b858f..c2762ad 100644 --- a/Tests/RunCMake/get_filename_component/KnownComponents.cmake +++ b/Tests/RunCMake/get_filename_component/KnownComponents.cmake @@ -85,12 +85,12 @@ check("PROGRAM with args output: args" "${test_program_args}" " arg1 arg2") get_filename_component(test_program_name " " PROGRAM) check("PROGRAM with just a space" "${test_program_name}" "") -get_filename_component(test_program_name "${CMAKE_CURRENT_LIST_FILE}" PROGRAM) -check("PROGRAM specified explicitly without quoting" "${test_program_name}" "${CMAKE_CURRENT_LIST_FILE}") +get_filename_component(test_program_name "${CMAKE_CURRENT_LIST_DIR}/KnownComponents.sh" PROGRAM) +check("PROGRAM specified explicitly without quoting" "${test_program_name}" "${CMAKE_CURRENT_LIST_DIR}/KnownComponents.sh") -get_filename_component(test_program_name "\"${CMAKE_CURRENT_LIST_FILE}\" arg1 arg2" PROGRAM +get_filename_component(test_program_name "\"${CMAKE_CURRENT_LIST_DIR}/KnownComponents.sh\" arg1 arg2" PROGRAM PROGRAM_ARGS test_program_args) -check("PROGRAM specified explicitly with arguments: name" "${test_program_name}" "${CMAKE_CURRENT_LIST_FILE}") +check("PROGRAM specified explicitly with arguments: name" "${test_program_name}" "${CMAKE_CURRENT_LIST_DIR}/KnownComponents.sh") check("PROGRAM specified explicitly with arguments: args" "${test_program_args}" " arg1 arg2") list(APPEND non_cache_vars test_program_name) diff --git a/Tests/RunCMake/get_filename_component/KnownComponents.sh b/Tests/RunCMake/get_filename_component/KnownComponents.sh new file mode 100755 index 0000000..1a24852 --- /dev/null +++ b/Tests/RunCMake/get_filename_component/KnownComponents.sh @@ -0,0 +1 @@ +#!/bin/sh |