diff --git a/cmake/exiv2.pc.in b/cmake/exiv2.pc.in index cea7604229..e13b276b3b 100644 --- a/cmake/exiv2.pc.in +++ b/cmake/exiv2.pc.in @@ -7,5 +7,7 @@ Name: exiv2 Description: @PROJECT_DESCRIPTION@ Version: @PROJECT_VERSION@ URL: @PACKAGE_URL@ +Requires.private: @requires_private_for_pc_file@ Libs: -L${libdir} -lexiv2 +Libs.private: @libs_private_for_pc_file@ Cflags: -I${includedir} diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index f2afb4fbd5..4a6e39d1a8 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -189,10 +189,12 @@ target_include_directories(exiv2lib SYSTEM PRIVATE if (EXIV2_ENABLE_XMP OR EXIV2_ENABLE_EXTERNAL_XMP) target_include_directories(exiv2lib PRIVATE ${EXPAT_INCLUDE_DIR}) target_link_libraries(exiv2lib PRIVATE EXPAT::EXPAT) + list(APPEND requires_private_list "expat") endif() if (EXIV2_ENABLE_XMP) target_link_libraries(exiv2lib PRIVATE exiv2-xmp) + list(APPEND libs_private_list "exiv2-xmp") elseif(EXIV2_ENABLE_EXTERNAL_XMP) target_link_libraries(exiv2lib PUBLIC ${XMPSDK_LIBRARY}) target_include_directories(exiv2lib PUBLIC ${XMPSDK_INCLUDE_DIR}) @@ -211,12 +213,11 @@ target_include_directories(exiv2lib_int PUBLIC ) if (EXIV2_ENABLE_WEBREADY) - if( EXIV2_ENABLE_CURL ) target_include_directories(exiv2lib SYSTEM PRIVATE ${CURL_INCLUDE_DIR} ) target_link_libraries(exiv2lib PRIVATE ${CURL_LIBRARIES}) + list(APPEND requires_private_list "libcurl") endif() - endif() if (WIN32) @@ -239,18 +240,23 @@ else() endif() if( EXIV2_ENABLE_PNG ) - target_link_libraries( exiv2lib PRIVATE ZLIB::ZLIB) + target_link_libraries( exiv2lib PRIVATE ZLIB::ZLIB) + list(APPEND requires_private_list "zlib") endif() if( EXIV2_ENABLE_BMFF AND BROTLI_FOUND ) target_link_libraries( exiv2lib PRIVATE ${Brotli_LIBRARIES}) target_include_directories(exiv2lib PRIVATE ${Brotli_INCLUDE_DIRS}) + list(APPEND requires_private_list "libbrotlidec") endif() if( EXIV2_ENABLE_NLS ) target_link_libraries(exiv2lib PRIVATE ${Intl_LIBRARIES}) target_include_directories(exiv2lib PRIVATE ${Intl_INCLUDE_DIRS}) target_include_directories(exiv2lib_int PRIVATE ${Intl_INCLUDE_DIRS}) + if( Intl_LIBRARIES ) + list(APPEND libs_private_list "intl") + endif() # Definition needed for translations join_paths(EXV_LOCALEDIR ".." "${CMAKE_INSTALL_LOCALEDIR}") target_compile_definitions(exiv2lib PUBLIC EXV_LOCALEDIR="${EXV_LOCALEDIR}") @@ -258,6 +264,7 @@ endif() if( ICONV_FOUND ) target_link_libraries( exiv2lib PRIVATE Iconv::Iconv ) + list(APPEND requires_private_list "iconv") endif() if( EXIV2_ENABLE_INIH ) @@ -265,8 +272,21 @@ if( EXIV2_ENABLE_INIH ) target_link_libraries( exiv2lib_int PRIVATE inih::inireader ) target_link_libraries( exiv2lib PRIVATE inih::libinih ) target_link_libraries( exiv2lib PRIVATE inih::inireader ) + list(APPEND requires_private_list "INIReader") endif() +# Convert private lists to delimited strings +list(SORT libs_private_list) +string(REPLACE ";" " -l" libs_private_string "${libs_private_list}") +if(libs_private_string) + string(PREPEND libs_private_string "-l") +endif() +list(SORT requires_private_list) +string(REPLACE ";" ", " requires_private_string "${requires_private_list}") + +set(libs_private_for_pc_file "${libs_private_string}" PARENT_SCOPE) +set(requires_private_for_pc_file "${requires_private_string}" PARENT_SCOPE) + write_basic_package_version_file(exiv2ConfigVersion.cmake COMPATIBILITY ExactVersion) install(TARGETS exiv2lib EXPORT exiv2Config