diff options
author | Raphael Gozzo <raphael.rg91@gmail.com> | 2021-12-06 18:03:10 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2021-12-06 21:47:29 (GMT) |
commit | d4ba945c48a3af674bdd95157d18d6236f7c2472 (patch) | |
tree | a43dd3d0f76e089e28d911fc2aa74be053d0f98c /Modules | |
parent | 60ebe5f3da67151f79e068f193ff309f7a358d41 (diff) | |
download | CMake-d4ba945c48a3af674bdd95157d18d6236f7c2472.zip CMake-d4ba945c48a3af674bdd95157d18d6236f7c2472.tar.gz CMake-d4ba945c48a3af674bdd95157d18d6236f7c2472.tar.bz2 |
CMakeParseLibraryArchitecture: Fix parsing /lib/<arch> implicit object path
The current regular expression is able to match `/usr/lib/<arch>`,
`/usr/usr/lib/<arch>`, `/usr/usr/usr/lib/<arch>`, ... but not
`/lib/<arch>`.
This behavior ends up causing the detected architecture to
be x86_64-pc-linux-gnu when the Clang compiler is installed on
a "non-system" location (like /opt/llvm-13) which, in turn, makes
almost every 'find_library()' fail because the correct
architecture is x86_64-linux-gnu.
This is due to a typo in commit 764606e256 (CMakeDetermineCompilerABI:
Extract lib arch from implicit object file paths, 2021-04-05,
v3.20.1~10^2), which used `+` instead of `?`.
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/CMakeParseLibraryArchitecture.cmake | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/Modules/CMakeParseLibraryArchitecture.cmake b/Modules/CMakeParseLibraryArchitecture.cmake index 6fb9c6b..f7a4b29 100644 --- a/Modules/CMakeParseLibraryArchitecture.cmake +++ b/Modules/CMakeParseLibraryArchitecture.cmake @@ -23,7 +23,7 @@ function(cmake_parse_library_architecture lang implicit_dirs implicit_objs outpu foreach(obj IN LISTS implicit_objs) get_filename_component(dir "${obj}" DIRECTORY) - if("${dir}" MATCHES "(/usr)+/lib/${CMAKE_LIBRARY_ARCHITECTURE_REGEX}$") + if("${dir}" MATCHES "(/usr)?/lib/${CMAKE_LIBRARY_ARCHITECTURE_REGEX}$") get_filename_component(arch "${dir}" NAME) set(library_arch "${arch}") break() |