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

0001 cmake_minimum_required(VERSION 3.16)
0002 
0003 project(Amarok)
0004 
0005 # Remove all warnings, ease the porting to cmake 3.x
0006 if (POLICY CMP0028)
0007     cmake_policy(SET CMP0028 NEW)
0008 endif()
0009 
0010 ###############
0011 
0012 set(KF5_MIN_VERSION "5.57.0")
0013 set(QT_REQUIRED_VERSION "5.15.0")
0014 find_package(PkgConfig REQUIRED)
0015 find_package(ECM ${KF5_MIN_VERSION} REQUIRED CONFIG)
0016 set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH})
0017 
0018 include(KDEInstallDirs)
0019 include(KDECMakeSettings)
0020 #include(KDEFrameworkCompilerSettings NO_POLICY_SCOPE)
0021 include(KDECompilerSettings NO_POLICY_SCOPE)
0022 include(FeatureSummary)
0023 include(ECMInstallIcons)
0024 include(ECMSetupVersion)
0025 include(ECMAddTests)
0026 include(ECMAddAppIcon)
0027 include(ECMPoQmTools)
0028 include(FindPkgConfig)
0029 include(CMakePushCheckState)
0030 include(GenerateExportHeader)
0031 
0032 find_package(Qt5 ${QT_REQUIRED_VERSION} REQUIRED COMPONENTS Core DBus Gui QuickWidgets Qml Sql Svg Test Widgets Xml)
0033 
0034 find_package(Qt5QuickControls2 ${QT_REQUIRED_VERSION})
0035 set_package_properties(Qt5QuickControls2 PROPERTIES TYPE RUNTIME PURPOSE "Needed by the player's context area")
0036 
0037 find_package(Qt5WebEngine ${QT_REQUIRED_VERSION})
0038 set_package_properties(Qt5WebEngine PROPERTIES TYPE OPTIONAL PURPOSE "Needed by the wikipedia applet")
0039 
0040 find_package(Qt5UiTools ${QT_REQUIRED_VERSION})
0041 set_package_properties(Qt5UiTools PROPERTIES TYPE OPTIONAL PURPOSE "Needed by the scripting engine")
0042 
0043 find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS
0044     Archive
0045     Attica
0046     Codecs
0047     Config
0048     ConfigWidgets
0049     CoreAddons
0050     Crash
0051     DBusAddons
0052     Declarative
0053     DNSSD
0054     DocTools
0055     GlobalAccel
0056     GuiAddons
0057     I18n
0058     IconThemes
0059     KCMUtils
0060     KIO
0061     NewStuff
0062     Notifications
0063     Package
0064     Solid
0065     TextEditor
0066     ThreadWeaver
0067     WidgetsAddons
0068     WindowSystem
0069 )
0070 
0071 find_package(KF5Kirigami2 ${KF5_MIN_VERSION})
0072 set_package_properties(KF5Kirigami2 PROPERTIES TYPE RUNTIME PURPOSE "Needed by the player's context area")
0073 
0074 ###############
0075 option(WITH_UTILITIES "Enable building of utilities" ON)
0076 option(WITH_PLAYER "Enable building of main Amarok player" ON)
0077 option(WITH_MP3Tunes "Enable mp3tunes in the Amarok player, requires multiple extra dependencies" ON)
0078 option(WITH_IPOD "Enable iPod support in Amarok" ON)
0079 option(WITH_PLAYGROUND "Enable building of playground scripts and applets (WARNING: some of them might have legal issues!)" OFF)
0080 
0081 ############### Taglib
0082 set(TAGLIB_MIN_VERSION "1.7")
0083 find_package(Taglib REQUIRED)
0084 set_package_properties( Taglib PROPERTIES DESCRIPTION "Support for Audio metadata." URL "http://developer.kde.org/~wheeler/taglib.html" TYPE REQUIRED PURPOSE "Required for tag reading" )
0085 
0086 # Check if TagLib is built with ASF and MP4 support
0087 include(CheckCXXSourceCompiles)
0088 cmake_push_check_state()
0089 set(CMAKE_REQUIRED_INCLUDES "${TAGLIB_INCLUDES}")
0090 set(CMAKE_REQUIRED_LIBRARIES "${TAGLIB_LIBRARIES}")
0091 
0092 check_cxx_source_compiles("#include <asftag.h>
0093 int main() { TagLib::ASF::Tag tag; return 0;}" TAGLIB_ASF_FOUND)
0094 if( NOT TAGLIB_ASF_FOUND )
0095     message(FATAL_ERROR "TagLib does not have ASF support compiled in.")
0096 endif()
0097 
0098 check_cxx_source_compiles("#include <mp4tag.h>
0099 int main() { TagLib::MP4::Tag tag(0, 0); return 0;}" TAGLIB_MP4_FOUND)
0100 if( NOT TAGLIB_MP4_FOUND )
0101     message(FATAL_ERROR "TagLib does not have MP4 support compiled in.")
0102 endif()
0103 
0104 check_cxx_source_compiles("#include <modtag.h>
0105 #include <modfile.h>
0106 #include <s3mfile.h>
0107 #include <itfile.h>
0108 #include <xmfile.h>
0109 using namespace TagLib;
0110 int main() { char *s; Mod::Tag tag; Mod::File modfile(s); S3M::File s3mfile(s);
0111 IT::File itfile(s); XM::File xmfile(s); return 0; }" TAGLIB_MOD_FOUND)
0112 
0113 check_cxx_source_compiles("#include <opusfile.h>
0114 int main() { char *s; TagLib::Ogg::Opus::File opusfile(s); return 0;}" TAGLIB_OPUS_FOUND)
0115 cmake_pop_check_state()
0116 
0117 set(TAGLIB-EXTRAS_MIN_VERSION "1.0")
0118 find_package(Taglib-Extras)
0119 set(TAGLIB_EXTRAS_FOUND ${TAGLIB-EXTRAS_FOUND}) # we need a c-compatible name for the include file
0120 
0121 include(CheckTagLibFileName)
0122 
0123 check_taglib_filename(COMPLEX_TAGLIB_FILENAME)
0124 ###############
0125 
0126 
0127 #Needed to conditionally build tests and gui
0128 find_package(Googlemock)
0129 set_package_properties( GOOGLEMOCK PROPERTIES DESCRIPTION "Used in Amarok's tests." URL "https://github.com/google/googlemock" TYPE OPTIONAL )
0130 
0131 if(NOT GOOGLEMOCK_FOUND)
0132     set(BUILD_TESTING OFF)
0133 endif()
0134 
0135 if(BUILD_TESTING)
0136    add_definitions(-DDEBUG)
0137 endif()
0138 
0139 if(WITH_DESKTOP_UI)
0140     add_definitions(-DDESKTOP_UI)
0141 endif()
0142 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fmessage-length=0")
0143 if (CMAKE_COMPILER_IS_GNUCXX)
0144     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fmessage-length=0")
0145     if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
0146         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,--as-needed")
0147     endif()
0148 endif ()
0149 
0150 include_directories(
0151     ${CMAKE_CURRENT_SOURCE_DIR}/shared
0152     ${CMAKE_CURRENT_BINARY_DIR}/shared
0153 )
0154 
0155 set(CMAKE_CXX_STANDARD 14)
0156 set(CMAKE_CXX_STANDARD_REQUIRED ON)
0157 
0158 # WORKAROUND for Clang bug: http://llvm.org/bugs/show_bug.cgi?id=15651
0159 if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND WIN32)
0160     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-delayed-template-parsing")
0161 endif ()
0162 
0163 ####################################################################################
0164 # CMAKE_AUTOMOC
0165 
0166 if(NOT CMAKE_VERSION VERSION_LESS "3.10.0")
0167     # CMake 3.9+ warns about automoc on files without Q_OBJECT, and doesn't know about other macros.
0168     # 3.10+ lets us provide more macro names that require automoc.
0169     list(APPEND CMAKE_AUTOMOC_MACRO_NAMES AMAROK_EXPORT_SIMPLE_IMPORTER_PLUGIN)
0170 endif()
0171 
0172 add_definitions(-DQT_NO_URL_CAST_FROM_STRING -DQT_NO_CAST_TO_ASCII)
0173 
0174 find_package(Phonon4Qt5 4.6.60 REQUIRED NO_MODULE)
0175 add_definitions(-DPHONON_LIB_SONAME=\"${PHONON_LIB_SONAME}\")
0176 
0177 find_package( LibLastFm )
0178 set( LIBLASTFM_MIN_VERSION "1.0.0" )
0179 if( LIBLASTFM_FOUND )
0180     if ( ${LIBLASTFM_MIN_VERSION} VERSION_LESS ${LIBLASTFM_VERSION} )
0181         set( LIBLASTFM_FOUND TRUE )
0182     endif()
0183 endif()
0184 
0185 string( TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_TOLOWER )
0186 if( CMAKE_BUILD_TYPE_TOLOWER MATCHES debug )
0187     set( DEBUG_BUILD_TYPE ON )
0188     add_definitions(-Wall -Wextra)
0189 endif()
0190 
0191 add_subdirectory( data )
0192 add_subdirectory( images )
0193 
0194 if( WITH_PLAYER )
0195     find_package(X11)
0196     find_package(Threads REQUIRED)
0197 
0198     find_package(MySQL)
0199 
0200     if( NOT MySQL_FOUND )
0201         find_package(MariaDB REQUIRED)
0202     endif()
0203 
0204     find_package(MySQLe)
0205     if( MySQLe_FOUND )
0206         set( BUILD_MYSQLE_COLLECTION TRUE )
0207         # zlib is required for mysql embedded
0208         find_package(ZLIB REQUIRED)
0209         set_package_properties( ZLIB PROPERTIES DESCRIPTION "zlib" TYPE REQUIRED )
0210     else()
0211         add_definitions( "-DNO_MYSQL_EMBEDDED" )
0212     endif()
0213 
0214     # We tell users that we need 1.0.3, but we really check just >= 1.0.0. This is because
0215     # upstream forgot to update version in lastfm/global.h, so it looks like 1.0.2. :-(
0216     # will be fixed in liblastfm-1.0.4
0217     set( LIBLASTFM_MIN_VERSION "1.0.3" )
0218     set_package_properties( LibLastFm PROPERTIES DESCRIPTION "Enable Last.Fm service, including scrobbling, song submissions, and suggested song dynamic playlists" URL "http://cdn.last.fm/client/liblastfm-${LIBLASTFM_MIN_VERSION}.tar.gz" TYPE OPTIONAL )
0219 
0220     find_package(FFmpeg)
0221     set_package_properties(FFmpeg PROPERTIES
0222         DESCRIPTION "Libraries and tools for handling multimedia data"
0223         URL "https://www.ffmpeg.org/"
0224         TYPE OPTIONAL
0225         PURPOSE "Enable MusicDNS service"
0226     )
0227 
0228     find_package(LibOFA)
0229     set_package_properties(LibOFA PROPERTIES
0230         DESCRIPTION "Open-source audio fingerprint by MusicIP"
0231         URL "http://code.google.com/p/musicip-libofa/"
0232         TYPE OPTIONAL
0233         PURPOSE "Enable MusicDNS service"
0234     )
0235 
0236     ## gpodder Service
0237     find_package(Mygpo-qt5 1.1.0 CONFIG)
0238     set_package_properties(Mygpo-qt5 PROPERTIES
0239         DESCRIPTION "A Qt/C++ library wrapping the gpodder.net Webservice."
0240         URL "http://wiki.gpodder.org/wiki/Libmygpo-qt"
0241         TYPE OPTIONAL
0242         PURPOSE "Synchronize podcast subscriptions with gpodder.net"
0243     )
0244 
0245     if( WITH_IPOD )
0246         find_package(Ipod)
0247         set(IPOD_MIN_VERSION "0.8.2")
0248         if( IPOD_FOUND AND NOT WIN32 )
0249             if ( ${IPOD_MIN_VERSION} VERSION_LESS ${IPOD_VERSION} )
0250                 set( IPOD_FOUND TRUE )
0251             endif()
0252         endif()
0253         set_package_properties( Ipod PROPERTIES DESCRIPTION "Support Apple iPod/iPad/iPhone audio devices" URL "http://sourceforge.net/projects/gtkpod/" TYPE OPTIONAL )
0254         find_package(GDKPixBuf)
0255         set_package_properties( GDKPixBuf PROPERTIES DESCRIPTION "Support for artwork on iPod audio devices via GDK-PixBuf" URL "http://developer.gnome.org/arch/imaging/gdkpixbuf.html" TYPE OPTIONAL )
0256     endif()
0257 
0258     find_package(Mtp 1.0.0)
0259     set_package_properties(Mtp PROPERTIES
0260         TYPE OPTIONAL
0261         PURPOSE "Enable Support for portable media devices that use the media transfer protocol"
0262     )
0263 
0264     if( WITH_MP3Tunes )
0265         find_package(CURL)
0266         set_package_properties( CURL PROPERTIES DESCRIPTION "Used to transfer data with URLs" URL "https://curl.haxx.se/" TYPE OPTIONAL )
0267 
0268         find_package(LibXml2)
0269         set_package_properties( LibXml2 PROPERTIES DESCRIPTION "LibXML2 is an XML parser required by mp3tunes." URL "http://www.xmlsoft.org" TYPE OPTIONAL )
0270 
0271         find_package(OpenSSL)
0272         find_package(Libgcrypt)
0273         if ( OPENSSL_FOUND OR LIBGCRYPT_FOUND )
0274             set (_mp3tunes_crypto TRUE )
0275         else ()
0276             message( SEND_ERROR "Building with mp3tunes support REQUIRES either OpenSSL or GNU Libgcrypt" )
0277         endif ()
0278         set_package_properties( OpenSSL PROPERTIES DESCRIPTION "OpenSSL or GNU Libgcrypt provides cryptographic functions required by mp3tunes." URL "http://www.openssl.org/ or http://www.gnupg.org/download/#libgcrypt" TYPE OPTIONAL )
0279         set_package_properties( Libgcrypt PROPERTIES DESCRIPTION "OpenSSL or GNU Libgcrypt provides cryptographic functions required by mp3tunes." URL "http://www.openssl.org/ or http://www.gnupg.org/download/#libgcrypt" TYPE OPTIONAL )
0280 
0281         find_package(Loudmouth)
0282         set_package_properties( Loudmouth PROPERTIES DESCRIPTION "Loudmouth is the communication backend needed by mp3tunes for syncing." URL "http://www.loudmouth-project.org" TYPE OPTIONAL )
0283 
0284         include(CheckQtGlib)
0285         set_package_properties( QT5_GLIB PROPERTIES DESCRIPTION "Qt5 must be compiled with glib support for mp3tunes" URL "http://www.trolltech.com" TYPE OPTIONAL )
0286     endif()
0287 
0288     if( WITH_IPOD OR WITH_MP3Tunes )
0289         pkg_search_module( GOBJECT REQUIRED gobject-2.0 )
0290         set_package_properties( GOBJECT PROPERTIES DESCRIPTION "Required by libgpod and mp3tunes." URL "http://www.gtk.org" TYPE OPTIONAL )
0291         pkg_search_module( GLIB2 glib-2.0 )
0292         set_package_properties( GLIB2 PROPERTIES DESCRIPTION "Required by libgpod and mp3tunes" URL "http://www.gtk.org" TYPE OPTIONAL )
0293     endif()
0294 
0295     find_package(Python3 COMPONENTS Interpreter)
0296     set_package_properties(Python3 PROPERTIES
0297         DESCRIPTION "Required for generating the autocompletion file for the script console"
0298         URL "https://www.python.org"
0299         TYPE OPTIONAL
0300     )
0301 
0302     find_package(FFTW3 REQUIRED)
0303 
0304     if( BUILD_TESTING AND NOT WIN32 )
0305         enable_testing()
0306         add_subdirectory( tests )
0307     endif()
0308 
0309     add_subdirectory( src )
0310     add_subdirectory( doc )
0311 
0312     feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES)
0313 
0314 endif()
0315 
0316 # this needs to be here because also code in shared/ needs config.h. This is also the
0317 # reason why various checks are above why they belong under if( WITH_PLAYER )
0318 configure_file( shared/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/shared/config.h )
0319 
0320 add_subdirectory( shared )
0321 
0322 if( WITH_UTILITIES )
0323     add_subdirectory( utilities )
0324 endif()
0325 
0326 if( WITH_PLAYGROUND )
0327     add_subdirectory( playground )
0328     message(STATUS "Included playground subdirectory in configuration")
0329 endif()
0330 
0331 ki18n_install( po )
0332 ecm_install_po_files_as_qm(poqm)