mirror of
https://gitlab.gnome.org/GNOME/libxml2.git
synced 2025-03-25 10:50:08 +03:00
cmake: Only use pkg-config for .pc files, not for building binaries
Using `pkg_check_modules(FOO IMPORTED_TARGET foo)` with `target_link_libraries()` leads to `INTERFACE_LINK_LIBRARIES` in the resulting export file having `\$<LINK_ONLY:PkgConfig::FOO>` rather than the currently expected `\$<LINK_ONLY:FOO::FOO>`, leading to breakage. This can be worked around like so: target_link_libraries(UseFoo PUBLIC "$<BUILD_INTERFACE:PkgConfig::FOO>" INTERFACE "$<INSTALL_INTERFACE:FOO::FOO>" ) However, following some discussion, it is preferable to primarily use find modules as before and only use `pkg_check_modules` for correctly populating the .pc file. Also move `find_package()` calls earlier so that builds fail faster when dependencies are missing.
This commit is contained in:
parent
9d53452206
commit
c7ff438b83
@ -99,12 +99,28 @@ set(PACKAGE_TARNAME "libxml2")
|
||||
set(PACKAGE_URL "https://gitlab.gnome.org/GNOME/libxml2")
|
||||
set(PACKAGE_VERSION ${VERSION})
|
||||
|
||||
if(LIBXML2_WITH_ICONV)
|
||||
find_package(Iconv REQUIRED)
|
||||
endif()
|
||||
|
||||
if(LIBXML2_WITH_ICU)
|
||||
find_package(ICU REQUIRED COMPONENTS data i18n uc)
|
||||
endif()
|
||||
|
||||
if(LIBXML2_WITH_LZMA)
|
||||
find_package(LibLZMA REQUIRED)
|
||||
endif()
|
||||
|
||||
if(LIBXML2_WITH_THREADS)
|
||||
find_package(Threads REQUIRED)
|
||||
set(THREAD_LIBS ${CMAKE_THREAD_LIBS_INIT})
|
||||
list(APPEND CMAKE_REQUIRED_LIBRARIES Threads::Threads)
|
||||
endif()
|
||||
|
||||
if(LIBXML2_WITH_ZLIB)
|
||||
find_package(ZLIB REQUIRED)
|
||||
endif()
|
||||
|
||||
if (NOT MSVC)
|
||||
check_c_source_compiles("
|
||||
void __attribute__((destructor))
|
||||
@ -361,7 +377,6 @@ if(WIN32)
|
||||
endif()
|
||||
|
||||
if(LIBXML2_WITH_ICONV)
|
||||
find_package(Iconv REQUIRED)
|
||||
target_link_libraries(LibXml2 PUBLIC Iconv::Iconv)
|
||||
if(NOT Iconv_IS_BUILT_IN)
|
||||
set(ICONV_LIBS "-liconv")
|
||||
@ -369,35 +384,31 @@ if(LIBXML2_WITH_ICONV)
|
||||
endif()
|
||||
|
||||
if(LIBXML2_WITH_ICU)
|
||||
pkg_check_modules(ICU IMPORTED_TARGET icu-i18n)
|
||||
if(ICU_FOUND)
|
||||
target_link_libraries(LibXml2 PRIVATE PkgConfig::ICU)
|
||||
list(APPEND XML_PC_REQUIRES icu-i18n)
|
||||
target_link_libraries(LibXml2 PRIVATE ICU::data ICU::i18n ICU::uc)
|
||||
if(WIN32)
|
||||
set(ICU_LDFLAGS "-licudt -licuin -licuuc")
|
||||
else()
|
||||
find_package(ICU REQUIRED COMPONENTS data i18n uc)
|
||||
target_link_libraries(LibXml2 PRIVATE ICU::data ICU::i18n ICU::uc)
|
||||
if(WIN32)
|
||||
set(ICU_LDFLAGS "-licudt -licuin -licuuc")
|
||||
else()
|
||||
set(ICU_LDFLAGS "-licudata -licui18n -licuuc")
|
||||
endif()
|
||||
list(APPEND XML_PC_LIBS "${ICU_LDFLAGS}")
|
||||
set(ICU_LDFLAGS "-licudata -licui18n -licuuc")
|
||||
endif()
|
||||
list(APPEND XML_PRIVATE_LIBS "${ICU_LDFLAGS}")
|
||||
pkg_check_modules(ICU_PC IMPORTED_TARGET icu-i18n)
|
||||
if(ICU_PC_FOUND)
|
||||
list(APPEND XML_PC_REQUIRES icu-i18n)
|
||||
else()
|
||||
list(APPEND XML_PC_LIBS "${ICU_LDFLAGS}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(LIBXML2_WITH_LZMA)
|
||||
pkg_check_modules(LibLZMA IMPORTED_TARGET liblzma)
|
||||
if(LibLZMA_FOUND)
|
||||
target_link_libraries(LibXml2 PRIVATE PkgConfig::LibLZMA)
|
||||
target_link_libraries(LibXml2 PRIVATE LibLZMA::LibLZMA)
|
||||
set(LibLZMA_LDFLAGS "-llzma")
|
||||
list(APPEND XML_PRIVATE_LIBS "${LibLZMA_LDFLAGS}")
|
||||
pkg_check_modules(LibLZMA_PC IMPORTED_TARGET liblzma)
|
||||
if(LibLZMA_PC_FOUND)
|
||||
list(APPEND XML_PC_REQUIRES liblzma)
|
||||
else()
|
||||
find_package(LibLZMA REQUIRED)
|
||||
target_link_libraries(LibXml2 PRIVATE LibLZMA::LibLZMA)
|
||||
set(LibLZMA_LDFLAGS "-llzma")
|
||||
list(APPEND XML_PC_LIBS "${LibLZMA_LDFLAGS}")
|
||||
endif()
|
||||
list(APPEND XML_PRIVATE_LIBS "${LibLZMA_LDFLAGS}")
|
||||
endif()
|
||||
|
||||
if(LIBXML2_WITH_THREADS)
|
||||
@ -405,17 +416,15 @@ if(LIBXML2_WITH_THREADS)
|
||||
endif()
|
||||
|
||||
if(LIBXML2_WITH_ZLIB)
|
||||
pkg_check_modules(ZLIB IMPORTED_TARGET zlib)
|
||||
if(ZLIB_FOUND)
|
||||
target_link_libraries(LibXml2 PRIVATE PkgConfig::ZLIB)
|
||||
target_link_libraries(LibXml2 PRIVATE ZLIB::ZLIB)
|
||||
set(ZLIB_LDFLAGS "-lz")
|
||||
list(APPEND XML_PRIVATE_LIBS "${ZLIB_LDFLAGS}")
|
||||
pkg_check_modules(ZLIB_PC IMPORTED_TARGET zlib)
|
||||
if(ZLIB_PC_FOUND)
|
||||
list(APPEND XML_PC_REQUIRES zlib)
|
||||
else()
|
||||
find_package(ZLIB REQUIRED)
|
||||
target_link_libraries(LibXml2 PRIVATE ZLIB::ZLIB)
|
||||
set(ZLIB_LDFLAGS "-lz")
|
||||
list(APPEND XML_PC_LIBS "${ZLIB_LDFLAGS}")
|
||||
endif()
|
||||
list(APPEND XML_PRIVATE_LIBS "${ZLIB_LDFLAGS}")
|
||||
endif()
|
||||
|
||||
if(CMAKE_C_COMPILER_ID MATCHES "Clang" OR CMAKE_C_COMPILER_ID STREQUAL "GNU")
|
||||
|
Loading…
x
Reference in New Issue
Block a user