From f4c1c91d9b091941ebb4dae6aef95bcf9bc1c388 Mon Sep 17 00:00:00 2001 From: David Faure Date: Sun, 21 Jun 2020 14:19:49 +0200 Subject: [PATCH] Update FindTaglib from ECM. This fixes linking for me, there was just nothing in TAGLIB_LIBRARIES on my system (taglib in the same custom prefix as KDE code) --- cmake/modules/FindTaglib.cmake | 191 +++++++++++------------------ plugins/mediaplayer/CMakeLists.txt | 3 +- 2 files changed, 74 insertions(+), 120 deletions(-) diff --git a/cmake/modules/FindTaglib.cmake b/cmake/modules/FindTaglib.cmake index 13db60b2..1e1b9075 100644 --- a/cmake/modules/FindTaglib.cmake +++ b/cmake/modules/FindTaglib.cmake @@ -1,135 +1,90 @@ -# - Try to find the Taglib library -# Once done this will define +#.rst: +# FindTaglib +#----------- # -# TAGLIB_FOUND - system has the taglib library -# TAGLIB_CFLAGS - the taglib cflags -# TAGLIB_LIBRARIES - The libraries needed to use taglib - -# Copyright (c) 2006, Laurent Montel, +# Try to find the Taglib library. # -# Redistribution and use is allowed according to the terms of the BSD license. -# For details see the accompanying COPYING-CMAKE-SCRIPTS file. - -if(NOT TAGLIB_MIN_VERSION) - set(TAGLIB_MIN_VERSION "1.6") -endif() - -if(NOT WIN32) - find_program(TAGLIBCONFIG_EXECUTABLE NAMES taglib-config PATHS - ${BIN_INSTALL_DIR} - ) -endif() - -#reset vars -set(TAGLIB_LIBRARIES) -set(TAGLIB_CFLAGS) - -# if taglib-config has been found -if(TAGLIBCONFIG_EXECUTABLE) - - exec_program(${TAGLIBCONFIG_EXECUTABLE} ARGS --version RETURN_VALUE _return_VALUE OUTPUT_VARIABLE TAGLIB_VERSION) - - if("${TAGLIB_MIN_VERSION}" VERSION_GREATER TAGLIB_VERSION) - message(STATUS "TagLib version too old: version searched :${TAGLIB_MIN_VERSION}, found ${TAGLIB_VERSION}") - set(TAGLIB_FOUND FALSE) - else() - - exec_program(${TAGLIBCONFIG_EXECUTABLE} ARGS --libs RETURN_VALUE _return_VALUE OUTPUT_VARIABLE TAGLIB_LIBRARIES) - - exec_program(${TAGLIBCONFIG_EXECUTABLE} ARGS --cflags RETURN_VALUE _return_VALUE OUTPUT_VARIABLE TAGLIB_CFLAGS) +# This will define the following variables: +# +# ``Taglib_FOUND`` +# True if the system has the taglib library of at least the minimum +# version specified by the version parameter to find_package() +# ``Taglib_INCLUDE_DIRS`` +# The taglib include dirs for use with target_include_directories +# ``Taglib_LIBRARIES`` +# The taglib libraries for use with target_link_libraries() +# ``Taglib_VERSION`` +# The version of taglib that was found +# +# If ``Taglib_FOUND is TRUE, it will also define the following imported +# target: +# +# ``Taglib::Taglib`` +# The Taglib library +# +# Since 5.72.0 +# +# SPDX-FileCopyrightText: 2006 Laurent Montel +# SPDX-FileCopyrightText: 2019 Heiko Becker +# SPDX-FileCopyrightText: 2020 Elvis Angelaccio +# SPDX-License-Identifier: BSD-3-Clause - if(TAGLIB_LIBRARIES AND TAGLIB_CFLAGS) - set(TAGLIB_FOUND TRUE) - endif() - string(REGEX REPLACE " *-I" ";" TAGLIB_INCLUDES "${TAGLIB_CFLAGS}") - endif() - mark_as_advanced(TAGLIB_CFLAGS TAGLIB_LIBRARIES TAGLIB_INCLUDES) +find_package(PkgConfig QUIET) -else() +pkg_search_module(PC_TAGLIB QUIET taglib) - find_path(TAGLIB_INCLUDES - NAMES - tag.h +find_path(Taglib_INCLUDE_DIRS + NAMES tag.h PATH_SUFFIXES taglib - PATHS - ${KDE4_INCLUDE_DIR} - ${INCLUDE_INSTALL_DIR} - ) - - if(NOT WIN32) - # on non-win32 we don't need to take care about WIN32_DEBUG_POSTFIX + HINTS ${PC_TAGLIB_INCLUDEDIR} +) - find_library(TAGLIB_LIBRARIES tag PATHS ${KDE4_LIB_DIR} ${LIB_INSTALL_DIR}) +find_library(Taglib_LIBRARIES + NAMES tag + HINTS ${PC_TAGLIB_LIBDIR} +) - else() +set(Taglib_VERSION ${PC_TAGLIB_VERSION}) - # 1. get all possible libnames - set(args PATHS ${KDE4_LIB_DIR} ${LIB_INSTALL_DIR}) - set(newargs "") - set(libnames_release "") - set(libnames_debug "") +if (Taglib_INCLUDE_DIRS AND NOT Taglib_VERSION) + if(EXISTS "${Taglib_INCLUDE_DIRS}/taglib.h") + file(READ "${Taglib_INCLUDE_DIRS}/taglib.h" TAGLIB_H) - list(LENGTH args listCount) + string(REGEX MATCH "#define TAGLIB_MAJOR_VERSION[ ]+[0-9]+" TAGLIB_MAJOR_VERSION_MATCH ${TAGLIB_H}) + string(REGEX MATCH "#define TAGLIB_MINOR_VERSION[ ]+[0-9]+" TAGLIB_MINOR_VERSION_MATCH ${TAGLIB_H}) + string(REGEX MATCH "#define TAGLIB_PATCH_VERSION[ ]+[0-9]+" TAGLIB_PATCH_VERSION_MATCH ${TAGLIB_H}) - # just one name - list(APPEND libnames_release "tag") - list(APPEND libnames_debug "tagd") - - set(newargs ${args}) - - # search the release lib - find_library(TAGLIB_LIBRARIES_RELEASE - NAMES ${libnames_release} - ${newargs} - ) - - # search the debug lib - find_library(TAGLIB_LIBRARIES_DEBUG - NAMES ${libnames_debug} - ${newargs} - ) - - if(TAGLIB_LIBRARIES_RELEASE AND TAGLIB_LIBRARIES_DEBUG) - - # both libs found - set(TAGLIB_LIBRARIES optimized ${TAGLIB_LIBRARIES_RELEASE} - debug ${TAGLIB_LIBRARIES_DEBUG}) - - else() - - if(TAGLIB_LIBRARIES_RELEASE) - - # only release found - set(TAGLIB_LIBRARIES ${TAGLIB_LIBRARIES_RELEASE}) - - else() - - # only debug (or nothing) found - set(TAGLIB_LIBRARIES ${TAGLIB_LIBRARIES_DEBUG}) - - endif() - - endif() - - mark_as_advanced(TAGLIB_LIBRARIES_RELEASE) - mark_as_advanced(TAGLIB_LIBRARIES_DEBUG) + string(REGEX REPLACE ".*_MAJOR_VERSION[ ]+(.*)" "\\1" TAGLIB_MAJOR_VERSION "${TAGLIB_MAJOR_VERSION_MATCH}") + string(REGEX REPLACE ".*_MINOR_VERSION[ ]+(.*)" "\\1" TAGLIB_MINOR_VERSION "${TAGLIB_MINOR_VERSION_MATCH}") + string(REGEX REPLACE ".*_PATCH_VERSION[ ]+(.*)" "\\1" TAGLIB_PATCH_VERSION "${TAGLIB_PATCH_VERSION_MATCH}") + set(Taglib_VERSION "${TAGLIB_MAJOR_VERSION}.${TAGLIB_MINOR_VERSION}.${TAGLIB_PATCH_VERSION}") endif() - - include(FindPackageMessage) - include(FindPackageHandleStandardArgs) - find_package_handle_standard_args(Taglib DEFAULT_MSG TAGLIB_INCLUDES TAGLIB_LIBRARIES) - endif() - -if(TAGLIB_FOUND) - if(NOT Taglib_FIND_QUIETLY AND TAGLIBCONFIG_EXECUTABLE) - message(STATUS "Taglib found: ${TAGLIB_LIBRARIES}") - endif() -else() - if(Taglib_FIND_REQUIRED) - message(FATAL_ERROR "Could not find Taglib") - endif() +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Taglib + FOUND_VAR + Taglib_FOUND + REQUIRED_VARS + Taglib_LIBRARIES + Taglib_INCLUDE_DIRS + VERSION_VAR + Taglib_VERSION +) + +if (Taglib_FOUND AND NOT TARGET Taglib::Taglib) + add_library(Taglib::Taglib UNKNOWN IMPORTED) + set_target_properties(Taglib::Taglib PROPERTIES + IMPORTED_LOCATION "${Taglib_LIBRARIES}" + INTERFACE_INCLUDE_DIRECTORIES "${Taglib_INCLUDE_DIRS}" + ) endif() +mark_as_advanced(Taglib_LIBRARIES Taglib_INCLUDE_DIRS) + +include(FeatureSummary) +set_package_properties(Taglib PROPERTIES + URL "https://taglib.org/" + DESCRIPTION "A library for reading and editing the meta-data of audio formats" +) diff --git a/plugins/mediaplayer/CMakeLists.txt b/plugins/mediaplayer/CMakeLists.txt index 8bbeeb74..5fbe056f 100644 --- a/plugins/mediaplayer/CMakeLists.txt +++ b/plugins/mediaplayer/CMakeLists.txt @@ -1,5 +1,4 @@ find_package(Taglib REQUIRED) -include_directories(${TAGLIB_INCLUDES}) #find_package(Qt5 ${QT_MIN_VERSION} CONFIG REQUIRED Multimedia MultimediaWidgets) #include_directories(${Qt5Multimedia_INCLUDE_DIRS}) include_directories(${PHONON_INCLUDES}) @@ -34,7 +33,7 @@ kcoreaddons_desktop_to_json(ktorrent_mediaplayer ktorrent_mediaplayer.desktop) target_link_libraries( ktorrent_mediaplayer ktcore - ${TAGLIB_LIBRARIES} + Taglib::Taglib Phonon::phonon4qt5 KF5::Torrent KF5::I18n -- GitLab