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)