summaryrefslogtreecommitdiff
path: root/Modules/CMakeParseLibraryArchitecture.cmake
diff options
context:
space:
mode:
authorRaphael Gozzo <raphael.rg91@gmail.com>2021-12-06 15:03:10 -0300
committerBrad King <brad.king@kitware.com>2021-12-06 16:47:29 -0500
commitd4ba945c48a3af674bdd95157d18d6236f7c2472 (patch)
treea43dd3d0f76e089e28d911fc2aa74be053d0f98c /Modules/CMakeParseLibraryArchitecture.cmake
parent60ebe5f3da67151f79e068f193ff309f7a358d41 (diff)
downloadcmake-d4ba945c48a3af674bdd95157d18d6236f7c2472.tar.gz
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/CMakeParseLibraryArchitecture.cmake')
-rw-r--r--Modules/CMakeParseLibraryArchitecture.cmake2
1 files changed, 1 insertions, 1 deletions
diff --git a/Modules/CMakeParseLibraryArchitecture.cmake b/Modules/CMakeParseLibraryArchitecture.cmake
index 6fb9c6bfce..f7a4b29c34 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()