authorgravatar for topolarity@tapscott.meCody Tapscott <topolarity@tapscott.me> 2022-07-13 10:36:25-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-07-14 22:18:10-04:00
logdd70336f3ace541586210bd7bd061cc09a8c0e03
treebadb6ba2ced8240adfdae419f175dd2dc1b09267
parenta4559271501670b39305fc3575ae8d87fa03d35e

CMake: Use NAMES_PER_DIR in all lookups

CMake has a surprising default behavior where looking up a library by multiple names gives the name order higher priority than the directory search order. For example, if your system provides "llvm-config-14" and CMAKE_PREFIX_PATH includes "llvm-config", CMake will always end up choosing the system-provided llvm-config-14. This change add NAMES_PER_DIR to request the more sensible behavior: directory search order has higher priority than name order, so CMAKE_PREFIX_PATH always wins over system-provided tools/libraries.

4 files changed, 12 insertions(+), 10 deletions(-)

CMakeLists.txt+3-3
...@@ -31,7 +31,7 @@ set(ZIG_VERSION "" CACHE STRING "Override Zig version string. Default is to find...@@ -31,7 +31,7 @@ set(ZIG_VERSION "" CACHE STRING "Override Zig version string. Default is to find
3131
32if("${ZIG_VERSION}" STREQUAL "")32if("${ZIG_VERSION}" STREQUAL "")
33 set(ZIG_VERSION "${ZIG_VERSION_MAJOR}.${ZIG_VERSION_MINOR}.${ZIG_VERSION_PATCH}")33 set(ZIG_VERSION "${ZIG_VERSION_MAJOR}.${ZIG_VERSION_MINOR}.${ZIG_VERSION_PATCH}")
34 find_program(GIT_EXE NAMES git)34 find_program(GIT_EXE NAMES git NAMES_PER_DIR)
35 if(GIT_EXE)35 if(GIT_EXE)
36 execute_process(36 execute_process(
37 COMMAND ${GIT_EXE} -C ${CMAKE_SOURCE_DIR} describe --match *.*.* --tags37 COMMAND ${GIT_EXE} -C ${CMAKE_SOURCE_DIR} describe --match *.*.* --tags
...@@ -110,13 +110,13 @@ find_package(lld 14)...@@ -110,13 +110,13 @@ find_package(lld 14)
110110
111if(ZIG_STATIC_ZLIB)111if(ZIG_STATIC_ZLIB)
112 list(REMOVE_ITEM LLVM_LIBRARIES "-lz")112 list(REMOVE_ITEM LLVM_LIBRARIES "-lz")
113 find_library(ZLIB NAMES libz.a libzlibstatic.a z zlib libz)113 find_library(ZLIB NAMES libz.a libzlibstatic.a z zlib libz NAMES_PER_DIR)
114 list(APPEND LLVM_LIBRARIES "${ZLIB}")114 list(APPEND LLVM_LIBRARIES "${ZLIB}")
115endif()115endif()
116116
117if(APPLE AND ZIG_STATIC)117if(APPLE AND ZIG_STATIC)
118 list(REMOVE_ITEM LLVM_LIBRARIES "-lcurses")118 list(REMOVE_ITEM LLVM_LIBRARIES "-lcurses")
119 find_library(CURSES NAMES libcurses.a libncurses.a119 find_library(CURSES NAMES libcurses.a libncurses.a NAMES_PER_DIR
120 PATHS120 PATHS
121 /usr/local/opt/ncurses/lib121 /usr/local/opt/ncurses/lib
122 /opt/homebrew/opt/ncurses/lib)122 /opt/homebrew/opt/ncurses/lib)
cmake/Findclang.cmake+2-1
...@@ -25,6 +25,7 @@ if(ZIG_PREFER_CLANG_CPP_DYLIB)...@@ -25,6 +25,7 @@ if(ZIG_PREFER_CLANG_CPP_DYLIB)
25 clang-cpp-14.025 clang-cpp-14.0
26 clang-cpp14026 clang-cpp140
27 clang-cpp27 clang-cpp
28 NAMES_PER_DIR
28 PATHS29 PATHS
29 ${CLANG_LIBDIRS}30 ${CLANG_LIBDIRS}
30 /usr/lib/llvm/14/lib31 /usr/lib/llvm/14/lib
...@@ -40,7 +41,7 @@ endif()...@@ -40,7 +41,7 @@ endif()
40if(NOT CLANG_LIBRARIES)41if(NOT CLANG_LIBRARIES)
41 macro(FIND_AND_ADD_CLANG_LIB _libname_)42 macro(FIND_AND_ADD_CLANG_LIB _libname_)
42 string(TOUPPER ${_libname_} _prettylibname_)43 string(TOUPPER ${_libname_} _prettylibname_)
43 find_library(CLANG_${_prettylibname_}_LIB NAMES ${_libname_}44 find_library(CLANG_${_prettylibname_}_LIB NAMES ${_libname_} NAMES_PER_DIR
44 PATHS45 PATHS
45 ${CLANG_LIBDIRS}46 ${CLANG_LIBDIRS}
46 /usr/lib/llvm/14/lib47 /usr/lib/llvm/14/lib
cmake/Findlld.cmake+2-2
...@@ -15,7 +15,7 @@ find_path(LLD_INCLUDE_DIRS NAMES lld/Common/Driver.h...@@ -15,7 +15,7 @@ find_path(LLD_INCLUDE_DIRS NAMES lld/Common/Driver.h
15 /opt/homebrew/opt/llvm@14/include15 /opt/homebrew/opt/llvm@14/include
16 /mingw64/include)16 /mingw64/include)
1717
18find_library(LLD_LIBRARY NAMES lld-14.0 lld140 lld18find_library(LLD_LIBRARY NAMES lld-14.0 lld140 lld NAMES_PER_DIR
19 PATHS19 PATHS
20 /usr/lib/llvm-14/lib20 /usr/lib/llvm-14/lib
21 /usr/local/llvm140/lib21 /usr/local/llvm140/lib
...@@ -28,7 +28,7 @@ if(EXISTS ${LLD_LIBRARY})...@@ -28,7 +28,7 @@ if(EXISTS ${LLD_LIBRARY})
28else()28else()
29 macro(FIND_AND_ADD_LLD_LIB _libname_)29 macro(FIND_AND_ADD_LLD_LIB _libname_)
30 string(TOUPPER ${_libname_} _prettylibname_)30 string(TOUPPER ${_libname_} _prettylibname_)
31 find_library(LLD_${_prettylibname_}_LIB NAMES ${_libname_}31 find_library(LLD_${_prettylibname_}_LIB NAMES ${_libname_} NAMES_PER_DIR
32 PATHS32 PATHS
33 ${LLD_LIBDIRS}33 ${LLD_LIBDIRS}
34 /usr/lib/llvm-14/lib34 /usr/lib/llvm-14/lib
cmake/Findllvm.cmake+5-4
...@@ -27,6 +27,7 @@ if(ZIG_PREFER_CLANG_CPP_DYLIB)...@@ -27,6 +27,7 @@ if(ZIG_PREFER_CLANG_CPP_DYLIB)
27 LLVM-1427 LLVM-14
28 LLVM-14028 LLVM-140
29 LLVM29 LLVM
30 NAMES_PER_DIR
30 PATHS31 PATHS
31 ${LLVM_LIBDIRS}32 ${LLVM_LIBDIRS}
32 /usr/lib/llvm/14/lib33 /usr/lib/llvm/14/lib
...@@ -40,7 +41,7 @@ if(ZIG_PREFER_CLANG_CPP_DYLIB)...@@ -40,7 +41,7 @@ if(ZIG_PREFER_CLANG_CPP_DYLIB)
40 )41 )
4142
42 find_program(LLVM_CONFIG_EXE43 find_program(LLVM_CONFIG_EXE
43 NAMES llvm-config-14 llvm-config-14.0 llvm-config140 llvm-config14 llvm-config44 NAMES llvm-config-14 llvm-config-14.0 llvm-config140 llvm-config14 llvm-config NAMES_PER_DIR
44 PATHS45 PATHS
45 "/mingw64/bin"46 "/mingw64/bin"
46 "/c/msys64/mingw64/bin"47 "/c/msys64/mingw64/bin"
...@@ -71,7 +72,7 @@ if(ZIG_PREFER_CLANG_CPP_DYLIB)...@@ -71,7 +72,7 @@ if(ZIG_PREFER_CLANG_CPP_DYLIB)
71 endif()72 endif()
72elseif(ZIG_USE_LLVM_CONFIG)73elseif(ZIG_USE_LLVM_CONFIG)
73 find_program(LLVM_CONFIG_EXE74 find_program(LLVM_CONFIG_EXE
74 NAMES llvm-config-14 llvm-config-14.0 llvm-config140 llvm-config14 llvm-config75 NAMES llvm-config-14 llvm-config-14.0 llvm-config140 llvm-config14 llvm-config NAMES_PER_DIR
75 PATHS76 PATHS
76 "/mingw64/bin"77 "/mingw64/bin"
77 "/c/msys64/mingw64/bin"78 "/c/msys64/mingw64/bin"
...@@ -173,7 +174,7 @@ elseif(ZIG_USE_LLVM_CONFIG)...@@ -173,7 +174,7 @@ elseif(ZIG_USE_LLVM_CONFIG)
173 set(LLVM_LIBRARIES ${LLVM_LIBRARIES} ${LLVM_SYSTEM_LIBS})174 set(LLVM_LIBRARIES ${LLVM_LIBRARIES} ${LLVM_SYSTEM_LIBS})
174175
175 if(NOT LLVM_LIBRARIES)176 if(NOT LLVM_LIBRARIES)
176 find_library(LLVM_LIBRARIES NAMES LLVM LLVM-14 LLVM-14.0)177 find_library(LLVM_LIBRARIES NAMES LLVM LLVM-14 LLVM-14.0 NAMES_PER_DIR)
177 endif()178 endif()
178179
179 link_directories("${CMAKE_PREFIX_PATH}/lib")180 link_directories("${CMAKE_PREFIX_PATH}/lib")
...@@ -184,7 +185,7 @@ else()...@@ -184,7 +185,7 @@ else()
184185
185 macro(FIND_AND_ADD_LLVM_LIB _libname_)186 macro(FIND_AND_ADD_LLVM_LIB _libname_)
186 string(TOUPPER ${_libname_} _prettylibname_)187 string(TOUPPER ${_libname_} _prettylibname_)
187 find_library(LLVM_${_prettylibname_}_LIB NAMES ${_libname_} PATHS ${LLVM_LIBDIRS})188 find_library(LLVM_${_prettylibname_}_LIB NAMES ${_libname_} NAMES_PER_DIR PATHS ${LLVM_LIBDIRS})
188 set(LLVM_LIBRARIES ${LLVM_LIBRARIES} ${LLVM_${_prettylibname_}_LIB})189 set(LLVM_LIBRARIES ${LLVM_LIBRARIES} ${LLVM_${_prettylibname_}_LIB})
189 endmacro(FIND_AND_ADD_LLVM_LIB)190 endmacro(FIND_AND_ADD_LLVM_LIB)
190191