From faddc4aa060be00ff2286bb80465512685c5c715 Mon Sep 17 00:00:00 2001 From: Urs Fleisch Date: Sun, 12 Nov 2023 16:01:55 +0100 Subject: [PATCH] Export CMake configuration This will install a /cmake/taglib/ folder with CMake configuration, so that users can simply use find_package(TagLib) add_executable(myproject ...) target_link_libraries(myproject TagLib::tag) --- CMakeLists.txt | 5 +++++ bindings/c/CMakeLists.txt | 7 ++++++- taglib-config.cmake.in | 12 ++++++++++++ taglib/CMakeLists.txt | 37 ++++++++++++++++++++++++++++++++++--- 4 files changed, 57 insertions(+), 4 deletions(-) create mode 100644 taglib-config.cmake.in diff --git a/CMakeLists.txt b/CMakeLists.txt index 593511f5..4055c0a6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,6 +8,7 @@ set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules") include(CTest) include(FeatureSummary) include(GNUInstallDirs) +include(CMakePackageConfigHelpers) option(BUILD_SHARED_LIBS "Build shared libraries" OFF) if(APPLE) @@ -108,6 +109,10 @@ if(WITH_ZLIB) set(HAVE_ZLIB ${ZLIB_FOUND}) if(ZLIB_FOUND) set(ZLIB_LIBRARIES_FLAGS -lz) + if(NOT BUILD_SHARED_LIBS) + # When linking TagLib statically, zlib has to be linked explicitly. + set(ZLIB_INTERFACE_LINK_LIBRARIES ZLIB::ZLIB) + endif() endif() endif() diff --git a/bindings/c/CMakeLists.txt b/bindings/c/CMakeLists.txt index 67e95914..757ffdd9 100644 --- a/bindings/c/CMakeLists.txt +++ b/bindings/c/CMakeLists.txt @@ -20,7 +20,11 @@ set(tag_c_HDRS tag_c.h) add_library(tag_c tag_c.cpp ${tag_c_HDRS}) -target_link_libraries(tag_c tag) +target_include_directories(tag_c INTERFACE + $ +) + +target_link_libraries(tag_c PRIVATE tag) set_target_properties(tag_c PROPERTIES PUBLIC_HEADER "${tag_c_HDRS}" DEFINE_SYMBOL MAKE_TAGLIB_LIB @@ -60,6 +64,7 @@ set_target_properties(tag_c PROPERTIES INSTALL_NAME_DIR ${CMAKE_INSTALL_FULL_LIBDIR} ) install(TARGETS tag_c + EXPORT taglibTargets FRAMEWORK DESTINATION ${FRAMEWORK_INSTALL_DIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} diff --git a/taglib-config.cmake.in b/taglib-config.cmake.in new file mode 100644 index 00000000..691252f0 --- /dev/null +++ b/taglib-config.cmake.in @@ -0,0 +1,12 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/taglib-targets.cmake") + +set(TAGLIB_FOUND ${TagLib_FOUND}) +set(TAGLIB_VERSION ${TagLib_VERSION}) + +check_required_components("TagLib") + +if(NOT TARGET TagLib::TagLib) + add_library(TagLib::TagLib ALIAS TagLib::tag) +endif() diff --git a/taglib/CMakeLists.txt b/taglib/CMakeLists.txt index 59f6527e..891ad156 100644 --- a/taglib/CMakeLists.txt +++ b/taglib/CMakeLists.txt @@ -342,15 +342,22 @@ set(tag_LIB_SRCS add_library(tag ${tag_LIB_SRCS} ${tag_HDRS}) -target_link_libraries(tag $<$:utf8::cpp>) -target_link_libraries(tag $<$:ZLIB::ZLIB>) +target_include_directories(tag INTERFACE + $ + $ +) + +target_link_libraries(tag + PRIVATE $<$:utf8::cpp> + $<$:ZLIB::ZLIB> +) set_target_properties(tag PROPERTIES VERSION ${TAGLIB_SOVERSION_MAJOR}.${TAGLIB_SOVERSION_MINOR}.${TAGLIB_SOVERSION_PATCH} SOVERSION ${TAGLIB_SOVERSION_MAJOR} INSTALL_NAME_DIR ${CMAKE_INSTALL_FULL_LIBDIR} DEFINE_SYMBOL MAKE_TAGLIB_LIB - LINK_INTERFACE_LIBRARIES "" + INTERFACE_LINK_LIBRARIES "${ZLIB_INTERFACE_LINK_LIBRARIES}" PUBLIC_HEADER "${tag_HDRS}" ) if(VISIBILITY_HIDDEN) @@ -368,9 +375,33 @@ if(BUILD_FRAMEWORK) endif() install(TARGETS tag + EXPORT taglibTargets FRAMEWORK DESTINATION ${FRAMEWORK_INSTALL_DIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/taglib ) + +configure_package_config_file( + "${PROJECT_SOURCE_DIR}/taglib-config.cmake.in" + "${PROJECT_BINARY_DIR}/taglib-config.cmake" + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/taglib +) + +write_basic_package_version_file( + "${PROJECT_BINARY_DIR}/taglib-config-version.cmake" + VERSION "${TAGLIB_LIB_VERSION_STRING}" + COMPATIBILITY AnyNewerVersion +) + +install(EXPORT taglibTargets + FILE taglib-targets.cmake + NAMESPACE TagLib:: + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/taglib +) + +install(FILES "${PROJECT_BINARY_DIR}/taglib-config.cmake" + "${PROJECT_BINARY_DIR}/taglib-config-version.cmake" + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/taglib +)