diff options
author | Elvis Angelaccio <elvis.angelaccio@kde.org> | 2020-06-17 06:33:22 +0000 |
---|---|---|
committer | Christophe Giboudeaux <christophe@krop.fr> | 2020-06-17 06:33:22 +0000 |
commit | 8f26aba22be46099e0bb443ab27de4eb8c4d8a06 (patch) | |
tree | 2774f1ede8de28283c56037400a5d236c688a620 /find-modules | |
parent | 110f62d69b9529a901889c3998817eb406a22c8f (diff) | |
download | extra-cmake-modules-8f26aba22be46099e0bb443ab27de4eb8c4d8a06.tar.gz extra-cmake-modules-8f26aba22be46099e0bb443ab27de4eb8c4d8a06.tar.bz2 |
Add FindTaglib find module
Based on https://phabricator.kde.org/D21695
Several KDE projects use taglib, so we really need to provide a proper
find module in ECM.
AFAIK taglib-config should not be portable, so we don't try to
run it on WIN32. See also:
https://invent.kde.org/network/kio-extras/-/commit/548f525f4308810888c85f42a570139029c40618
Diffstat (limited to 'find-modules')
-rw-r--r-- | find-modules/FindTaglib.cmake | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/find-modules/FindTaglib.cmake b/find-modules/FindTaglib.cmake new file mode 100644 index 00000000..1e1b9075 --- /dev/null +++ b/find-modules/FindTaglib.cmake @@ -0,0 +1,90 @@ +#.rst: +# FindTaglib +#----------- +# +# Try to find the Taglib library. +# +# 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 <montel@kde.org> +# SPDX-FileCopyrightText: 2019 Heiko Becker <heirecka@exherbo.org> +# SPDX-FileCopyrightText: 2020 Elvis Angelaccio <elvis.angelaccio@kde.org> +# SPDX-License-Identifier: BSD-3-Clause + +find_package(PkgConfig QUIET) + +pkg_search_module(PC_TAGLIB QUIET taglib) + +find_path(Taglib_INCLUDE_DIRS + NAMES tag.h + PATH_SUFFIXES taglib + HINTS ${PC_TAGLIB_INCLUDEDIR} +) + +find_library(Taglib_LIBRARIES + NAMES tag + HINTS ${PC_TAGLIB_LIBDIR} +) + +set(Taglib_VERSION ${PC_TAGLIB_VERSION}) + +if (Taglib_INCLUDE_DIRS AND NOT Taglib_VERSION) + if(EXISTS "${Taglib_INCLUDE_DIRS}/taglib.h") + file(READ "${Taglib_INCLUDE_DIRS}/taglib.h" TAGLIB_H) + + 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}) + + 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() +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" +) |