Warning, /multimedia/kid3/CMakeLists.txt is written in an unsupported language. File is not indexed.

0001 # Build Kid3 using CMake
0002 #
0003 # Linux:
0004 # cmake -DCMAKE_BUILD_TYPE=Release -DWITH_APPS=Qt -DCMAKE_INSTALL_PREFIX=/usr ../kid3
0005 # make
0006 # make install/strip DESTDIR=$(pwd)/inst # or
0007 # cpack
0008 #
0009 # Windows:
0010 # set INCLUDE=%MSYSDIR%\local\include
0011 # set LIB=%MSYSDIR%\local\lib
0012 # cmake -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX= ..\kid3
0013 # mingw32-make
0014 # cpack
0015 #
0016 # Mac OS X:
0017 # cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX= ../kid3
0018 # make
0019 # cpack
0020 
0021 # These markers are to tell releaseme (used by KDE neon and others) to not inject translations
0022 # SKIP_PO_INSTALL
0023 # SKIP_POQML_INSTALL
0024 
0025 cmake_minimum_required(VERSION 3.16)
0026 project(kid3)
0027 set(CMAKE_CXX_STANDARD 17)
0028 
0029 set(BUILD_SHARED_LIBS ON CACHE BOOL "build shared libraries")
0030 set(WITH_QML    ON CACHE BOOL "build with QML")
0031 set(WITH_TAGLIB ON CACHE BOOL "build with TagLib")
0032 set(WITH_MP4V2 OFF CACHE BOOL "build with mp4v2")
0033 set(WITH_FFMPEG OFF CACHE BOOL "force use of FFmpeg for Chromaprint decoding")
0034 set(WITH_CHROMAPRINT_FFMPEG OFF CACHE BOOL "link FFmpeg only for Chromaprint FFT")
0035 set(WITH_GSTREAMER OFF CACHE BOOL "force use of GStreamer for Chromaprint decoding")
0036 set(WITH_QAUDIODECODER OFF CACHE BOOL "force use of QAudioDecoder for Chromaprint decoding")
0037 set(WITH_NO_MANCOMPRESS OFF CACHE BOOL "disable compressed manpages")
0038 set(WITH_MULTIMEDIA ON CACHE BOOL "build with Qt Multimedia")
0039 if(ANDROID)
0040   set(CMAKE_INSTALL_PREFIX "" CACHE PATH "install path prefix" FORCE)
0041   set(WITH_ID3LIB OFF CACHE BOOL "build with id3lib")
0042   set(WITH_VORBIS OFF CACHE BOOL "build with Ogg/Vorbis")
0043   set(WITH_FLAC OFF CACHE BOOL "build with FLAC")
0044   set(WITH_CHROMAPRINT OFF CACHE BOOL "build with Chromaprint")
0045 else()
0046   set(WITH_ID3LIB ON CACHE BOOL "build with id3lib")
0047   set(WITH_VORBIS ON CACHE BOOL "build with Ogg/Vorbis")
0048   set(WITH_FLAC ON CACHE BOOL "build with FLAC")
0049   set(WITH_CHROMAPRINT ON CACHE BOOL "build with Chromaprint")
0050 endif()
0051 if(APPLE OR WIN32)
0052   set(WITH_DBUS OFF CACHE BOOL "build with QtDBus")
0053   set(WITH_APPS "Qt;CLI" CACHE STRING "build applications (Qt;CLI;Test)")
0054 elseif(ANDROID)
0055   set(WITH_DBUS OFF CACHE BOOL "build with QtDBus")
0056   set(WITH_APPS "Qml" CACHE STRING "build applications (Qml;Qt;CLI;Test)")
0057 else()
0058   set(WITH_DBUS ON CACHE BOOL "build with QtDBus")
0059   set(WITH_APPS "Qt;CLI;KDE" CACHE STRING "build applications (Qt;CLI;KDE;Test)")
0060 endif()
0061 if(WIN32)
0062   set(WITH_READLINE OFF CACHE BOOL "build with readline")
0063 else()
0064   set(WITH_READLINE ON CACHE BOOL "build with readline")
0065 endif()
0066 
0067 if(DEFINED WITH_KDE)
0068   unset(WITH_KDE CACHE)
0069   message(FATAL_ERROR "The variable WITH_KDE is no longer used. The KDE and Qt "
0070                       "applications can now be built together using common "
0071                       "libraries. Use WITH_APPS with a value of \"KDE\" for "
0072                       "the KDE application, \"Qt\" for the Qt application, "
0073                       "\"CLI\" for the command line application or "
0074                       "\"Qt;CLI;KDE\" for all. Default is -DWITH_APPS="
0075                       "\"${WITH_APPS}\".")
0076 endif()
0077 
0078 if(WITH_APPS)
0079   string(TOLOWER "${WITH_APPS}" _apps_lower)
0080   foreach(_app ${_apps_lower})
0081     string(REPLACE "\"" "" _app ${_app})
0082     if(_app STREQUAL "qt")
0083       set(BUILD_QT_APP ON)
0084     elseif(_app STREQUAL "qml")
0085       set(BUILD_QML_APP ON)
0086       set(WITH_QML ON)
0087     elseif(_app STREQUAL "cli")
0088       set(BUILD_CLI_APP ON)
0089     elseif(_app STREQUAL "kde")
0090       set(BUILD_KDE_APP ON)
0091     elseif(_app STREQUAL "test")
0092       set(BUILD_TEST_APP ON)
0093     else()
0094       message(SEND_ERROR "Invalid value ${_app} in WITH_APPS. "
0095                          "Supported applications are \"Qt;KDE;Test\".")
0096     endif()
0097   endforeach()
0098 endif()
0099 
0100 if(NOT BUILD_SHARED_LIBS AND WITH_QML)
0101   message(WARNING "Switching off WITH_QML because of static build")
0102   set(WITH_QML OFF)
0103   set(BUILD_QML_APP OFF)
0104 endif()
0105 
0106 
0107 # Version information
0108 set(CPACK_PACKAGE_VERSION_MAJOR 3)
0109 set(CPACK_PACKAGE_VERSION_MINOR 9)
0110 set(CPACK_PACKAGE_VERSION_PATCH 5)
0111 set(KID3_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
0112 set(CPACK_PACKAGE_VERSION ${KID3_VERSION})
0113 #set(CPACK_PACKAGE_VERSION "git20210123")
0114 set(RELEASE_YEAR 2024)
0115 
0116 # Platform specific default installation paths
0117 if(APPLE)
0118   set(WITH_DATAROOTDIR_DEFAULT "kid3.app/Contents/Resources")
0119   set(WITH_DOCDIR_DEFAULT "kid3.app/Contents/Resources")
0120   set(WITH_TRANSLATIONSDIR_DEFAULT "kid3.app/Contents/Resources")
0121   set(WITH_QMLDIR_DEFAULT "kid3.app/Contents/Resources/qml")
0122   set(WITH_BINDIR_DEFAULT ".")
0123   set(WITH_LIBDIR_DEFAULT "kid3.app/Contents/MacOS")
0124   set(WITH_PLUGINSDIR_DEFAULT "kid3.app/Contents/PlugIns")
0125 elseif(WIN32)
0126   set(WITH_DATAROOTDIR_DEFAULT ".")
0127   set(WITH_DOCDIR_DEFAULT ".")
0128   set(WITH_TRANSLATIONSDIR_DEFAULT ".")
0129   set(WITH_QMLDIR_DEFAULT "./qml")
0130   set(WITH_BINDIR_DEFAULT ".")
0131   set(WITH_LIBDIR_DEFAULT ".")
0132   set(WITH_PLUGINSDIR_DEFAULT "./plugins")
0133 elseif(ANDROID)
0134   set(WITH_DATAROOTDIR_DEFAULT ".")
0135   set(WITH_DOCDIR_DEFAULT ".")
0136   set(WITH_TRANSLATIONSDIR_DEFAULT ":/translations")
0137   set(WITH_QMLDIR_DEFAULT ":/")
0138   set(WITH_BINDIR_DEFAULT ".")
0139   set(WITH_LIBDIR_DEFAULT ".")
0140   set(WITH_PLUGINSDIR_DEFAULT ".")
0141   set(QT_ANDROID_APP_VERSION ${KID3_VERSION})
0142   set(QT_ANDROID_APP_VERSION_CODE 28)
0143 else()
0144   set(WITH_DATAROOTDIR_DEFAULT "share")
0145   set(WITH_DOCDIR_DEFAULT "share/doc/kid3-qt")
0146   if(BUILD_KDE_APP OR BUILD_SHARED_LIBS)
0147     set(WITH_TRANSLATIONSDIR_DEFAULT "share/kid3/translations")
0148   else()
0149     set(WITH_TRANSLATIONSDIR_DEFAULT "share/kid3-qt/translations")
0150   endif()
0151   set(WITH_QMLDIR_DEFAULT "share/kid3/qml")
0152   set(WITH_BINDIR_DEFAULT "bin")
0153   set(WITH_LIBDIR_DEFAULT "lib${LIB_SUFFIX}/kid3")
0154   set(WITH_PLUGINSDIR_DEFAULT "${WITH_LIBDIR_DEFAULT}/plugins")
0155 endif()
0156 
0157 set(WITH_DATAROOTDIR ${WITH_DATAROOTDIR_DEFAULT} CACHE STRING
0158     "data root directory relative to CMAKE_INSTALL_PREFIX")
0159 if(BUILD_KDE_APP)
0160   set(WITH_DBUSDIR "share/dbus-1/interfaces" CACHE STRING
0161       "dbus directory relative to CMAKE_INSTALL_PREFIX")
0162 endif()
0163 set(WITH_DOCDIR ${WITH_DOCDIR_DEFAULT} CACHE STRING
0164     "documentation directory relative to CMAKE_INSTALL_PREFIX")
0165 set(WITH_TRANSLATIONSDIR ${WITH_TRANSLATIONSDIR_DEFAULT} CACHE STRING
0166     "translations directory relative to CMAKE_INSTALL_PREFIX")
0167 set(WITH_BINDIR ${WITH_BINDIR_DEFAULT} CACHE STRING
0168     "binary directory relative to CMAKE_INSTALL_PREFIX")
0169 set(WITH_LIBDIR ${WITH_LIBDIR_DEFAULT} CACHE STRING
0170     "library directory relative to CMAKE_INSTALL_PREFIX")
0171 set(WITH_PLUGINSDIR ${WITH_PLUGINSDIR_DEFAULT} CACHE STRING
0172     "plugin directory relative to CMAKE_INSTALL_PREFIX")
0173 set(WITH_MANDIR ${WITH_DATAROOTDIR}/man CACHE STRING
0174     "man documentation directory relative to CMAKE_INSTALL_PREFIX")
0175 set(WITH_QMLDIR ${WITH_QMLDIR_DEFAULT} CACHE STRING
0176     "QML directory relative to CMAKE_INSTALL_PREFIX")
0177 if(CMAKE_INSTALL_PREFIX)
0178   set(CMAKE_INSTALL_PREFIX_SLASH "${CMAKE_INSTALL_PREFIX}/")
0179 else()
0180   set(CMAKE_INSTALL_PREFIX_SLASH "")
0181 endif()
0182 
0183 if(APPLE)
0184   file(RELATIVE_PATH CFG_DATAROOTDIR "/kid3.app/Contents/MacOS" /${WITH_DATAROOTDIR})
0185   file(RELATIVE_PATH CFG_DOCDIR "/kid3.app/Contents/MacOS" /${WITH_DOCDIR})
0186   file(RELATIVE_PATH CFG_TRANSLATIONSDIR "/kid3.app/Contents/MacOS" /${WITH_TRANSLATIONSDIR})
0187   file(RELATIVE_PATH CFG_QMLDIR "/kid3.app/Contents/MacOS" /${WITH_QMLDIR})
0188   file(RELATIVE_PATH CFG_PLUGINSDIR "/kid3.app/Contents/MacOS" /${WITH_PLUGINSDIR})
0189 elseif(WIN32)
0190   # When building with KDE craft, CMAKE_INSTALL_PREFIX would introduce paths inside the
0191   # CraftRoot. Remove the prefix and assume WITH_BINDIR to be the default ".".
0192   set(CFG_DATAROOTDIR ${WITH_DATAROOTDIR})
0193   set(CFG_DOCDIR ${WITH_DOCDIR})
0194   set(CFG_TRANSLATIONSDIR ${WITH_TRANSLATIONSDIR})
0195   set(CFG_QMLDIR ${WITH_QMLDIR})
0196   file(RELATIVE_PATH CFG_PLUGINSDIR /${WITH_BINDIR} /${WITH_PLUGINSDIR})
0197 else()
0198   set(CFG_DATAROOTDIR ${CMAKE_INSTALL_PREFIX_SLASH}${WITH_DATAROOTDIR})
0199   set(CFG_DOCDIR ${CMAKE_INSTALL_PREFIX_SLASH}${WITH_DOCDIR})
0200   set(CFG_TRANSLATIONSDIR ${CMAKE_INSTALL_PREFIX_SLASH}${WITH_TRANSLATIONSDIR})
0201   set(CFG_QMLDIR ${CMAKE_INSTALL_PREFIX_SLASH}${WITH_QMLDIR})
0202   file(RELATIVE_PATH CFG_PLUGINSDIR /${WITH_BINDIR} /${WITH_PLUGINSDIR})
0203 endif()
0204 if(CFG_PLUGINSDIR STREQUAL "")
0205   set(CFG_PLUGINSDIR ".")
0206 endif()
0207 if(WITH_QMLDIR MATCHES "^:/")
0208   set(HAVE_QMLDIR_IN_QRC 1)
0209 endif()
0210 if(WITH_TRANSLATIONSDIR MATCHES "^:/")
0211   set(HAVE_TRANSLATIONSDIR_IN_QRC 1)
0212 endif()
0213 set(CFG_QMLSRCDIR "${kid3_SOURCE_DIR}/src/qml")
0214 
0215 find_package(Threads)
0216 include(CTest)
0217 if(CMAKE_VERSION VERSION_LESS 3.12.0)
0218   set(Python_ADDITIONAL_VERSIONS 3)
0219   find_package(PythonInterp REQUIRED)
0220   # PythonInterp sets PYTHON_EXECUTABLE
0221 else()
0222   find_package(Python3 COMPONENTS Interpreter REQUIRED)
0223   set(PYTHON_EXECUTABLE "${Python3_EXECUTABLE}")
0224 endif()
0225 include (CheckCXXSourceCompiles)
0226 include (CheckCXXCompilerFlag)
0227 include (CheckLibraryExists)
0228 
0229 # Find Qt
0230 set(_qtDir)
0231 string(REGEX MATCH "^(.*[Qq]t[/\\]?([56]).*).bin.qmake.*" _qtDir "${QT_QMAKE_EXECUTABLE}")
0232 if(_qtDir)
0233   set(_qtDir ${CMAKE_MATCH_1})
0234   set(_qtVersionMajor ${CMAKE_MATCH_2})
0235   set(QT_DIR "${_qtDir}/lib/cmake/Qt${_qtVersionMajor}")
0236   set(Qt${_qtVersionMajor}Core_DIR "${_qtDir}/lib/cmake/Qt${_qtVersionMajor}Core")
0237   set(Qt${_qtVersionMajor}CoreTools_DIR "${_qtDir}/lib/cmake/Qt${_qtVersionMajor}CoreTools")
0238   set(Qt${_qtVersionMajor}_DIR "${_qtDir}/lib/cmake/Qt${_qtVersionMajor}")
0239   set(Qt${_qtVersionMajor}Gui_DIR "${_qtDir}/lib/cmake/Qt${_qtVersionMajor}Gui")
0240   set(Qt${_qtVersionMajor}GuiTools_DIR "${_qtDir}/lib/cmake/Qt${_qtVersionMajor}GuiTools")
0241   set(Qt${_qtVersionMajor}Widgets_DIR "${_qtDir}/lib/cmake/Qt${_qtVersionMajor}Widgets")
0242   set(Qt${_qtVersionMajor}WidgetsTools_DIR "${_qtDir}/lib/cmake/Qt${_qtVersionMajor}WidgetsTools")
0243   set(Qt${_qtVersionMajor}Network_DIR "${_qtDir}/lib/cmake/Qt${_qtVersionMajor}Network")
0244   set(Qt${_qtVersionMajor}Xml_DIR "${_qtDir}/lib/cmake/Qt${_qtVersionMajor}Xml")
0245   if(WITH_MULTIMEDIA)
0246     set(Qt${_qtVersionMajor}Multimedia_DIR "${_qtDir}/lib/cmake/Qt${_qtVersionMajor}Multimedia")
0247   endif()
0248   set(Qt${_qtVersionMajor}LinguistTools_DIR "${_qtDir}/lib/cmake/Qt${_qtVersionMajor}LinguistTools")
0249   set(Qt${_qtVersionMajor}Test_DIR "${_qtDir}/lib/cmake/Qt${_qtVersionMajor}Test")
0250   if(WITH_DBUS)
0251     set(Qt${_qtVersionMajor}DBusTools_DIR "${_qtDir}/lib/cmake/Qt${_qtVersionMajor}DBusTools")
0252     set(Qt${_qtVersionMajor}DBus_DIR "${_qtDir}/lib/cmake/Qt${_qtVersionMajor}DBus")
0253   endif()
0254   if(WITH_QML)
0255     set(Qt${_qtVersionMajor}Qml_DIR "${_qtDir}/lib/cmake/Qt${_qtVersionMajor}Qml")
0256     set(Qt${_qtVersionMajor}QmlTools_DIR "${_qtDir}/lib/cmake/Qt${_qtVersionMajor}QmlTools")
0257     set(Qt${_qtVersionMajor}Quick_DIR "${_qtDir}/lib/cmake/Qt${_qtVersionMajor}Quick")
0258   endif()
0259   if(BUILD_QML_APP)
0260     set(Qt${_qtVersionMajor}Svg_DIR "${_qtDir}/lib/cmake/Qt${_qtVersionMajor}Svg")
0261     set(Qt${_qtVersionMajor}QuickControls2_DIR "${_qtDir}/lib/cmake/Qt${_qtVersionMajor}QuickControls2")
0262   endif()
0263   if(ANDROID)
0264     if(_qtVersionMajor EQUAL 6)
0265       set(Qt${_qtVersionMajor}QmlIntegration_DIR "${_qtDir}/lib/cmake/Qt${_qtVersionMajor}QmlIntegration")
0266       set(Qt${_qtVersionMajor}QmlModels_DIR "${_qtDir}/lib/cmake/Qt${_qtVersionMajor}QmlModels")
0267       set(Qt${_qtVersionMajor}OpenGL_DIR "${_qtDir}/lib/cmake/Qt${_qtVersionMajor}OpenGL")
0268       set(Qt${_qtVersionMajor}QuickTemplates2_DIR "${_qtDir}/lib/cmake/Qt${_qtVersionMajor}QuickTemplates2")
0269     else()
0270       set(Qt${_qtVersionMajor}AndroidExtras_DIR "${_qtDir}/lib/cmake/Qt${_qtVersionMajor}AndroidExtras")
0271     endif()
0272   endif()
0273 endif()
0274 if(BUILD_WITH_QT6)
0275   find_package(QT NAMES Qt6 COMPONENTS Core REQUIRED)
0276 else()
0277   find_package(QT NAMES Qt5 Qt6 COMPONENTS Core REQUIRED)
0278 endif()
0279 if(QT_VERSION_MAJOR EQUAL 6 AND QT_VERSION_MINOR LESS 2)
0280   set(WITH_MULTIMEDIA OFF)
0281 endif()
0282 set(_qtComponents Core Gui Widgets Network Xml LinguistTools)
0283 if(WITH_MULTIMEDIA)
0284   set(_qtComponents ${_qtComponents} Multimedia)
0285 endif()
0286 if(BUILD_TESTING)
0287   set(_qtComponents ${_qtComponents} Test)
0288 endif()
0289 if(WITH_DBUS)
0290   set(_qtComponents ${_qtComponents} DBus)
0291 endif()
0292 if(WITH_QML)
0293   set(_qtComponents ${_qtComponents} Qml Quick)
0294 endif()
0295 if(BUILD_QML_APP)
0296   set(_qtComponents ${_qtComponents} Svg QuickControls2)
0297 endif()
0298 if(ANDROID AND QT_VERSION_MAJOR LESS 6)
0299   set(_qtComponents ${_qtComponents} AndroidExtras)
0300 endif()
0301 find_package(Qt${QT_VERSION_MAJOR} COMPONENTS ${_qtComponents} REQUIRED)
0302 
0303 if(WITH_DBUS)
0304   set(HAVE_QTDBUS 1)
0305 endif()
0306 if(WITH_MULTIMEDIA)
0307   set(HAVE_QTMULTIMEDIA 1)
0308 endif()
0309 get_target_property(QT_LIBRARY_DIR Qt${QT_VERSION_MAJOR}::Core LOCATION)
0310 get_filename_component(QT_LIBRARY_DIR ${QT_LIBRARY_DIR} PATH)
0311 if(APPLE)
0312   # For Mac Qt5.5.0 QT_LIBRARY_DIR is wrong
0313   # (<installdir>/Qt5.5.0/5.5/clang_64/lib/QtCore.framework),
0314   # also for Mac Qt6.2.2 it is wrong
0315   # (<installdir>/6.2.2/macos/lib/QtCore.framework/Versions/A), fix it.
0316   string(REGEX MATCH "^(.*)/QtCore.framework.*$" _qtLibDir "${QT_LIBRARY_DIR}")
0317   if(_qtLibDir)
0318     set(QT_LIBRARY_DIR ${CMAKE_MATCH_1})
0319   endif()
0320   # Fix to find dependencies when Homebrew Qt is installed in its own folder.
0321   # You may have to "eval $(brew shellenv)" for HOMEBREW_PREFX to be set.
0322   if(DEFINED ENV{HOMEBREW_PREFIX} AND QT_LIBRARY_DIR STREQUAL "$ENV{HOMEBREW_PREFIX}/opt/qt/lib")
0323     set(QT_LIBRARY_DIR "$ENV{HOMEBREW_PREFIX}/lib")
0324   endif()
0325 endif()
0326 if(TARGET Qt${QT_VERSION_MAJOR}::lupdate)
0327   get_target_property(QT_LUPDATE_EXECUTABLE Qt${QT_VERSION_MAJOR}::lupdate LOCATION)
0328 endif()
0329 if(TARGET Qt${QT_VERSION_MAJOR}::QJpegPlugin)
0330   get_target_property(QT_PLUGINS_DIR Qt${QT_VERSION_MAJOR}::QJpegPlugin LOCATION)
0331 endif()
0332 if(QT_PLUGINS_DIR)
0333   get_filename_component(QT_PLUGINS_DIR ${QT_PLUGINS_DIR} PATH)
0334   get_filename_component(QT_PLUGINS_DIR ${QT_PLUGINS_DIR} PATH)
0335 elseif(_qtDir)
0336   set(QT_PLUGINS_DIR ${_qtDir}/plugins)
0337 else()
0338   # Before Qt 5.2 and with Qt 6, there seems to be no way to get the plugins directory.
0339   # Assume it is on the same level as the bin directory.
0340   get_target_property(_qmakeLocation Qt${QT_VERSION_MAJOR}::qmake LOCATION)
0341   get_filename_component(QT_PLUGINS_DIR ${_qmakeLocation} PATH)
0342   get_filename_component(QT_PLUGINS_DIR ${QT_PLUGINS_DIR} PATH)
0343   set(QT_PLUGINS_DIR ${QT_PLUGINS_DIR}/plugins)
0344 endif()
0345 
0346 if(QT_VERSION VERSION_LESS 5.15)
0347   function(qt_wrap_cpp outfiles)
0348     qt5_wrap_cpp("${outfiles}" ${ARGN})
0349     set("${outfiles}" "${${outfiles}}" PARENT_SCOPE)
0350   endfunction()
0351 
0352   function(qt_add_resources outfiles)
0353     qt5_add_resources("${outfiles}" ${ARGN})
0354     set("${outfiles}" "${${outfiles}}" PARENT_SCOPE)
0355   endfunction()
0356 
0357   function(qt_add_translation _qm_files)
0358     qt5_add_translation("${_qm_files}" ${ARGN})
0359     set("${_qm_files}" "${${_qm_files}}" PARENT_SCOPE)
0360   endfunction()
0361 endif()
0362 
0363 get_target_property(_qmakeLocation Qt${QT_VERSION_MAJOR}::qmake LOCATION)
0364 message(STATUS "Found Qt-Version ${QT_VERSION} (using ${_qmakeLocation})")
0365 
0366 # QT_MAJOR_VERSION is used for KDE, to use the same code for KF5 and KF6.
0367 if(NOT QT_MAJOR_VERSION)
0368   if(QT_VERSION_MAJOR)
0369     set(QT_MAJOR_VERSION ${QT_VERSION_MAJOR})
0370   else()
0371     set(QT_MAJOR_VERSION "5")
0372   endif()
0373 endif()
0374 
0375 if(LINUX_SELF_CONTAINED)
0376   set(CPACK_INSTALL_PREFIX "")
0377   # Avoid GLIBC_2.14 not found errors on older systems like Debian Wheezy.
0378   # https://stackoverflow.com/questions/8823267/linking-against-older-symbol-version-in-a-so-file
0379   set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -include ${CMAKE_CURRENT_SOURCE_DIR}/linux/glibc_version_nightmare.h")
0380   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -include ${CMAKE_CURRENT_SOURCE_DIR}/linux/glibc_version_nightmare.h")
0381   # Use RPATH instead of RUNPATH, the RPATH of the loading executable has to be used, see
0382   # https://www.qt.io/blog/2011/10/28/rpath-and-runpath
0383   set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--disable-new-dtags")
0384   set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--disable-new-dtags")
0385 endif()
0386 
0387 # Check that QT_NO_DEBUG is defined for release configurations
0388 foreach(_buildType RELWITHDEBINFO RELEASE MINSIZEREL)
0389   if(NOT CMAKE_CXX_FLAGS_${_buildType} MATCHES "-DQT_NO_DEBUG")
0390     set(CMAKE_CXX_FLAGS_${_buildType} "${CMAKE_CXX_FLAGS_${_buildType}} -DQT_NO_DEBUG")
0391   endif()
0392 endforeach()
0393 
0394 ### Check for xsltproc
0395 find_program(XSLTPROC xsltproc DOC "xsltproc transforms XML via XSLT"
0396   PATHS $ENV{XSLTPROCDIR})
0397 if(NOT XSLTPROC)
0398   message(FATAL_ERROR "Could not find xsltproc")
0399 endif()
0400 
0401 ### Check for HTML docbook.xsl
0402 file(GLOB _versionedStyleSheetDir /usr/share/xml/docbook/xsl-stylesheets-*)
0403 find_path(DOCBOOK_XSL_DIR xhtml/docbook.xsl
0404   PATHS ${WITH_DOCBOOKDIR}
0405         /usr/share/xml/docbook/stylesheet/nwalsh
0406         /usr/share/xml/docbook/stylesheet/nwalsh/current
0407         /usr/share/xml/docbook/stylesheet/docbook-xsl
0408         /usr/share/xml/docbook/stylesheet/docbook-xsl-ns
0409         /usr/share/sgml/docbook/xsl-stylesheets
0410         /usr/share/apps/ksgmltools2/docbook/xsl
0411        ${_versionedStyleSheetDir}
0412        $ENV{DOCBOOKDIR}
0413        $ENV{HOME}/docbook-xsl-1.72.0
0414   NO_DEFAULT_PATH)
0415 if(NOT DOCBOOK_XSL_DIR)
0416   message(FATAL_ERROR "Could not find HTML docbook.xsl")
0417 endif()
0418 
0419 if(WIN32)
0420   link_directories($ENV{LIB})
0421 endif()
0422 
0423 if(BUILD_SHARED_LIBS)
0424   add_definitions(-DKID3_SHARED)
0425 
0426   # the RPATH to be used when installing, but only if it's not a system directory
0427   # see https://gitlab.kitware.com/cmake/community/-/wikis/doc/cmake/RPATH-handling
0428   set(_prefixLibdir "${CMAKE_INSTALL_PREFIX}/${WITH_LIBDIR}")
0429   list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${_prefixLibdir}" _isSystemDir)
0430   if("${_isSystemDir}" STREQUAL "-1")
0431     list(FIND CMAKE_INSTALL_RPATH "${_prefixLibdir}" _rpathContainsLibdir)
0432     if("${_rpathContainsLibdir}" STREQUAL "-1")
0433       list(APPEND CMAKE_INSTALL_RPATH "${_prefixLibdir}")
0434       if(CMAKE_SKIP_RPATH AND NOT ANDROID)
0435         message(WARNING
0436           "RPATH needs to be set to \"${_prefixLibdir}\" but CMAKE_SKIP_RPATH "
0437           "is set! Disable CMAKE_SKIP_RPATH or set WITH_LIBDIR (which is now "
0438           "\"${WITH_LIBDIR}\") to a system directory, "
0439           "e.g. \"-DWITH_LIBDIR=lib\".")
0440       endif()
0441     endif()
0442   endif()
0443 endif()
0444 
0445 ### Check for zlib
0446 if(WIN32)
0447   if(NOT MSVC)
0448     find_library(_ZLIB_PATH_NAME z)
0449     if(_ZLIB_PATH_NAME)
0450       get_filename_component(_ZLIB_PATH ${_ZLIB_PATH_NAME} PATH)
0451     else()
0452       message(FATAL_ERROR "Could not find zlib")
0453     endif()
0454     set(ZLIB_LIBRARIES "-L${_ZLIB_PATH}" -lz)
0455   endif()
0456 else()
0457   set(ZLIB_LIBRARIES -lz)
0458 endif()
0459 
0460 ### Check for QML
0461 if(WITH_QML AND (QT_QTDECLARATIVE_FOUND OR Qt${QT_VERSION_MAJOR}Qml_FOUND))
0462   set(HAVE_QML 1)
0463 endif()
0464 
0465 ### Check for libQtDBus
0466 if(WITH_DBUS AND QT_QTDBUS_LIBRARY)
0467   set(HAVE_QTDBUS 1)
0468 endif()
0469 
0470 ### Check for mntent.h
0471 include(CheckIncludeFile)
0472 check_include_file("mntent.h" HAVE_MNTENT_H)
0473 
0474 
0475 if(CMAKE_COMPILER_IS_GNUCC)
0476   set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wundef -Wcast-align -Wall -W -Wpointer-arith -D_REENTRANT")
0477 endif()
0478 if(CMAKE_COMPILER_IS_GNUCXX)
0479   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wundef -Wcast-align -Wall -W -Wpointer-arith -fno-check-new -fno-common -D_REENTRANT")
0480   check_cxx_compiler_flag(-Woverloaded-virtual _HAVE_W_OVERLOADED_VIRTUAL)
0481   if(_HAVE_W_OVERLOADED_VIRTUAL)
0482     set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Woverloaded-virtual")
0483   endif()
0484 endif()
0485 if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
0486   set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wundef -Wcast-align -Wall -W -Wpointer-arith -D_REENTRANT")
0487   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wundef -Wcast-align -Wall -W -Wpointer-arith -Woverloaded-virtual -fno-common -Werror=return-type -Wweak-vtables -D_REENTRANT")
0488 endif()
0489 if(APPLE)
0490   execute_process(COMMAND sw_vers -productVersion OUTPUT_VARIABLE _osxVersion
0491       OUTPUT_STRIP_TRAILING_WHITESPACE)
0492   if(_osxVersion VERSION_LESS "10.10" AND NOT CMAKE_CXX_COMPILER MATCHES "/osxcross/")
0493     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mmacosx-version-min=10.5")
0494     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mmacosx-version-min=10.5")
0495   else()
0496     if(QT_VERSION_MAJOR EQUAL 6 AND QT_VERSION_MINOR GREATER_EQUAL 5)
0497       set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mmacosx-version-min=10.15")
0498       set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mmacosx-version-min=10.15 -stdlib=libc++")
0499     else()
0500       set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mmacosx-version-min=10.7")
0501       set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mmacosx-version-min=10.7 -stdlib=libc++")
0502     endif()
0503     set(CMAKE_LD_FLAGS "${CMAKE_LD_FLAGS} -stdlib=libc++")
0504   endif()
0505 endif()
0506 include_directories(${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR})
0507 
0508 if(NOT WIN32)
0509   check_cxx_compiler_flag(-fvisibility=hidden _HAVE_GCC_VISIBILITY)
0510   if(_HAVE_GCC_VISIBILITY)
0511     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden")
0512     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden -fvisibility-inlines-hidden")
0513   endif()
0514 endif()
0515 
0516 if(UNIX AND NOT APPLE)
0517   set(KID3_EXECUTABLE kid3-qt)
0518 else()
0519   set(KID3_EXECUTABLE kid3)
0520 endif()
0521 
0522 configure_file(config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h)
0523 
0524 if(APPLE AND CMAKE_STRIP)
0525   # Do something against these error messages starting with
0526   # strip: symbols referenced by indirect symbol table entries that can't be stripped in
0527   configure_file(${CMAKE_CURRENT_SOURCE_DIR}/strip_silent.sh.in
0528                  ${CMAKE_CURRENT_BINARY_DIR}/strip_silent.sh
0529                  @ONLY)
0530   set(CMAKE_STRIP "${CMAKE_CURRENT_BINARY_DIR}/strip_silent.sh")
0531 endif()
0532 
0533 add_subdirectory(src)
0534 add_subdirectory(doc)
0535 add_subdirectory(translations)
0536 
0537 if(ANDROID)
0538   add_subdirectory(android)
0539 endif()
0540 
0541 
0542 if(BUILD_TESTING)
0543   add_test(NAME test_cli_functions
0544            COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/src/test/test_cli_functions.py)
0545   add_custom_target(check ${CMAKE_CTEST_COMMAND} --output-on-failure)
0546   if(NOT CMAKE_VERSION VERSION_LESS "3.17")
0547     list(APPEND CMAKE_CTEST_ARGUMENTS --output-on-failure)
0548   endif()
0549 endif()
0550 
0551 
0552 # To create a package, run cpack
0553 if(APPLE)
0554   if(CMAKE_HOST_APPLE)
0555     install(SCRIPT ${CMAKE_SOURCE_DIR}/macosx/mac-codesign.cmake)
0556   endif()
0557   set(CPACK_BINARY_DRAGNDROP ON)
0558   set(CPACK_GENERATOR DragNDrop)
0559 elseif(WIN32)
0560   set(CPACK_GENERATOR ZIP)
0561 elseif(LINUX_SELF_CONTAINED)
0562   set(CPACK_GENERATOR TGZ)
0563 else()
0564   set(CPACK_GENERATOR DEB)
0565 endif()
0566 
0567 if(BUILD_KDE_APP OR APPLE OR WIN32 OR LINUX_SELF_CONTAINED)
0568   set(CPACK_PACKAGE_NAME "kid3")
0569   set(CPACK_DEBIAN_PACKAGE_SECTION "kde")
0570 else()
0571   set(CPACK_PACKAGE_NAME "kid3-qt")
0572   set(CPACK_DEBIAN_PACKAGE_SECTION "sound")
0573 endif()
0574 set(CPACK_PACKAGE_CONTACT "ufleisch@users.sourceforge.net")
0575 set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Audio tag editor")
0576 set(CPACK_STRIP_FILES ON)
0577 set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://kid3.kde.org/")
0578 set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
0579 set(CPACK_SET_DESTDIR ON)
0580 
0581 include(CPack)