mirror of
https://github.com/Kitware/CMake.git
synced 2026-02-18 13:10:17 -06:00
FindPkgConfig: Tolerate PKG_CONFIG_SYSTEM_LIBRARY_PATH in environment
Tell `pkg-config --libs` not to filter out `-L` flags for entries of `PKG_CONFIG_SYSTEM_LIBRARY_PATH` (and `LIBRARY_PATH` for `pkgconf`). We should always search everywhere the `.pc` file expects. Fixes: #22148
This commit is contained in:
@@ -403,6 +403,14 @@ macro(_pkg_set_path_internal)
|
||||
unset(_lib_dirs)
|
||||
unset(_pkgconfig_path)
|
||||
endif()
|
||||
|
||||
# Tell pkg-config not to strip any -L paths so we can search them all.
|
||||
if(DEFINED ENV{PKG_CONFIG_ALLOW_SYSTEM_LIBS})
|
||||
set(_pkgconfig_allow_system_libs_old "$ENV{PKG_CONFIG_ALLOW_SYSTEM_LIBS}")
|
||||
else()
|
||||
unset(_pkgconfig_allow_system_libs_old)
|
||||
endif()
|
||||
set(ENV{PKG_CONFIG_ALLOW_SYSTEM_LIBS} 0)
|
||||
endmacro()
|
||||
|
||||
macro(_pkg_restore_path_internal)
|
||||
@@ -410,6 +418,10 @@ macro(_pkg_restore_path_internal)
|
||||
# Restore the environment variable
|
||||
set(ENV{PKG_CONFIG_PATH} "${_pkgconfig_path_old}")
|
||||
endif()
|
||||
if(DEFINED _pkgconfig_allow_system_libs_old)
|
||||
set(ENV{PKG_CONFIG_ALLOW_SYSTEM_LIBS} "${_pkgconfig_allow_system_libs_old}")
|
||||
unset(_pkgconfig_allow_system_libs_old)
|
||||
endif()
|
||||
|
||||
unset(_extra_paths)
|
||||
unset(_pkgconfig_path_old)
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
-- ZOT_LIBRARIES='zot'
|
||||
-- ZOT_LINK_LIBRARIES='[^']*/Tests/RunCMake/FindPkgConfig/FindPkgConfig_LIBRARY_PATH-build/zot/lib/prefix-zot-suffix'
|
||||
-- ZOT_LDFLAGS='-L[^']*/Tests/RunCMake/FindPkgConfig/FindPkgConfig_LIBRARY_PATH-build/zot/lib;-lzot'
|
||||
@@ -0,0 +1,29 @@
|
||||
find_package(PkgConfig REQUIRED)
|
||||
|
||||
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/zot/lib/pkgconfig/zot.pc" "
|
||||
prefix=${CMAKE_CURRENT_BINARY_DIR}/zot
|
||||
libdir=\${prefix}/lib
|
||||
|
||||
Name: Zot
|
||||
Description: Dummy packaget to test LIBRARY_DIR support
|
||||
Version: 1.0
|
||||
Libs: -L\${libdir} -lzot
|
||||
")
|
||||
|
||||
# Create a "library" file to find in libdir.
|
||||
set(CMAKE_FIND_LIBRARY_PREFIXES "prefix-")
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES "-suffix")
|
||||
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/zot/lib/prefix-zot-suffix")
|
||||
|
||||
# 'pkg-config --libs' drops -L flags in PKG_CONFIG_SYSTEM_LIBRARY_PATH by default.
|
||||
set(ENV{PKG_CONFIG_SYSTEM_LIBRARY_PATH} "${CMAKE_CURRENT_BINARY_DIR}/zot/lib")
|
||||
|
||||
# 'pkgconf --libs' also drops -L flags in LIBRARY_PATH by default.
|
||||
set(ENV{LIBRARY_PATH} "${CMAKE_CURRENT_BINARY_DIR}/zot/lib")
|
||||
|
||||
set(ENV{PKG_CONFIG_PATH} "${CMAKE_CURRENT_BINARY_DIR}/zot/lib/pkgconfig")
|
||||
pkg_check_modules(ZOT REQUIRED zot)
|
||||
|
||||
message(STATUS "ZOT_LIBRARIES='${ZOT_LIBRARIES}'")
|
||||
message(STATUS "ZOT_LINK_LIBRARIES='${ZOT_LINK_LIBRARIES}'")
|
||||
message(STATUS "ZOT_LDFLAGS='${ZOT_LDFLAGS}'")
|
||||
@@ -31,4 +31,8 @@ if (PKG_CONFIG_FOUND)
|
||||
run_cmake(FindPkgConfig_VERSION_OPERATORS)
|
||||
run_cmake(FindPkgConfig_GET_MATCHING_MODULE_NAME)
|
||||
run_cmake(FindPkgConfig_empty_target)
|
||||
|
||||
if(NOT RunCMake_BINARY_DIR MATCHES " ")
|
||||
run_cmake(FindPkgConfig_LIBRARY_PATH)
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
Reference in New Issue
Block a user