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)