From 561c7e1507bfd35929092f861646419da553f717 Mon Sep 17 00:00:00 2001 From: Arniiiii Date: Thu, 16 Jan 2025 14:54:13 +0000 Subject: [PATCH] cmake:add pkgconfig usage if find_package failed It's related to the situation with zstd: it has homebrew makefiles as default buildsystem. Thus, they use .pc files. Yes, they have CMake support, but downstream distros, like Gentoo, use Meson, which doesn't produce .cmake config files. Thus, I've added the mechanism for looking for a .pc files of corresponding libraries. --- CMakeLists.txt | 58 +++++++++++++++++++++++++++++++++++++------------- 1 file changed, 43 insertions(+), 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 34034c551..682d56dc3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,25 +11,53 @@ add_library(boost_iostreams src/mapped_file.cpp ) -function(boost_iostreams_option name description package version found target) # sources... +function(boost_iostreams_option name description package version found target pkgconfig_name pkgconfig_target) # sources... - find_package(${package} ${version} QUIET) - - if(${found} AND TARGET ${target}) + if(${name}) - option(${name} ${description} ON) + find_package(${package} ${version} QUIET) + + if(${found} AND TARGET ${target}) + + option(${name} ${description} ON) + target_sources(boost_iostreams PRIVATE ${ARGN}) + target_link_libraries(boost_iostreams PRIVATE ${target}) + + else() + + find_package(PkgConfig REQUIRED) + pkg_check_modules(${pkgconfig_name} GLOBAL IMPORTED_TARGET REQUIRED ${pkgconfig_name}) + + if(TARGET ${pkgconfig_target}) + + target_sources(boost_iostreams PRIVATE ${ARGN}) + target_link_libraries(boost_iostreams PRIVATE ${pkgconfig_target}) + + else() + + message(FATAL_ERROR "Option ${boost_iostreams_option} was turned on, but no .cmake config or .pc files related to corresponding library wasn't found. Are those libraries installed?") + + endif() + endif() + elseif(DEFINED ${name} AND NOT ${name}) + + option(${name} ${description} OFF) else() - option(${name} ${description} OFF) + find_package(${package} ${version} QUIET) + + if(${found} AND TARGET ${target}) - endif() + option(${name} ${description} ON) + target_sources(boost_iostreams PRIVATE ${ARGN}) + target_link_libraries(boost_iostreams PRIVATE ${target}) - if(${name}) + else() + + option(${name} ${description} OFF) - find_package(${package} ${version} REQUIRED) - target_sources(boost_iostreams PRIVATE ${ARGN}) - target_link_libraries(boost_iostreams PRIVATE ${target}) + endif() endif() @@ -39,10 +67,10 @@ endfunction() set(BOOST_IOSTREAMS_ZSTD_TARGET "zstd::libzstd_shared" CACHE STRING "Target name for Zstd (zstd::libzstd_shared, zstd::libzstd_static)") set_property(CACHE BOOST_IOSTREAMS_ZSTD_TARGET PROPERTY STRINGS "zstd::libzstd_shared" "zstd::libzstd_static") -boost_iostreams_option(BOOST_IOSTREAMS_ENABLE_ZLIB "Boost.Iostreams: Enable ZLIB support" ZLIB "" ZLIB_FOUND ZLIB::ZLIB src/zlib.cpp src/gzip.cpp) -boost_iostreams_option(BOOST_IOSTREAMS_ENABLE_BZIP2 "Boost.Iostreams: Enable BZip2 support" BZip2 "" BZIP2_FOUND BZip2::BZip2 src/bzip2.cpp) -boost_iostreams_option(BOOST_IOSTREAMS_ENABLE_LZMA "Boost.Iostreams: Enable LZMA support" LibLZMA "" LIBLZMA_FOUND LibLZMA::LibLZMA src/lzma.cpp) -boost_iostreams_option(BOOST_IOSTREAMS_ENABLE_ZSTD "Boost.Iostreams: Enable Zstd support" zstd "1.0" zstd_FOUND ${BOOST_IOSTREAMS_ZSTD_TARGET} src/zstd.cpp) +boost_iostreams_option(BOOST_IOSTREAMS_ENABLE_ZLIB "Boost.Iostreams: Enable ZLIB support" ZLIB "" ZLIB_FOUND ZLIB::ZLIB zlib PkgConfig::zlib src/zlib.cpp src/gzip.cpp) +boost_iostreams_option(BOOST_IOSTREAMS_ENABLE_BZIP2 "Boost.Iostreams: Enable BZip2 support" BZip2 "" BZIP2_FOUND BZip2::BZip2 bzip2 PkgConfig::bzip2 src/bzip2.cpp) +boost_iostreams_option(BOOST_IOSTREAMS_ENABLE_LZMA "Boost.Iostreams: Enable LZMA support" LibLZMA "" LIBLZMA_FOUND LibLZMA::LibLZMA liblzma PkgConfig::liblzma src/lzma.cpp) +boost_iostreams_option(BOOST_IOSTREAMS_ENABLE_ZSTD "Boost.Iostreams: Enable Zstd support" zstd "1.0" zstd_FOUND ${BOOST_IOSTREAMS_ZSTD_TARGET} libzstd PkgConfig::libzstd src/zstd.cpp) include(CheckCXXSourceCompiles)