diff --git a/CMakeLists.txt b/CMakeLists.txt index e87de753..1b4c6df2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -124,8 +124,6 @@ include(WindowsSupport) # Orthogonal features include(LibraryFeatures) -# pkg-config support -include(PkgConfig) # math.h/libm portability find_package(CMath REQUIRED) @@ -144,6 +142,8 @@ add_subdirectory(build) add_subdirectory(man) add_subdirectory(html) +# pkg-config support +include(PkgConfig) message(STATUS "") message(STATUS "Libtiff is now configured for ${CMAKE_SYSTEM}") diff --git a/cmake/PkgConfig.cmake b/cmake/PkgConfig.cmake index 92674bd7..dc251674 100644 --- a/cmake/PkgConfig.cmake +++ b/cmake/PkgConfig.cmake @@ -23,11 +23,34 @@ # LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE # OF THIS SOFTWARE. +# Post-process lib files into linker flags +function(set_libs_private out_var) + set(tiff_libs_private "") + foreach(lib IN LISTS ARGN) + get_filename_component(name "${lib}" NAME) + foreach(prefix IN LISTS CMAKE_FIND_LIBRARY_PREFIXES) + if(name MATCHES "^${prefix}") + string(REGEX REPLACE "^${prefix}" "" name "${name}") + break() + endif() + endforeach() + foreach(suffix IN LISTS CMAKE_FIND_LIBRARY_SUFFIXES) + if(name MATCHES "${suffix}$") + string(REGEX REPLACE "${suffix}$" "" name "${name}") + break() + endif() + endforeach() + string(APPEND tiff_libs_private " -l${name}") + endforeach() + set(${out_var} "${tiff_libs_private}" PARENT_SCOPE) +endfunction() + # Generate pkg-config file set(prefix "${CMAKE_INSTALL_PREFIX}") set(exec_prefix "${CMAKE_INSTALL_PREFIX}") set(libdir "${CMAKE_INSTALL_FULL_LIBDIR}") set(includedir "${CMAKE_INSTALL_FULL_INCLUDEDIR}") +set_libs_private(tiff_libs_private ${tiff_libs_private_list}) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libtiff-4.pc.in ${CMAKE_CURRENT_BINARY_DIR}/libtiff-4.pc) diff --git a/configure.ac b/configure.ac index 9e992792..bfa395a1 100644 --- a/configure.ac +++ b/configure.ac @@ -160,6 +160,9 @@ AM_SILENT_RULES tiff_libs_private= AC_SUBST(tiff_libs_private) +tiff_requires_private= +AC_SUBST(tiff_requires_private) + dnl We don't need to add math library to all targets case "${host_os}" in cygwin* | mingw32* | beos* | darwin*) diff --git a/libtiff-4.pc.in b/libtiff-4.pc.in index abe75a62..92305ac5 100644 --- a/libtiff-4.pc.in +++ b/libtiff-4.pc.in @@ -5,7 +5,8 @@ includedir=@includedir@ Name: libtiff Description: Tag Image File Format (TIFF) library. -Version: @VERSION@ +Version: @LIBTIFF_MAJOR_VERSION@.@LIBTIFF_MINOR_VERSION@.@LIBTIFF_MICRO_VERSION@ Libs: -L${libdir} -ltiff Libs.private: @tiff_libs_private@ Cflags: -I${includedir} +Requires.private: @tiff_requires_private@ diff --git a/libtiff/CMakeLists.txt b/libtiff/CMakeLists.txt index 90105b28..00f2e989 100755 --- a/libtiff/CMakeLists.txt +++ b/libtiff/CMakeLists.txt @@ -106,14 +106,20 @@ target_include_directories(tiff ${TIFF_INCLUDES} ) +set(tiff_libs_private_list "") # cmake list +set(tiff_requires_private "") # cmake string + if(ZIP_SUPPORT) target_link_libraries(tiff PRIVATE ZLIB::ZLIB) + string(APPEND tiff_requires_private " zlib") endif() if(ZIP_SUPPORT AND LIBDEFLATE_SUPPORT) target_link_libraries(tiff PRIVATE Deflate::Deflate) + list(APPEND tiff_libs_private_list "${Deflate_LIBRARY}") endif() if(JPEG_SUPPORT) target_link_libraries(tiff PRIVATE JPEG::JPEG) + string(APPEND tiff_requires_private " libjpeg") if(JPEG_DUAL_MODE_8_12) target_include_directories(tiff PRIVATE ${JPEG12_INCLUDE_DIR}) target_link_libraries(tiff PRIVATE ${JPEG12_LIBRARIES}) @@ -121,20 +127,31 @@ if(JPEG_SUPPORT) endif() if(JBIG_SUPPORT) target_link_libraries(tiff PRIVATE JBIG::JBIG) + list(APPEND tiff_libs_private_list "${JBIG_LIBRARY}") endif() if(LERC_SUPPORT) - target_link_libraries(tiff PRIVATE LERC::LERC) + target_link_libraries(tiff PRIVATE LERC::LERC) + list(APPEND tiff_libs_private_list "${LERC_LIBRARY}") endif() if(LZMA_SUPPORT) - target_link_libraries(tiff PRIVATE LibLZMA::LibLZMA) + target_link_libraries(tiff PRIVATE LibLZMA::LibLZMA) + string(APPEND tiff_requires_private " liblzma") endif() if(ZSTD_SUPPORT) target_link_libraries(tiff PRIVATE ZSTD::ZSTD) + string(APPEND tiff_requires_private " libzstd") endif() if(WEBP_SUPPORT) target_link_libraries(tiff PRIVATE WebP::WebP) + string(APPEND tiff_requires_private " libwebp") endif() target_link_libraries(tiff PRIVATE CMath::CMath) +if(CMath_LIBRARY) + list(APPEND tiff_libs_private_list "${CMath_LIBRARY}") +endif() + +set(tiff_libs_private_list "${tiff_libs_private_list}" PARENT_SCOPE) +set(tiff_requires_private "${tiff_requires_private}" PARENT_SCOPE) set_target_properties(tiff PROPERTIES SOVERSION ${SO_COMPATVERSION}) if(NOT CYGWIN)