diff --git a/CMakeLists.txt b/CMakeLists.txt index d1475b156f..2d2c3a428f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,273 +1,274 @@ cmake_minimum_required(VERSION 3.4) 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 5.8.0 REQUIRED COMPONENTS Core DBus Gui QuickWidgets Qml Script ScriptTools Sql Svg Test Widgets Xml ) find_package( Qt5 5.8.0 COMPONENTS QuickControls2 ) set_package_properties( Qt5QuickControls2 PROPERTIES TYPE RUNTIME PURPOSE "Needed by the player's context area" ) 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 ) find_package( KF5 COMPONENTS Kirigami2 ) set_package_properties( KF5Kirigami2 PROPERTIES TYPE RUNTIME PURPOSE "Needed by the player's context area" ) ############### 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) 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" ) # 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) 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() 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 ) find_package(X11) + find_package(Threads REQUIRED) - find_package(MySQLAmarok REQUIRED) + find_package(MySQL 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 ) # 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 ) find_package(FFmpeg) set_package_properties(FFmpeg PROPERTIES DESCRIPTION "Libraries and tools for handling multimedia data" URL "https://www.ffmpeg.org/" TYPE OPTIONAL PURPOSE "Enable MusicDNS service" ) find_package(LibOFA) set_package_properties(LibOFA PROPERTIES DESCRIPTION "Open-source audio fingerprint by MusicIP" URL "http://code.google.com/p/musicip-libofa/" TYPE OPTIONAL PURPOSE "Enable MusicDNS service" ) ## gpodder Service # Actually it needs the to-be-released 1.10. Or you use 1.0.9 and add the # patches from the following pull requests: # https://github.com/gpodder/libmygpo-qt/pull/12 # -https://github.com/gpodder/libmygpo-qt/pull/13 find_package(Mygpo-qt5 1.0.9 CONFIG) set_package_properties(Mygpo-qt5 PROPERTIES DESCRIPTION "A Qt/C++ library wrapping the gpodder.net Webservice." URL "http://wiki.gpodder.org/wiki/Libmygpo-qt" TYPE OPTIONAL PURPOSE "Synchronize podcast subscriptions with gpodder.net" ) 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( CURL PROPERTIES DESCRIPTION "Used to transfer data with URLs" URL "https://curl.haxx.se/" 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 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 ) 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 ) 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( 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 ) find_package(FFTW3 REQUIRED) if( BUILD_TESTING AND NOT WIN32 ) enable_testing() add_subdirectory( tests ) endif() add_subdirectory( src ) 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 ) 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/FindMySQL.cmake b/cmake/modules/FindMySQL.cmake new file mode 100644 index 0000000000..6b5b900097 --- /dev/null +++ b/cmake/modules/FindMySQL.cmake @@ -0,0 +1,176 @@ +# - Try to find MySQL / MySQL Embedded library +# Find the MySQL includes and client library +# This module defines +# MYSQL_INCLUDE_DIR, where to find mysql.h +# MYSQL_LIBRARIES, the libraries needed to use MySQL. +# MYSQL_LIB_DIR, path to the MYSQL_LIBRARIES +# MYSQL_EMBEDDED_LIBRARIES, the libraries needed to use MySQL Embedded. +# MYSQL_EMBEDDED_LIB_DIR, path to the MYSQL_EMBEDDED_LIBRARIES +# MySQL_FOUND, If false, do not try to use MySQL. +# MySQL_Embedded_FOUND, If false, do not try to use MySQL Embedded. +# MYSQL_USING_MARIADB, If true MariaDB has been found and will be used as a replacement for MySQL + +# Copyright (c) 2006-2018, Jarosław Staniek +# +# Redistribution and use is allowed according to the terms of the BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. + +include(CheckCXXSourceCompiles) +include(MacroPushRequiredVars) +set_package_properties(MySQL PROPERTIES + DESCRIPTION "MySQL Client Library (libmysqlclient)" URL "http://www.mysql.com") + +if(WIN32) + set(ProgramFilesX86 "ProgramFiles(x86)") + find_path(MYSQL_INCLUDE_DIR mysql.h + PATHS + $ENV{MYSQL_INCLUDE_DIR} + $ENV{MYSQL_DIR}/include/mysql + $ENV{ProgramW6432}/MySQL/*/include/mysql + $ENV{ProgramFiles}/MySQL/*/include/mysql + $ENV{${ProgramFilesX}}/MySQL/*/include/mysql + $ENV{SystemDrive}/MySQL/*/include/mysql + $ENV{ProgramW6432}/*/include/mysql + $ENV{ProgramFiles}/*/include/mysql # MariaDB + $ENV{${ProgramFilesX}}/*/include/mysql # MariaDB + ) +else() + # use pkg-config to get the directories and then use these values + # in the FIND_PATH() and FIND_LIBRARY() calls + find_package(PkgConfig) + pkg_check_modules(PC_MYSQL QUIET mysql mariadb) + if(PC_MYSQL_VERSION) + set(MySQL_VERSION_STRING ${PC_MYSQL_VERSION}) + endif() + + find_path(MYSQL_INCLUDE_DIR mysql.h + PATHS + $ENV{MYSQL_INCLUDE_DIR} + $ENV{MYSQL_DIR}/include + ${PC_MYSQL_INCLUDEDIR} + ${PC_MYSQL_INCLUDE_DIRS} + /usr/local/mysql/include + /opt/mysql/mysql/include + PATH_SUFFIXES + mysql + ) +endif() + +set(MYSQL_USING_MARIADB FALSE) +if(WIN32) + string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_TOLOWER) + + # path suffix for debug/release mode + # binary_dist: mysql binary distribution + # build_dist: custom build + if(CMAKE_BUILD_TYPE_TOLOWER MATCHES "debug") + set(binary_dist debug) + set(build_dist Debug) + else() + add_definitions(-DDBUG_OFF) + set(binary_dist opt) + set(build_dist Release) + endif() + + set(MYSQL_LIB_PATHS + $ENV{MYSQL_DIR}/lib/${binary_dist} + $ENV{MYSQL_DIR}/libmysql/${build_dist} + $ENV{MYSQL_DIR}/client/${build_dist} + $ENV{ProgramW6432}/MySQL/*/lib/${binary_dist} + $ENV{ProgramFiles}/MySQL/*/lib/${binary_dist} + $ENV{${ProgramFilesX}}/MySQL/*/lib/${binary_dist} + $ENV{SystemDrive}/MySQL/*/lib/${binary_dist} + $ENV{ProgramW6432}/*/lib # MariaDB + $ENV{ProgramFiles}/*/lib # MariaDB + $ENV{${ProgramFilesX}}/*/lib # MariaDB + ) + find_library(_LIBMYSQL_LIBRARY NAMES libmysql + PATHS ${MYSQL_LIB_PATHS} + ) + find_library(_MYSQLCLIENT_LIBRARY NAMES mysqlclient + PATHS ${MYSQL_LIB_PATHS} + ) + if(_LIBMYSQL_LIBRARY AND _MYSQLCLIENT_LIBRARY) + set(MYSQL_LIBRARIES ${_LIBMYSQL_LIBRARY} ${_MYSQLCLIENT_LIBRARY}) + else() + find_library(_LIBMYSQL_LIBRARY NAMES libmariadb + PATHS ${MYSQL_LIB_PATHS} + ) + find_library(_MYSQLCLIENT_LIBRARY NAMES mariadbclient + PATHS ${MYSQL_LIB_PATHS} + ) + if(_LIBMYSQL_LIBRARY AND _MYSQLCLIENT_LIBRARY) + # once we find one MariaDB component, always search for MariaDB, not MySQL components + set(MYSQL_USING_MARIADB TRUE) + set(MYSQL_LIBRARIES ${_LIBMYSQL_LIBRARY} ${_MYSQLCLIENT_LIBRARY}) + endif() + endif() +else() # !win32 + find_library(_MYSQLCLIENT_LIBRARY NAMES mysqlclient + PATHS + $ENV{MYSQL_DIR}/libmysql_r/.libs + $ENV{MYSQL_DIR}/lib + $ENV{MYSQL_DIR}/lib/mysql + ${PC_MYSQL_LIBDIR} + ${PC_MYSQL_LIBRARY_DIRS} + PATH_SUFFIXES + mysql + ) + set(MYSQL_LIBRARIES ${_MYSQLCLIENT_LIBRARY}) + # TODO: set MYSQL_USING_MARIADB if MariaDB found +endif() + +if(_LIBMYSQL_LIBRARY) + get_filename_component(MYSQL_LIB_DIR ${_LIBMYSQL_LIBRARY} PATH) + unset(_LIBMYSQL_LIBRARY) +endif() +if(_MYSQLCLIENT_LIBRARY) + if(NOT MYSQL_LIB_DIR) + get_filename_component(MYSQL_LIB_DIR ${_MYSQLCLIENT_LIBRARY} PATH) + endif() + unset(_MYSQLCLIENT_LIBRARY) +endif() + +find_library(MYSQL_EMBEDDED_LIBRARIES NAMES mysqld + PATHS + $ENV{MYSQL_DIR}/libmysql_r/.libs + $ENV{MYSQL_DIR}/lib + $ENV{MYSQL_DIR}/lib/mysql + ${PC_MYSQL_LIBDIR} + ${PC_MYSQL_LIBRARY_DIRS} + PATH_SUFFIXES + mysql +) + +if(MYSQL_EMBEDDED_LIBRARIES) + get_filename_component(MYSQL_EMBEDDED_LIB_DIR ${MYSQL_EMBEDDED_LIBRARIES} PATH) + + macro_push_required_vars() + set( CMAKE_REQUIRED_INCLUDES ${MYSQL_INCLUDE_DIR} ) + set( CMAKE_REQUIRED_LIBRARIES ${MYSQL_EMBEDDED_LIBRARIES} ) + check_cxx_source_compiles( "#include \nint main() { int i = MYSQL_OPT_USE_EMBEDDED_CONNECTION; }" HAVE_MYSQL_OPT_EMBEDDED_CONNECTION ) + macro_pop_required_vars() +endif() + +# Did we find anything? +include(FindPackageHandleStandardArgs) + +find_package_handle_standard_args(MySQL + REQUIRED_VARS MYSQL_LIBRARIES MYSQL_INCLUDE_DIR MYSQL_LIB_DIR + VERSION_VAR MySQL_VERSION_STRING) +if(MYSQL_EMBEDDED_LIBRARIES AND MYSQL_EMBEDDED_LIB_DIR AND HAVE_MYSQL_OPT_EMBEDDED_CONNECTION) + find_package_handle_standard_args(MySQL_Embedded + REQUIRED_VARS MYSQL_EMBEDDED_LIBRARIES MYSQL_INCLUDE_DIR + MYSQL_EMBEDDED_LIB_DIR + HAVE_MYSQL_OPT_EMBEDDED_CONNECTION) +endif() + +mark_as_advanced(MYSQL_INCLUDE_DIR MYSQL_LIBRARIES MYSQL_LIB_DIR + MYSQL_EMBEDDED_LIBRARIES MYSQL_EMBEDDED_LIB_DIR HAVE_MYSQL_OPT_EMBEDDED_CONNECTION + MYSQL_USING_MARIADB) + +if(NOT MYSQL_FIND_QUIETLY) + if(MYSQL_USING_MARIADB) + message(STATUS "Found MariaDB, using as replacement for MySQL") + endif() +endif() diff --git a/cmake/modules/FindMySQLAmarok.cmake b/cmake/modules/FindMySQLAmarok.cmake deleted file mode 100644 index 37a2828202..0000000000 --- a/cmake/modules/FindMySQLAmarok.cmake +++ /dev/null @@ -1,123 +0,0 @@ -# - Find MySQL / MySQL Embedded -# Find the MySQL includes and client library -# This module defines -# MYSQL_INCLUDE_DIR, where to find mysql.h -# MYSQL_LIBRARIES, the libraries needed to use MySQL. -# MYSQL_EMBEDDED_LIBRARIES, the libraries needed to use MySQL Embedded. -# MYSQL_FOUND, If false, do not try to use MySQL. -# MYSQL_EMBEDDED_FOUND, If false, do not try to use MySQL Embedded. -# MYSQLAMAROK_FOUND, TRUE if both MYSQL and MYSQL_EMBEDDED have been found, FALSE otherwise. - -# Copyright (c) 2006, Jaroslaw Staniek, -# -# Redistribution and use is allowed according to the terms of the BSD license. -# For details see the accompanying COPYING-CMAKE-SCRIPTS file. - -include(CMakePushCheckState) - -if(NOT WIN32) - find_program(MYSQLCONFIG_EXECUTABLE NAMES mysql_config mysql_config5 HINTS ${BIN_INSTALL_DIR}) -endif() - -find_path(MYSQL_INCLUDE_DIR mysql.h PATH_SUFFIXES mysql mysql5/mysql) - -if(MYSQLCONFIG_EXECUTABLE) - exec_program(${MYSQLCONFIG_EXECUTABLE} ARGS --cflags RETURN_VALUE _return_VALUE OUTPUT_VARIABLE MYSQL_CFLAGS) - exec_program(${MYSQLCONFIG_EXECUTABLE} ARGS --libs RETURN_VALUE _return_VALUE OUTPUT_VARIABLE MYSQL_LIBRARIES) - exec_program(${MYSQLCONFIG_EXECUTABLE} ARGS --libmysqld-libs RETURN_VALUE _return_VALUE OUTPUT_VARIABLE MYSQL_EMBEDDED_LIBSTEMP) - - set(MYSQL_EMBEDDED_CFLAGS ${MYSQL_CFLAGS}) - - if(MYSQL_EMBEDDED_LIBSTEMP) - set( HAVE_MYSQL_EMBEDDED true ) - endif() - - find_library(MYSQLD_PIC_SEPARATE - mysqld_pic - PATH_SUFFIXES mysql - ) - - if(MYSQLD_PIC_SEPARATE) - string(REPLACE "lmysqld" "lmysqld_pic" MYSQL_EMBEDDED_LIBRARIES ${MYSQL_EMBEDDED_LIBSTEMP}) - # append link directory to variable as mysql_config is not always (since Ubuntu 12.04?) - # reporting this directory with when being called with --libs - get_filename_component(MYSQL_EMBEDDED_LIB_DIR_TMP "${MYSQLD_PIC_SEPARATE}" PATH) - set(MYSQL_EMBEDDED_LIBRARIES "${MYSQL_EMBEDDED_LIBRARIES} -L${MYSQL_EMBEDDED_LIB_DIR_TMP}") - else() - set(MYSQL_EMBEDDED_LIBRARIES ${MYSQL_EMBEDDED_LIBSTEMP}) - endif() - - if (UNIX) - # libmysqld wants -lpthread, but it is very likely it does not say that - # explicitly in --libmysqld-libs - find_package(Threads) - set(MYSQL_EMBEDDED_LIBRARIES "${MYSQL_EMBEDDED_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}") - endif() - -else() - - if(WIN32) - set(MYSQL_CLIENT_LIBRARY_NAME libmysql) - else() - set(MYSQL_CLIENT_LIBRARY_NAME mysqlclient) - endif() - - find_library(MYSQL_LIBRARIES NAMES ${MYSQL_CLIENT_LIBRARY_NAME} - PATHS - ~/usr/lib/mysql - /opt/mysql/mysql/lib - /usr/mysql/lib/mysql - /opt/local/lib/mysql5/mysql - /opt/mysqle/lib/mysql - /usr/lib/mysql - /usr/lib64/mysql - /usr/lib64 - /usr/local/lib/mysql - /opt/local/lib/mysql - /opt/ports/lib/mysql5/mysql - ) - - find_library(MYSQL_EMBEDDED_LIBRARIES NAMES mysqld_pic mysqld libmysqld - PATHS - ~/usr/lib/mysql - /opt/local/lib/mysql5/mysql - /opt/mysqle/lib/mysql - /usr/lib/mysql - /usr/lib64/mysql - /usr/local/lib/mysql - /opt/mysql/lib/mysql - /opt/local/lib/mysql - /opt/ports/lib/mysql5/mysql - ) - - cmake_push_check_state() - set( CMAKE_REQUIRED_INCLUDES ${MYSQL_INCLUDE_DIR} ) - set( CMAKE_REQUIRED_LIBRARIES ${MYSQL_EMBEDDED_LIBRARIES} ) - include_directories( ${MYSQL_INCLUDE_DIR} ) - check_cxx_source_compiles( "#if (defined(_WIN32) || defined(_WIN64))\n#define __LCC__\n#endif\n#include \nint main() { int i = MYSQL_OPT_USE_EMBEDDED_CONNECTION; }" HAVE_MYSQL_EMBEDDED ) - cmake_pop_check_state() - -endif() - -if(MYSQL_INCLUDE_DIR AND MYSQL_LIBRARIES) - set(MYSQL_FOUND TRUE) - message(STATUS "Found MySQL: ${MYSQL_INCLUDE_DIR}, ${MYSQL_LIBRARIES}") -else() - set(MYSQL_FOUND FALSE) - message(STATUS "MySQL not found.") -endif() - -if(MYSQL_INCLUDE_DIR AND MYSQL_EMBEDDED_LIBRARIES AND HAVE_MYSQL_EMBEDDED) - set(MYSQL_EMBEDDED_FOUND TRUE) - message(STATUS "Found MySQL Embedded: ${MYSQL_INCLUDE_DIR}, ${MYSQL_EMBEDDED_LIBRARIES}") -else() - set(MYSQL_EMBEDDED_FOUND FALSE) - message(STATUS "MySQL Embedded not found.") -endif() - -#MYSQLAMAROK_FOUND has to be defined so that MYSQLAMAROK gets into the PACKAGES_FOUND property and the other properties that depend on _FOUND variables. If this is not set to TRUE (when both MYSQL and MYSQLD are available) then on the subsequent call to feature_summary, MySQLAmarok will be missing from the PACKAGES_FOUND property and hence it will be marked as a missing required feature thus breaking the build when feature_summary has been used with FATAL_ON_MISSING_REQUIRED_PACKAGES. -if(MYSQL_EMBEDDED_FOUND AND MYSQL_FOUND) - set(MYSQLAMAROK_FOUND TRUE) -endif() - -mark_as_advanced(MYSQL_INCLUDE_DIR MYSQL_LIBRARIES MYSQL_EMBEDDED_LIBRARIES) diff --git a/cmake/modules/MacroPushRequiredVars.cmake b/cmake/modules/MacroPushRequiredVars.cmake new file mode 100644 index 0000000000..3e7560c4a4 --- /dev/null +++ b/cmake/modules/MacroPushRequiredVars.cmake @@ -0,0 +1,62 @@ +# this module defines two macros: +# MACRO_PUSH_REQUIRED_VARS() +# and +# MACRO_POP_REQUIRED_VARS() +# use these if you call cmake macros which use +# any of the CMAKE_REQUIRED_XXX variables +# +# Usage: +# MACRO_PUSH_REQUIRED_VARS() +# SET(CMAKE_REQUIRED_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} -DSOME_MORE_DEF) +# CHECK_FUNCTION_EXISTS(...) +# MACRO_POP_REQUIRED_VARS() + +# Copyright (c) 2006, Alexander Neundorf, +# +# Redistribution and use is allowed according to the terms of the BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. + +macro(MACRO_PUSH_REQUIRED_VARS) + + if(NOT DEFINED _PUSH_REQUIRED_VARS_COUNTER) + set(_PUSH_REQUIRED_VARS_COUNTER 0) + endif() + + math(EXPR _PUSH_REQUIRED_VARS_COUNTER "${_PUSH_REQUIRED_VARS_COUNTER}+1") + + if(DEFINED CMAKE_REQUIRED_INCLUDES) + set(_CMAKE_REQUIRED_INCLUDES_SAVE_${_PUSH_REQUIRED_VARS_COUNTER} ${CMAKE_REQUIRED_INCLUDES}) + endif() + if(DEFINED CMAKE_REQUIRED_DEFINITIONS) + set(_CMAKE_REQUIRED_DEFINITIONS_SAVE_${_PUSH_REQUIRED_VARS_COUNTER} ${CMAKE_REQUIRED_DEFINITIONS}) + endif() + if(DEFINED CMAKE_REQUIRED_LIBRARIES) + set(_CMAKE_REQUIRED_LIBRARIES_SAVE_${_PUSH_REQUIRED_VARS_COUNTER} ${CMAKE_REQUIRED_LIBRARIES}) + endif() + if(DEFINED CMAKE_REQUIRED_FLAGS) + set(_CMAKE_REQUIRED_FLAGS_SAVE_${_PUSH_REQUIRED_VARS_COUNTER} ${CMAKE_REQUIRED_FLAGS}) + endif() +endmacro(MACRO_PUSH_REQUIRED_VARS) + +macro(MACRO_POP_REQUIRED_VARS) + +# don't pop more than we pushed + if("${_PUSH_REQUIRED_VARS_COUNTER}" GREATER "0") + if(DEFINED _CMAKE_REQUIRED_INCLUDES_SAVE_${_PUSH_REQUIRED_VARS_COUNTER}) + set(CMAKE_REQUIRED_INCLUDES ${_CMAKE_REQUIRED_INCLUDES_SAVE_${_PUSH_REQUIRED_VARS_COUNTER}}) + endif() + if(DEFINED _CMAKE_REQUIRED_DEFINITIONS_SAVE_${_PUSH_REQUIRED_VARS_COUNTER}) + set(CMAKE_REQUIRED_DEFINITIONS ${_CMAKE_REQUIRED_DEFINITIONS_SAVE_${_PUSH_REQUIRED_VARS_COUNTER}}) + endif() + if(DEFINED _CMAKE_REQUIRED_LIBRARIES_SAVE_${_PUSH_REQUIRED_VARS_COUNTER}) + set(CMAKE_REQUIRED_LIBRARIES ${_CMAKE_REQUIRED_LIBRARIES_SAVE_${_PUSH_REQUIRED_VARS_COUNTER}}) + endif() + if(DEFINED _CMAKE_REQUIRED_FLAGS_SAVE_${_PUSH_REQUIRED_VARS_COUNTER}) + set(CMAKE_REQUIRED_FLAGS ${_CMAKE_REQUIRED_FLAGS_SAVE_${_PUSH_REQUIRED_VARS_COUNTER}}) + endif() + + math(EXPR _PUSH_REQUIRED_VARS_COUNTER "${_PUSH_REQUIRED_VARS_COUNTER}-1") + endif() + +endmacro(MACRO_POP_REQUIRED_VARS) + diff --git a/src/core-impl/storage/sql/CMakeLists.txt b/src/core-impl/storage/sql/CMakeLists.txt index f95187c14f..d039ddfb2f 100644 --- a/src/core-impl/storage/sql/CMakeLists.txt +++ b/src/core-impl/storage/sql/CMakeLists.txt @@ -1,6 +1,6 @@ if( BUILD_MYSQLE_COLLECTION ) add_subdirectory( mysqlestorage ) endif() -if( MYSQL_FOUND ) +if( MySQL_FOUND ) add_subdirectory( mysqlserverstorage ) endif() diff --git a/src/core-impl/storage/sql/mysqlestorage/CMakeLists.txt b/src/core-impl/storage/sql/mysqlestorage/CMakeLists.txt index 8b9e44a36a..c0f7d03a48 100644 --- a/src/core-impl/storage/sql/mysqlestorage/CMakeLists.txt +++ b/src/core-impl/storage/sql/mysqlestorage/CMakeLists.txt @@ -1,42 +1,42 @@ -add_definitions(${MYSQL_EMBEDDED_CFLAGS}) - ########### mysqle ############### +include_directories(${MYSQL_INCLUDE_DIR}) + set( amarok_storage-mysqlestorage_PART_SRCS ../mysql-shared/MySqlStorage.cpp MySqlEmbeddedStorage.cpp MySqlEmbeddedStorageFactory.cpp ) add_library(amarok_storage-mysqlestorage MODULE ${amarok_storage-mysqlestorage_PART_SRCS}) string(REPLACE "-Wl,--fatal-warnings" "" CMAKE_SHARED_LINKER_FLAGS_NOFATALWARN "${CMAKE_SHARED_LINKER_FLAGS}") set(CMAKE_SHARED_LINKER_FLAGS ${CMAKE_SHARED_LINKER_FLAGS_NOFATALWARN} ) string(REPLACE "-Wl,--fatal-warnings" "" CMAKE_MODULE_LINKER_FLAGS_NOFATALWARN "${CMAKE_MODULE_LINKER_FLAGS}") set(CMAKE_MODULE_LINKER_FLAGS ${CMAKE_MODULE_LINKER_FLAGS_NOFATALWARN} ) target_link_libraries(amarok_storage-mysqlestorage # amarok-sqlstorage amarokcore amaroklib Qt5::Core Qt5::Gui ${MYSQL_EMBEDDED_LIBRARIES} ${CMAKE_DL_LIBS} ${ZLIB_LIBRARIES} ) if(NOT WIN32 AND NOT APPLE) target_link_libraries( amarok_storage-mysqlestorage crypt pthread ) endif() if(APPLE) SET_TARGET_PROPERTIES(amarok_storage-mysqlestorage PROPERTIES LINK_FLAGS "-undefined dynamic_lookup") endif() install(TARGETS amarok_storage-mysqlestorage DESTINATION ${KDE_INSTALL_PLUGINDIR} ) install(FILES amarok_storage-mysqlestorage.desktop DESTINATION ${KDE_INSTALL_KSERVICES5DIR}) kcoreaddons_desktop_to_json(amarok_storage-mysqlestorage amarok_storage-mysqlestorage.desktop SERVICE_TYPES ${CMAKE_SOURCE_DIR}/src/amarok-plugin.desktop) diff --git a/src/core-impl/storage/sql/mysqlserverstorage/CMakeLists.txt b/src/core-impl/storage/sql/mysqlserverstorage/CMakeLists.txt index 8ccc487bd5..dc5905916e 100644 --- a/src/core-impl/storage/sql/mysqlserverstorage/CMakeLists.txt +++ b/src/core-impl/storage/sql/mysqlserverstorage/CMakeLists.txt @@ -1,42 +1,42 @@ -add_definitions(${MYSQL_CFLAGS}) - ########### mysqlserver ############### +include_directories(${MYSQL_INCLUDE_DIR}) + set( amarok_storage-mysqlserverstorage_PART_SRCS ../mysql-shared/MySqlStorage.cpp MySqlServerStorage.cpp MySqlServerStorageFactory.cpp ) add_library(amarok_storage-mysqlserverstorage MODULE ${amarok_storage-mysqlserverstorage_PART_SRCS}) string(REPLACE "-Wl,--fatal-warnings" "" CMAKE_SHARED_LINKER_FLAGS_NOFATALWARN "${CMAKE_SHARED_LINKER_FLAGS}") set(CMAKE_SHARED_LINKER_FLAGS ${CMAKE_SHARED_LINKER_FLAGS_NOFATALWARN} ) string(REPLACE "-Wl,--fatal-warnings" "" CMAKE_MODULE_LINKER_FLAGS_NOFATALWARN "${CMAKE_MODULE_LINKER_FLAGS}") set(CMAKE_MODULE_LINKER_FLAGS ${CMAKE_MODULE_LINKER_FLAGS_NOFATALWARN} ) target_link_libraries(amarok_storage-mysqlserverstorage # amarok-sqlstorage amarokcore amaroklib Qt5::Core Qt5::Gui ${MYSQL_LIBRARIES} ${CMAKE_DL_LIBS} ${ZLIB_LIBRARIES} ) if(NOT WIN32 AND NOT APPLE) target_link_libraries( amarok_storage-mysqlserverstorage crypt pthread ) endif() if(APPLE) SET_TARGET_PROPERTIES(amarok_storage-mysqlserverstorage PROPERTIES LINK_FLAGS "-undefined dynamic_lookup") endif() install(TARGETS amarok_storage-mysqlserverstorage DESTINATION ${KDE_INSTALL_PLUGINDIR} ) install(FILES amarok_storage-mysqlserverstorage.desktop DESTINATION ${KDE_INSTALL_KSERVICES5DIR}) kcoreaddons_desktop_to_json(amarok_storage-mysqlserverstorage amarok_storage-mysqlserverstorage.desktop SERVICE_TYPES ${CMAKE_SOURCE_DIR}/src/amarok-plugin.desktop) diff --git a/tests/core-impl/collections/db/sql/CMakeLists.txt b/tests/core-impl/collections/db/sql/CMakeLists.txt index e2e316e976..bca5f27ad9 100644 --- a/tests/core-impl/collections/db/sql/CMakeLists.txt +++ b/tests/core-impl/collections/db/sql/CMakeLists.txt @@ -1,130 +1,128 @@ # macro function to build a test target. macro(add_database_test test_target test_sources) - add_definitions(${MYSQL_CFLAGS}) - set( test_sources_internal ${test_sources} ${AMAROK_SOURCE_TREE}/core-impl/storage/sql/mysql-shared/MySqlStorage.cpp ${AMAROK_SOURCE_TREE}/core-impl/storage/sql/mysqlestorage/MySqlEmbeddedStorage.cpp ) add_executable( ${test_target} ${test_sources} ${test_sources_internal} ) add_test(NAME ${test_target} COMMAND $) ecm_mark_as_test(${test_target}) if(APPLE) set_target_properties(${test_target} PROPERTIES LINK_FLAGS "-undefined dynamic_lookup") endif() target_link_libraries(${test_target} amarokshared amarokcore amaroklib amarok-sqlcollection KF5::KIOCore KF5::ThreadWeaver Qt5::Test Qt5::Core ${MYSQL_EMBEDDED_LIBRARIES} ${CMAKE_DL_LIBS} ${ZLIB_LIBRARIES} ${GOOGLEMOCK_LIBRARIES} ) endmacro(add_database_test) include_directories( ${AMAROK_TEST_TREE} ${AMAROK_SOURCE_TREE} ${AMAROK_SOURCE_TREE}/core-impl/collections/db/sql ${AMAROK_SOURCE_TREE}/core-impl/logger ${AMAROK_UTILITY_TREE} ${CMAKE_BINARY_DIR}/src ${CMAKE_BINARY_DIR}/tests ${AMAROK_COLLECTION_SUPPORT_DIR} ${MYSQL_INCLUDE_DIR} ) #------------------------------- DatabaseUpdater Test ------------------------------- set( databaseupdatertest_SRCS TestDatabaseUpdater.cpp ${GOOGLEMOCK_SRCS} ) add_database_test( testsqldatabaseupdater "${databaseupdatertest_SRCS}" ) #-------------------------------- Test SqlAlbum ----------------------- set( testsqlalbum_SRCS TestSqlAlbum.cpp ${GOOGLEMOCK_SRCS} ) add_database_test( testsqlalbum "${testsqlalbum_SRCS}" ) #-------------------------------- Test SqlArtist ----------------------- set( testsqlartist_SRCS TestSqlArtist.cpp ${GOOGLEMOCK_SRCS} ) add_database_test( testsqlartist "${testsqlartist_SRCS}" ) #-------------------------------- Test SqlCollection ----------------------- set( testsqlcollection_SRCS TestSqlCollection.cpp ${GOOGLEMOCK_SRCS} ) add_database_test( testsqlcollection "${testsqlcollection_SRCS}" ) #-------------------------------- Test SqlQueryMaker ----------------------- set( testsqlquerymaker_SRCS TestSqlQueryMaker.cpp ${GOOGLEMOCK_SRCS} ) add_database_test( testsqlquerymaker "${testsqlquerymaker_SRCS}" ) #-------------------------------- Test SqlScanManager ----------------------- set( testsqlscanmanager_SRCS TestSqlScanManager.cpp ${GOOGLEMOCK_SRCS} ) add_database_test( testsqlscanmanager "${testsqlscanmanager_SRCS}" ) #-------------------------------- Test SqlTrack ----------------------- set( testsqltrack_SRCS TestSqlTrack.cpp ${AMAROK_TEST_TREE}/MetaNotificationSpy.cpp ${GOOGLEMOCK_SRCS} ) add_database_test( testsqltrack "${testsqltrack_SRCS}" ) #-------------------------------- Test SqlCollectionLocation ----------------------- set( testsqlcollectionlocation_SRCS TestSqlCollectionLocation.cpp ${AMAROK_SOURCE_TREE}/core/interfaces/Logger.cpp ${AMAROK_SOURCE_TREE}/core-impl/logger/ProxyLogger.cpp ${GOOGLEMOCK_SRCS} ) add_database_test( testsqlcollectionlocation "${testsqlcollectionlocation_SRCS}" ) if(NOT WIN32 AND NOT APPLE) target_link_libraries( testsqlcollectionlocation crypt pthread ) endif() diff --git a/tests/dynamic/CMakeLists.txt b/tests/dynamic/CMakeLists.txt index 2cc64d082b..4666b41a20 100644 --- a/tests/dynamic/CMakeLists.txt +++ b/tests/dynamic/CMakeLists.txt @@ -1,65 +1,62 @@ macro(link_database_test test_target) - - add_definitions(${MYSQL_CFLAGS}) - if(APPLE) set_target_properties(${test_target} PROPERTIES LINK_FLAGS "-undefined dynamic_lookup") endif() add_dependencies( ${test_target} amarokconfig_h ) add_dependencies( ${test_target} amarokcore ) add_dependencies( ${test_target} amaroklib) target_link_libraries(${test_target} amarokcore amaroklib KF5::KIOCore KF5::ThreadWeaver Qt5::Test Qt5::Core ${MYSQL_LIBRARIES} ${CMAKE_DL_LIBS} # ${TAGLIB-EXTRAS_LIBRARIES} # ${TAGLIB_LIBRARIES} ${ZLIB_LIBRARIES}) endmacro(link_database_test) include_directories( ${AMAROK_TEST_TREE} ${AMAROK_SOURCE_TREE} # ${AMAROK_SOURCE_TREE}/core-impl/logger ${AMAROK_UTILITY_TREE} ${CMAKE_BINARY_DIR}/src ${CMAKE_BINARY_DIR}/src/dynamic ${CMAKE_BINARY_DIR}/tests ${AMAROK_COLLECTION_SUPPORT_DIR} ${MYSQL_INCLUDE_DIR} ) #------------------------------- DynamicModel Test ------------------------------- set( dynamicmodel_SRCS TestDynamicModel.cpp ) add_executable( testdynamicmodel ${dynamicmodel_SRCS} ) add_test(NAME testdynamicmodel COMMAND $) ecm_mark_as_test(testdynamicmodel) link_database_test( testdynamicmodel ) #------------------------------- TrackSet Test ------------------------------- set( trackset_SRCS TestTrackSet.cpp ) add_executable( testtrackset ${trackset_SRCS} ) add_test(NAME testtrackset COMMAND $) ecm_mark_as_test(testtrackset) link_database_test( testtrackset )