diff --git a/CMakeLists.txt b/CMakeLists.txt index 40f8a56639..fbbb338498 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,268 +1,268 @@ cmake_minimum_required(VERSION 2.8.12) project(Amarok) # Remove all warnings, ease the porting to cmake 3.x if (POLICY CMP0028) cmake_policy(SET CMP0028 NEW) endif() ############### find_package(PkgConfig REQUIRED) find_package(ECM 1.7.0 REQUIRED CONFIG) set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH}) include(KDEInstallDirs) include(KDECMakeSettings) include(KDECompilerSettings NO_POLICY_SCOPE) include(FeatureSummary) include(ECMInstallIcons) include(ECMSetupVersion) include(ECMAddTests) include(ECMAddAppIcon) include(FindPkgConfig) find_package( Qt5 REQUIRED COMPONENTS Core DBus Gui Quick QuickWidgets Qml Script ScriptTools Sql Svg Test Widgets Xml ) find_package( KF5 REQUIRED COMPONENTS Archive Codecs CoreAddons DBusAddons Declarative DNSSD GlobalAccel GuiAddons I18n IconThemes KCMUtils KIO NewStuff Notifications NotifyConfig Package Solid TextEditor ThreadWeaver WindowSystem ) ############### option(WITH_UTILITIES "Enable building of utilities" ON) option(WITH_PLAYER "Enable building of main Amarok player" ON) option(WITH_MP3Tunes "Enable mp3tunes in the Amarok player, requires multiple extra dependencies" ON) option(WITH_IPOD "Enable iPod support in Amarok" ON) option(WITH_MYSQL_EMBEDDED "Build the embedded database library -- highly recommended" ON) option(WITH_PLAYGROUND "Enable building of playground scripts and applets (WARNING: some of them might have legal issues!)" OFF) ############### Taglib set(TAGLIB_MIN_VERSION "1.7") find_package(Taglib REQUIRED) # Check if TagLib is built with ASF and MP4 support include(CheckCXXSourceCompiles) set(CMAKE_REQUIRED_INCLUDES "${TAGLIB_INCLUDES}") set(CMAKE_REQUIRED_LIBRARIES "${TAGLIB_LIBRARIES}") check_cxx_source_compiles("#include int main() { TagLib::ASF::Tag tag; return 0;}" TAGLIB_ASF_FOUND) if( NOT TAGLIB_ASF_FOUND ) message(FATAL_ERROR "TagLib does not have ASF support compiled in.") endif() check_cxx_source_compiles("#include int main() { TagLib::MP4::Tag tag(0, 0); return 0;}" TAGLIB_MP4_FOUND) if( NOT TAGLIB_MP4_FOUND ) message(FATAL_ERROR "TagLib does not have MP4 support compiled in.") endif() check_cxx_source_compiles("#include #include #include #include #include using namespace TagLib; int main() { char *s; Mod::Tag tag; Mod::File modfile(s); S3M::File s3mfile(s); IT::File itfile(s); XM::File xmfile(s); return 0; }" TAGLIB_MOD_FOUND) check_cxx_source_compiles("#include int main() { char *s; TagLib::Ogg::Opus::File opusfile(s); return 0;}" TAGLIB_OPUS_FOUND) set(CMAKE_REQUIRED_INCLUDES) set(CMAKE_REQUIRED_LIBRARIES) set(TAGLIB-EXTRAS_MIN_VERSION "1.0") find_package(Taglib-Extras) set(TAGLIB_EXTRAS_FOUND ${TAGLIB-EXTRAS_FOUND}) # we need a c-compatible name for the include file include(CheckTagLibFileName) check_taglib_filename(COMPLEX_TAGLIB_FILENAME) ############### #Needed to conditionally build tests and gui if(BUILD_TESTING) add_definitions(-DDEBUG) endif() if(WITH_DESKTOP_UI) add_definitions(-DDESKTOP_UI) endif() set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fmessage-length=0") if (CMAKE_COMPILER_IS_GNUCXX) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fmessage-length=0") if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,--as-needed") endif() endif () include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/shared ${CMAKE_CURRENT_BINARY_DIR}/shared ) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") # Require C++11 # WORKAROUND for Clang bug: http://llvm.org/bugs/show_bug.cgi?id=15651 if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND WIN32) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-delayed-template-parsing") endif () add_definitions(-DQT_NO_URL_CAST_FROM_STRING) find_package(Phonon4Qt5 4.6.60 REQUIRED NO_MODULE) include_directories(BEFORE ${PHONON_INCLUDES}) find_package( LibLastFm ) set( LIBLASTFM_MIN_VERSION "1.0.0" ) if( LIBLASTFM_FOUND ) if ( ${LIBLASTFM_MIN_VERSION} VERSION_LESS ${LIBLASTFM_VERSION} ) set( LIBLASTFM_FOUND TRUE ) endif() endif() find_package( LibOFA ) if( LIBOFA_FOUND ) PKG_SEARCH_MODULE(AVCODEC libavcodec) PKG_SEARCH_MODULE(AVFORMAT libavformat) PKG_SEARCH_MODULE(AVUTIL libavutil) endif() string( TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_TOLOWER ) if( CMAKE_BUILD_TYPE_TOLOWER MATCHES debug ) set( DEBUG_BUILD_TYPE ON ) add_definitions(-Wall -Wextra) endif() # this needs to be here because also code in shared/ needs config.h. This is also the # reason why various checks are above why they belong under if( WITH_PLAYER ) configure_file( shared/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/shared/config.h ) add_subdirectory( data ) add_subdirectory( images ) add_subdirectory( shared ) if( WITH_PLAYER ) set_package_properties( QTOPENGL PROPERTIES DESCRIPTION "Required for the spectrum analyzer" URL "http://qt-project.org" TYPE OPTIONAL ) find_package(X11) find_package(MySQLAmarok REQUIRED) if( WITH_MYSQL_EMBEDDED ) set( BUILD_MYSQLE_COLLECTION TRUE ) set_package_properties( MYSQLD PROPERTIES DESCRIPTION "Embedded MySQL Libraries" URL "http://www.mysql.com" TYPE REQUIRED ) else() add_definitions( "-DNO_MYSQL_EMBEDDED" ) endif() set_package_properties( MYSQL PROPERTIES DESCRIPTION "MySQL Server Libraries" URL "http://www.mysql.com" TYPE REQUIRED ) # zlib is required for mysql embedded find_package(ZLIB REQUIRED) set_package_properties( ZLIB PROPERTIES DESCRIPTION "zlib" TYPE REQUIRED ) # QJson is required for the PlaydarCollection find_package(QJSON) set_package_properties( QJSON PROPERTIES DESCRIPTION "Qt JSON Parser used for the Playdar Collection" URL "http://qjson.sourceforge.net/" TYPE OPTIONAL ) # We tell users that we need 1.0.3, but we really check just >= 1.0.0. This is because # upstream forgot to update version in lastfm/global.h, so it looks like 1.0.2. :-( # will be fixed in liblastfm-1.0.4 set( LIBLASTFM_MIN_VERSION "1.0.3" ) 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 ) if( LIBOFA_FOUND ) set_package_properties(LIBOFA PROPERTIES DESCRIPTION "Enable MusicDNS service" URL "http://code.google.com/p/musicip-libofa/" TYPE OPTIONAL) endif() ## gpodder Service ## Currently disabled as it can crash Amarok on startup, during dynamic linking phase, before main() is reached. # find_package( Mygpo-qt 1.0.7 QUIET ) # set_package_properties( LIBMYGPO_QT PROPERTIES DESCRIPTION "Enable gpodder.net service" URL "http://wiki.gpodder.org/wiki/Libmygpo-qt" TYPE OPTIONAL ) # macro_bool_to_01( LIBMYGPO_QT_FOUND HAVE_LIBMYGPOQT ) if( WITH_IPOD ) find_package(Ipod) set(IPOD_MIN_VERSION "0.8.2") if( IPOD_FOUND AND NOT WIN32 ) if ( ${IPOD_MIN_VERSION} VERSION_LESS ${IPOD_VERSION} ) set( IPOD_FOUND TRUE ) endif() endif() set_package_properties( IPOD PROPERTIES DESCRIPTION "Support Apple iPod/iPad/iPhone audio devices" URL "http://sourceforge.net/projects/gtkpod/" TYPE OPTIONAL ) find_package(GDKPixBuf) 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 ) endif() find_package(Mtp) set_package_properties(MTP PROPERTIES DESCRIPTION "Enable Support for portable media devices that use the media transfer protocol" URL "http://libmtp.sourceforge.net/" TYPE OPTIONAL ) if( WITH_MP3Tunes ) find_package(CURL) set_package_properties( MTP PROPERTIES DESCRIPTION "Enable Support for portable media devices that use the media transfer protocol" URL "http://libmtp.sourceforge.net/" TYPE OPTIONAL ) find_package(LibXml2) set_package_properties( LIBXML2 PROPERTIES DESCRIPTION "LibXML2 is an XML parser required by mp3tunes." URL "http://www.xmlsoft.org" TYPE OPTIONAL ) find_package(OpenSSL) find_package(Libgcrypt) if ( OPENSSL_FOUND OR LIBGCRYPT_FOUND ) set (_mp3tunes_crypto TRUE ) else () message( SEND_ERROR "Building with mp3tunes support REQUIRES either OpenSSL or GNU Libgcrypt" ) endif () set_package_properties( OPENSSL_OR_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 ) find_package(Loudmouth) set_package_properties( LOUDMOUTH PROPERTIES DESCRIPTION "Loudmouth is the communication backend needed by mp3tunes for syncing." URL "http://www.loudmouth-project.org" TYPE OPTIONAL ) include(CheckQtGlib) - set_package_properties( QT4_GLIB PROPERTIES DESCRIPTION "Qt4 must be compiled with glib support for mp3tunes" URL "http://www.trolltech.com" TYPE OPTIONAL ) + set_package_properties( QT5_GLIB PROPERTIES DESCRIPTION "Qt5 must be compiled with glib support for mp3tunes" URL "http://www.trolltech.com" TYPE OPTIONAL ) endif() if( WITH_IPOD OR WITH_MP3Tunes ) pkg_search_module(GOBJECT REQUIRED gobject-2.0) set_package_properties( GOBJECT PROPERTIES DESCRIPTION "Required by libgpod and mp3tunes." URL "http://www.gtk.org" TYPE OPTIONAL ) pkg_search_module(GLIB2 glib-2.0) set_package_properties( GLIB2 PROPERTIES DESCRIPTION "Required by libgpod and mp3tunes" URL "http://www.gtk.org" TYPE OPTIONAL ) endif() find_program( CLAMZ_FOUND clamz PATH ) set_package_properties( CLAMZ PROPERTIES DESCRIPTION "Optional requirement to download songs from the Amazon MP3 store. Highly recommended on Linux, as the official downloader from Amazon is quite broken on many systems." URL "https://code.google.com/p/clamz/" TYPE OPTIONAL ) find_package(PythonInterp) set_package_properties( PYTHON PROPERTIES DESCRIPTION "Required for generating the autocompletion file for the script console" URL "https://www.python.org" TYPE OPTIONAL ) if( BUILD_TESTING AND NOT WIN32 ) enable_testing() # add_subdirectory( tests ) endif() add_subdirectory( src ) # Also display taglib in the feature log 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" ) # following line is here (and not near TAGLIB_MOD_FOUND) because there may be no MacroLogFeature without kdelibs set_package_properties( TAGLIB_MOD PROPERTIES DESCRIPTION "Additional support for Audio metadata of mod, s3m, it and xm files." URL "http://developer.kde.org/~wheeler/taglib.html" TYPE OPTIONAL ) set_package_properties( TAGLIB_OPUS PROPERTIES DESCRIPTION "Additional support for Audio metadata of opus files." URL "http://developer.kde.org/~wheeler/taglib.html" TYPE OPTIONAL ) feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES) #Do not remove or modify these. The release script substitutes in for these #comments with appropriate doc and translation directories. #PO_SUBDIR #DOC_SUBDIR endif() if( WITH_UTILITIES ) set(EXEC_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX} CACHE PATH "Base directory for executables and libraries" FORCE) set(BIN_INSTALL_DIR "${EXEC_INSTALL_PREFIX}/bin" CACHE PATH "The subdirectory to the binaries prefix (default prefix/bin)" FORCE) add_subdirectory( utilities ) endif() if( WITH_PLAYGROUND ) add_subdirectory( playground ) message(STATUS "Included playground subdirectory in configuration") endif() include(CTest) diff --git a/cmake/modules/CheckQtGlib.cmake b/cmake/modules/CheckQtGlib.cmake index 978f059a08..da2d9e182b 100644 --- a/cmake/modules/CheckQtGlib.cmake +++ b/cmake/modules/CheckQtGlib.cmake @@ -1,14 +1,12 @@ -set(CMAKE_REQUIRED_INCLUDES ${QT_INCLUDES}) -set(CMAKE_REQUIRED_DEFINITIONS "") -set(CMAKE_REQUIRED_FLAGS "") +set(CMAKE_REQUIRED_LIBRARIES Qt5::Core) check_cxx_source_compiles(" #include int main() { -#if defined(QT_NO_GLIBASDF) +#if defined(QT_NO_GLIB) #error \"Qt was compiled with Glib disabled\" #endif return 0; }" -QT4_GLIB_SUPPORT) +QT5_GLIB_SUPPORT) diff --git a/src/services/mp3tunes/CMakeLists.txt b/src/services/mp3tunes/CMakeLists.txt index 6b7fce5cb5..143b46731a 100644 --- a/src/services/mp3tunes/CMakeLists.txt +++ b/src/services/mp3tunes/CMakeLists.txt @@ -1,142 +1,142 @@ if(OPENSSL_FOUND OR LIBGCRYPT_FOUND) if(LIBXML2_FOUND AND CURL_FOUND) - if(LOUDMOUTH_FOUND AND GLIB2_FOUND AND GOBJECT_FOUND AND QT4_GLIB_SUPPORT) + if(LOUDMOUTH_FOUND AND GLIB2_FOUND AND GOBJECT_FOUND AND QT5_GLIB_SUPPORT) include_directories( ../ ../../ ../../core-impl/collections ../../statusbar ./libmp3tunes ./harmonydaemon ${LIBXML2_INCLUDE_DIR} ${CURL_INCLUDE_DIRS} ${CMAKE_CURRENT_BINARY_DIR}/../../.. ) ########### next target ############### include_directories( ./harmonydaemon ${GLIB2_INCLUDE_DIR} ${GOBJECT_INCLUDE_DIR} ${LOUDMOUTH_INCLUDE_DIRS} ) if(LIBGCRYPT_FOUND) add_definitions(-DHAVE_LIBGCRYPT) else() include_directories(${OPENSSL_INCLUDE_DIR}) add_definitions(-DHAVE_OPENSSL) endif() set(amarok_service_mp3tunes_harmony_PART_SRCS harmonydaemon/Mp3tunesHarmonyDownload.cpp harmonydaemon/Mp3tunesHarmonyDaemon.cpp harmonydaemon/Mp3tunesHarmonyClient.cpp harmonydaemon/AmarokClient.cpp harmonydaemon/main.cpp libmp3tunes/md5.c libmp3tunes/locker.c libmp3tunes/harmony.c ) qt5_add_dbus_adaptor(amarok_service_mp3tunes_harmony_PART_SRCS harmonydaemon/org.kde.amarok.Mp3tunesHarmonyDaemon.xml harmonydaemon/Mp3tunesHarmonyDaemon.h Mp3tunesHarmonyDaemon ) add_executable(amarokmp3tunesharmonydaemon ${amarok_service_mp3tunes_harmony_PART_SRCS} ) ecm_mark_nongui_executable(amarokmp3tunesharmonydaemon) target_link_libraries(amarokmp3tunesharmonydaemon amarokcore amaroklib KF5::KDELibs4Support ${GLIB2_LIBRARIES} ${GOBJECT_LIBRARIES} ${LOUDMOUTH_LIBRARIES} ${LIBXML2_LIBRARIES} ${CURL_LIBRARIES} ) if(LIBGCRYPT_FOUND) target_link_libraries(amarokmp3tunesharmonydaemon ${LIBGCRYPT_LIBS}) else() target_link_libraries(amarokmp3tunesharmonydaemon crypto ${OPENSSL_LIBRARIES}) endif() install(TARGETS amarokmp3tunesharmonydaemon ${INSTALL_TARGETS_DEFAULT_ARGS} ) ########### next target ############### set(amarok_service_mp3tunes_PART_SRCS Mp3tunesService.cpp Mp3tunesServiceCollection.cpp Mp3tunesServiceCollectionLocation.cpp Mp3tunesServiceQueryMaker.cpp Mp3tunesMeta.cpp Mp3tunesConfig.cpp Mp3tunesLockerMeta.cpp Mp3tunesLocker.cpp Mp3tunesWorkers.cpp Mp3tunesHarmonyHandler.cpp libmp3tunes/locker.c libmp3tunes/md5.c ) qt5_add_dbus_adaptor(amarok_service_mp3tunes_PART_SRCS org.kde.amarok.Mp3tunesHarmonyHandler.xml Mp3tunesHarmonyHandler.h Mp3tunesHarmonyHandler ) add_library(amarok_service_mp3tunes MODULE ${amarok_service_mp3tunes_PART_SRCS}) target_link_libraries(amarok_service_mp3tunes amarokcore amaroklib KF5::KDELibs4Support KF5::ThreadWeaver ${LIBXML2_LIBRARIES} ${CURL_LIBRARIES} Qt5::Network ) if(LIBGCRYPT_FOUND) target_link_libraries(amarok_service_mp3tunes ${LIBGCRYPT_LIBS}) else() #${OPENSSL_LIBRARIES} returns -lssl, not -lcrypto. we only need -lcrypto. target_link_libraries(amarok_service_mp3tunes crypto ${OPENSSL_LIBRARIES}) endif() install(TARGETS amarok_service_mp3tunes DESTINATION ${PLUGIN_INSTALL_DIR} ) ########### next target ############### set(kcm_amarok_service_mp3tunes_PART_SRCSS Mp3tunesSettingsModule.cpp Mp3tunesConfig.cpp ) ki18n_wrap_ui( kcm_amarok_service_mp3tunes_PART_SRCSS Mp3tunesConfigWidget.ui ) add_library(kcm_amarok_service_mp3tunes MODULE ${kcm_amarok_service_mp3tunes_PART_SRCSS} ) target_link_libraries( kcm_amarok_service_mp3tunes Qt5::Network ) install(TARGETS kcm_amarok_service_mp3tunes DESTINATION ${PLUGIN_INSTALL_DIR}) ########### install files ############### install( FILES amarok_service_mp3tunes.desktop DESTINATION ${SERVICES_INSTALL_DIR}) install( FILES amarok_service_mp3tunes_config.desktop DESTINATION ${SERVICES_INSTALL_DIR}) endif() endif() endif()