mirror of
https://github.com/Kitware/CMake.git
synced 2026-05-04 13:19:51 -05:00
find_library: Check that library files are readable
Refactoring in commit 6b85166920 (ENH: Refactor find_library search
logic, 2008-09-22, v2.8.0~1665) dropped a call to `FileExists` on the
path under the assumption that the presence of a file in a directory
listing means it exists. However, dropping that also dropped a check
that verifies the file is readable. Restore the `FileExists` call to
ensure that we only find readable libraries.
This commit is contained in:
@@ -433,7 +433,8 @@ bool cmFindLibraryHelper::CheckDirectoryForName(std::string const& path,
|
|||||||
#endif
|
#endif
|
||||||
if (name.Regex.find(testName)) {
|
if (name.Regex.find(testName)) {
|
||||||
this->TestPath = cmStrCat(path, origName);
|
this->TestPath = cmStrCat(path, origName);
|
||||||
if (!cmSystemTools::FileIsDirectory(this->TestPath)) {
|
// Make sure the path is readable and is not a directory.
|
||||||
|
if (cmSystemTools::FileExists(this->TestPath, true)) {
|
||||||
this->DebugLibraryFound(name.Raw, dir);
|
this->DebugLibraryFound(name.Raw, dir);
|
||||||
|
|
||||||
// This is a matching file. Check if it is better than the
|
// This is a matching file. Check if it is better than the
|
||||||
|
|||||||
@@ -317,7 +317,7 @@ add_RunCMake_test(ctest_upload)
|
|||||||
add_RunCMake_test(ctest_fixtures)
|
add_RunCMake_test(ctest_fixtures)
|
||||||
add_RunCMake_test(file)
|
add_RunCMake_test(file)
|
||||||
add_RunCMake_test(find_file)
|
add_RunCMake_test(find_file)
|
||||||
add_RunCMake_test(find_library)
|
add_RunCMake_test(find_library -DCYGWIN=${CYGWIN})
|
||||||
add_RunCMake_test(find_package)
|
add_RunCMake_test(find_package)
|
||||||
add_RunCMake_test(find_path)
|
add_RunCMake_test(find_path)
|
||||||
add_RunCMake_test(find_program -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME})
|
add_RunCMake_test(find_program -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME})
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
^SYMLINK_LIBRARY='SYMLINK_LIBRARY-NOTFOUND'
|
||||||
|
SYMLINK_LIBRARY='[^']*/Tests/RunCMake/find_library/LibSymLink-build/lib/libsymlink.a'$
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
list(APPEND CMAKE_FIND_LIBRARY_PREFIXES lib)
|
||||||
|
list(APPEND CMAKE_FIND_LIBRARY_SUFFIXES .a)
|
||||||
|
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib)
|
||||||
|
file(CREATE_LINK "libsymlinked.a" "${CMAKE_CURRENT_BINARY_DIR}/lib/libsymlink.a" SYMBOLIC)
|
||||||
|
find_library(SYMLINK_LIBRARY
|
||||||
|
NAMES symlink
|
||||||
|
PATHS ${CMAKE_CURRENT_BINARY_DIR}/lib
|
||||||
|
NO_DEFAULT_PATH
|
||||||
|
)
|
||||||
|
message("SYMLINK_LIBRARY='${SYMLINK_LIBRARY}'")
|
||||||
|
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/lib/libsymlinked.a" "symlinked")
|
||||||
|
find_library(SYMLINK_LIBRARY
|
||||||
|
NAMES symlink
|
||||||
|
PATHS ${CMAKE_CURRENT_BINARY_DIR}/lib
|
||||||
|
NO_DEFAULT_PATH
|
||||||
|
)
|
||||||
|
message("SYMLINK_LIBRARY='${SYMLINK_LIBRARY}'")
|
||||||
@@ -3,8 +3,9 @@ include(RunCMake)
|
|||||||
run_cmake(Created)
|
run_cmake(Created)
|
||||||
run_cmake(FromPrefixPath)
|
run_cmake(FromPrefixPath)
|
||||||
run_cmake(FromPATHEnv)
|
run_cmake(FromPATHEnv)
|
||||||
if(CMAKE_HOST_UNIX)
|
if(UNIX AND NOT CYGWIN)
|
||||||
run_cmake(LibArchLink)
|
run_cmake(LibArchLink)
|
||||||
|
run_cmake(LibSymLink)
|
||||||
endif()
|
endif()
|
||||||
run_cmake(PrefixInPATH)
|
run_cmake(PrefixInPATH)
|
||||||
run_cmake(Required)
|
run_cmake(Required)
|
||||||
|
|||||||
Reference in New Issue
Block a user