2020-01-04 17:15:58 +01:00
project ( clementine )
2021-04-17 07:08:31 +02:00
cmake_minimum_required ( VERSION 3.0.0 )
2019-10-16 20:42:21 +02:00
cmake_policy ( SET CMP0053 OLD )
2010-02-28 18:28:56 +01:00
2010-08-28 19:25:54 +02:00
include ( CheckCXXCompilerFlag )
2010-02-28 18:28:56 +01:00
include ( FindPkgConfig )
2014-09-26 12:33:02 +02:00
include ( cmake/C++11Compat.cmake )
2010-08-31 20:23:23 +02:00
include ( cmake/Summary.cmake )
2010-06-09 00:39:31 +02:00
include ( cmake/Version.cmake )
2010-09-05 00:33:31 +02:00
include ( cmake/Deb.cmake )
2011-04-29 21:44:51 +02:00
include ( cmake/SpotifyVersion.cmake )
2011-10-29 19:37:30 +02:00
include ( cmake/OptionalSource.cmake )
2014-02-11 15:18:52 +01:00
include ( cmake/Format.cmake )
2012-05-27 18:28:07 +02:00
set ( CMAKE_MODULE_PATH ${ CMAKE_SOURCE_DIR } /cmake )
2021-07-08 21:33:25 +02:00
set ( CMAKE_EXPORT_COMPILE_COMMANDS ON CACHE INTERNAL "" )
2010-02-28 18:28:56 +01:00
2012-11-20 15:13:05 +01:00
if ( CMAKE_CXX_COMPILER MATCHES ".*clang" )
set ( CMAKE_COMPILER_IS_CLANGXX 1 )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-uninitialized" )
endif ( )
2014-01-27 16:32:02 +01:00
if ( APPLE )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --stdlib=libc++" )
endif ( )
2012-11-26 15:36:05 +01:00
2014-08-05 22:16:41 +02:00
find_program ( CCACHE_EXECUTABLE NAMES ccache )
if ( CCACHE_EXECUTABLE )
2014-08-06 20:05:41 +02:00
message ( STATUS "ccache found: will be used for compilation and linkage" )
2014-08-05 22:16:41 +02:00
SET_PROPERTY ( GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${ CCACHE_EXECUTABLE } )
SET_PROPERTY ( GLOBAL PROPERTY RULE_LAUNCH_LINK ${ CCACHE_EXECUTABLE } )
endif ( )
2018-11-17 15:08:37 +01:00
if ( ${ CMAKE_SYSTEM_NAME } STREQUAL "Linux" )
set ( LINUX ON )
endif ( )
if ( ${ CMAKE_SYSTEM_NAME } STREQUAL "FreeBSD" )
set ( FREEBSD ON )
2015-04-11 22:49:34 +02:00
endif ( )
2010-04-21 13:03:30 +02:00
2018-10-04 08:42:09 +02:00
set ( OpenGL_GL_PREFERENCE LEGACY )
2018-11-29 22:32:12 +01:00
find_package ( OpenGL )
if ( OPENGL_FOUND )
set ( HAVE_OPENGL ON )
endif ( OPENGL_FOUND )
2010-02-28 18:28:56 +01:00
find_package ( Boost REQUIRED )
2010-04-06 21:18:14 +02:00
find_package ( Gettext REQUIRED )
2010-11-21 16:13:26 +01:00
find_package ( PkgConfig REQUIRED )
2012-01-02 18:21:07 +01:00
find_package ( Protobuf REQUIRED )
2012-05-27 18:28:07 +02:00
find_package ( FFTW3 )
2018-11-17 16:00:32 +01:00
find_package ( ALSA )
2018-11-17 15:08:37 +01:00
if ( NOT APPLE )
find_package ( X11 )
endif ( )
if ( X11_FOUND )
set ( HAVE_X11 ON )
endif ( )
2010-02-28 18:28:56 +01:00
2015-12-13 14:02:07 +01:00
find_library ( PROTOBUF_STATIC_LIBRARY libprotobuf.a libprotobuf )
2013-04-15 13:23:56 +02:00
pkg_check_modules ( CDIO libcdio )
2015-02-09 15:18:36 +01:00
pkg_check_modules ( CHROMAPRINT REQUIRED libchromaprint )
2015-05-01 16:38:15 +02:00
pkg_search_module ( CRYPTOPP cryptopp libcrypto++ )
2013-04-15 13:23:56 +02:00
pkg_check_modules ( GIO gio-2.0 )
2015-02-09 15:18:36 +01:00
pkg_check_modules ( GLIB REQUIRED glib-2.0 )
pkg_check_modules ( GOBJECT REQUIRED gobject-2.0 )
2014-09-21 11:35:21 +02:00
pkg_check_modules ( GSTREAMER REQUIRED gstreamer-1.0 )
pkg_check_modules ( GSTREAMER_APP REQUIRED gstreamer-app-1.0 )
pkg_check_modules ( GSTREAMER_AUDIO REQUIRED gstreamer-audio-1.0 )
pkg_check_modules ( GSTREAMER_BASE REQUIRED gstreamer-base-1.0 )
pkg_check_modules ( GSTREAMER_TAG REQUIRED gstreamer-tag-1.0 )
2016-12-21 17:57:04 +01:00
pkg_check_modules ( GSTREAMER_PBUTILS REQUIRED gstreamer-pbutils-1.0 )
2013-04-15 13:23:56 +02:00
pkg_check_modules ( LIBGPOD libgpod-1.0>=0.7.92 )
pkg_check_modules ( LIBMTP libmtp>=1.0 )
2015-12-13 20:05:12 +01:00
pkg_check_modules ( LIBMYGPO_QT5 libmygpo-qt5>=1.0.9 )
2014-03-29 09:17:34 +01:00
pkg_check_modules ( LIBPULSE libpulse )
2013-04-15 13:23:56 +02:00
pkg_check_modules ( LIBXML libxml-2.0 )
2018-11-17 15:08:37 +01:00
pkg_check_modules ( LIBSPOTIFY libspotify>=12.1.45 )
2018-06-06 22:59:21 +02:00
pkg_check_modules ( TAGLIB taglib )
2010-08-14 20:56:05 +02:00
if ( WIN32 )
find_package ( ZLIB REQUIRED )
endif ( WIN32 )
2010-02-28 18:28:56 +01:00
2015-04-15 18:26:09 +02:00
find_library ( LASTFM5_LIBRARIES lastfm5 )
find_path ( LASTFM5_INCLUDE_DIRS lastfm5/ws.h )
find_path ( LASTFM51_INCLUDE_DIRS lastfm5/Track.h )
2012-06-28 18:41:51 +02:00
2012-07-26 22:23:08 +02:00
find_path ( SPARSEHASH_INCLUDE_DIRS google/sparsetable )
2018-11-17 15:08:37 +01:00
# QT
set ( QT_MIN_VERSION 5.6.0 )
find_package ( Qt5 ${ QT_MIN_VERSION } REQUIRED COMPONENTS Core Concurrent Widgets Network Sql Xml OpenGL Test )
2019-01-02 16:03:24 +01:00
if ( HAVE_X11 )
2018-11-17 15:08:37 +01:00
find_package ( Qt5 ${ QT_MIN_VERSION } REQUIRED COMPONENTS X11Extras )
2019-11-14 21:51:51 +01:00
find_package ( Qt5DBus ${ QT_MIN_VERSION } )
2018-11-17 15:08:37 +01:00
endif ( )
if ( APPLE )
find_package ( Qt5 REQUIRED COMPONENTS MacExtras )
endif ( )
if ( WIN32 )
find_package ( Qt5 REQUIRED COMPONENTS WinExtras )
endif ( )
2019-01-02 16:03:24 +01:00
set ( QT_LIBRARIES Qt5::Core Qt5::Concurrent Qt5::Widgets Qt5::Network Qt5::Sql Qt5::Xml Qt5::OpenGL )
2018-11-17 15:08:37 +01:00
2019-01-02 16:03:24 +01:00
if ( Qt5DBus_FOUND )
2018-11-17 15:08:37 +01:00
set ( QT_LIBRARIES ${ QT_LIBRARIES } Qt5::DBus )
2019-01-02 16:03:24 +01:00
get_target_property ( QT_DBUSXML2CPP_EXECUTABLE Qt5::qdbusxml2cpp LOCATION )
2018-11-17 15:08:37 +01:00
endif ( )
2019-01-02 16:03:24 +01:00
if ( HAVE_X11 )
2018-11-17 15:08:37 +01:00
set ( QT_LIBRARIES ${ QT_LIBRARIES } Qt5::X11Extras )
endif ( )
if ( APPLE )
set ( QT_LIBRARIES ${ QT_LIBRARIES } Qt5::MacExtras )
endif ( )
if ( WIN32 )
set ( QT_LIBRARIES ${ QT_LIBRARIES } Qt5::WinExtras )
endif ( )
find_package ( Qt5LinguistTools CONFIG )
if ( Qt5LinguistTools_FOUND )
set ( QT_LCONVERT_EXECUTABLE Qt5::lconvert )
endif ( )
2018-11-11 21:53:48 +01:00
# Only use system taglib if it's greater than 1.11.1
# There is a bug in version 1.11.1 corrupting Ogg files, see: https://github.com/taglib/taglib/issues/864
# If you decide to use the systems taglib, make sure it has been patched with the following commit:
# https://github.com/taglib/taglib/commit/9336c82da3a04552168f208cd7a5fa4646701ea4
# The current taglib in 3rdparty also has the following features used by Clementine:
# - Audio file detection by content.
#
2020-06-04 21:20:21 +02:00
if ( TAGLIB_VERSION VERSION_GREATER 1.11.1 )
2018-06-06 22:59:21 +02:00
option ( USE_SYSTEM_TAGLIB "Use system taglib" ON )
2013-08-18 04:39:33 +02:00
else ( )
2018-06-06 22:59:21 +02:00
option ( USE_SYSTEM_TAGLIB "Use system taglib" OFF )
endif ( )
if ( TAGLIB_FOUND AND USE_SYSTEM_TAGLIB )
2020-06-04 21:20:21 +02:00
if ( TAGLIB_VERSION VERSION_GREATER 1.11.1 )
2018-11-11 21:53:48 +01:00
message ( STATUS "Using system taglib library" )
else ( )
message ( WARNING "Using system taglib library. Version 1.11.1 or less has a bug corrupting Ogg files, make sure your systems version has been patched!" )
endif ( )
2013-08-18 04:39:33 +02:00
set ( CMAKE_REQUIRED_INCLUDES "${TAGLIB_INCLUDE_DIRS}" )
set ( CMAKE_REQUIRED_LIBRARIES "${TAGLIB_LIBRARIES}" )
check_cxx_source_compiles ( " #include <opusfile.h>
i n t main ( ) { c h a r * s ; T a g L i b : : O g g : : O p u s : : F i l e opusfile ( s ) ; r e t u r n 0 ; } " T A G L I B _ H A S _ O P U S )
set ( CMAKE_REQUIRED_INCLUDES )
set ( CMAKE_REQUIRED_LIBRARIES )
2018-06-06 22:59:21 +02:00
else ( )
2018-11-11 21:53:48 +01:00
message ( STATUS "Using builtin taglib library" )
2018-06-06 22:47:08 +02:00
set ( TAGLIB_VERSION 1.11.1 )
2012-10-28 02:25:27 +02:00
set ( TAGLIB_INCLUDE_DIRS "${CMAKE_BINARY_DIR}/3rdparty/taglib/headers/taglib/;${CMAKE_BINARY_DIR}/3rdparty/taglib/headers/" )
2012-10-28 02:12:18 +02:00
set ( TAGLIB_LIBRARY_DIRS "" )
set ( TAGLIB_LIBRARIES tag )
2013-08-18 04:39:33 +02:00
set ( TAGLIB_HAS_OPUS ON )
2018-06-06 22:47:08 +02:00
add_subdirectory ( 3rdparty/utf8-cpp )
2012-10-28 02:12:18 +02:00
add_subdirectory ( 3rdparty/taglib )
2020-06-04 21:20:21 +02:00
add_definitions ( -DTAGLIB_STATIC )
2012-10-28 02:12:18 +02:00
endif ( )
2015-04-15 18:26:09 +02:00
if ( LASTFM5_INCLUDE_DIRS AND LASTFM51_INCLUDE_DIRS )
2012-06-28 18:41:51 +02:00
set ( HAVE_LIBLASTFM1 ON )
endif ( )
2010-02-28 18:28:56 +01:00
2010-03-01 13:13:11 +01:00
if ( APPLE )
2010-04-15 17:23:12 +02:00
find_library ( SPARKLE Sparkle )
2018-11-17 15:08:37 +01:00
find_library ( LIBSPOTIFY libspotify )
2019-03-18 18:57:57 +01:00
2018-11-17 15:08:37 +01:00
if ( LIBSPOTIFY_FOUND )
set ( LIBSPOTIFY_INCLUDE_DIRS ${ LIBSPOTIFY } )
set ( LIBSPOTIFY_LIBRARIES ${ LIBSPOTIFY } )
endif ( LIBSPOTIFY_FOUND )
2011-04-27 00:20:11 +02:00
2011-05-30 12:09:34 +02:00
add_subdirectory ( 3rdparty/SPMediaKeyTap )
set ( SPMEDIAKEYTAP_INCLUDE_DIRS ${ CMAKE_CURRENT_SOURCE_DIR } /3rdparty/SPMediaKeyTap )
2012-09-25 18:53:53 +02:00
set ( SPMEDIAKEYTAP_LIBRARIES SPMediaKeyTap )
2010-03-01 13:13:11 +01:00
endif ( APPLE )
2010-11-03 22:11:43 +01:00
find_package ( Threads )
2010-02-28 18:28:56 +01:00
if ( ${ CMAKE_BUILD_TYPE } MATCHES "Release" )
add_definitions ( -DNDEBUG )
add_definitions ( -DQT_NO_DEBUG_OUTPUT )
2015-06-11 11:35:30 +02:00
add_definitions ( -DQT_NO_WARNING_OUTPUT )
2010-02-28 18:28:56 +01:00
endif ( ${ CMAKE_BUILD_TYPE } MATCHES "Release" )
# Set up definitions and paths
add_definitions ( ${ QT_DEFINITIONS } )
link_directories ( ${ TAGLIB_LIBRARY_DIRS } )
2010-04-06 18:57:02 +02:00
link_directories ( ${ GSTREAMER_LIBRARY_DIRS } )
2010-02-28 18:28:56 +01:00
2021-03-16 06:34:49 +01:00
# Top level headers and generated headers
include_directories ( ${ PROJECT_SOURCE_DIR } /include )
include_directories ( ${ PROJECT_BINARY_DIR } /include )
2010-02-28 18:28:56 +01:00
include_directories ( ${ Boost_INCLUDE_DIRS } )
include_directories ( ${ TAGLIB_INCLUDE_DIRS } )
2010-04-06 18:57:02 +02:00
include_directories ( ${ GSTREAMER_INCLUDE_DIRS } )
2013-12-31 19:15:15 +01:00
include_directories ( ${ GSTREAMER_APP_INCLUDE_DIRS } )
2014-09-21 11:35:21 +02:00
include_directories ( ${ GSTREAMER_AUDIO_INCLUDE_DIRS } )
2013-12-31 19:15:15 +01:00
include_directories ( ${ GSTREAMER_BASE_INCLUDE_DIRS } )
include_directories ( ${ GSTREAMER_TAG_INCLUDE_DIRS } )
2016-12-21 17:57:04 +01:00
include_directories ( ${ GSTREAMER_PBUTILS_INCLUDE_DIRS } )
2010-04-06 18:57:02 +02:00
include_directories ( ${ GLIB_INCLUDE_DIRS } )
include_directories ( ${ GLIBCONFIG_INCLUDE_DIRS } )
include_directories ( ${ LIBXML_INCLUDE_DIRS } )
2010-02-28 18:28:56 +01:00
2010-03-02 23:02:43 +01:00
if ( WIN32 )
# RC compiler
string ( REPLACE "gcc" "windres" CMAKE_RC_COMPILER_INIT ${ CMAKE_C_COMPILER } )
2010-03-04 17:50:27 +01:00
enable_language ( RC )
2012-01-15 18:19:02 +01:00
SET ( CMAKE_RC_COMPILE_OBJECT "<CMAKE_RC_COMPILER> -O coff -o <OBJECT> <SOURCE> -I ${CMAKE_SOURCE_DIR}/dist/windows" )
2010-03-02 23:02:43 +01:00
endif ( WIN32 )
2011-06-20 17:08:06 +02:00
add_definitions ( -DQT_NO_CAST_TO_ASCII -DQT_STRICT_ITERATORS )
2010-03-25 23:37:00 +01:00
2010-04-06 21:18:14 +02:00
# Translations stuff
2011-07-27 21:54:05 +02:00
find_program ( GETTEXT_XGETTEXT_EXECUTABLE xgettext PATHS /target/bin )
2010-05-07 15:10:21 +02:00
if ( NOT GETTEXT_XGETTEXT_EXECUTABLE )
message ( FATAL_ERROR "Could not find xgettext executable" )
endif ( NOT GETTEXT_XGETTEXT_EXECUTABLE )
2011-07-27 21:54:05 +02:00
find_program ( GETTEXT_MSGMERGE_EXECUTABLE msgmerge PATHS /target/bin )
if ( NOT GETTEXT_MSGMERGE_EXECUTABLE )
message ( FATAL_ERROR "Could not find msgmerge executable" )
endif ( NOT GETTEXT_MSGMERGE_EXECUTABLE )
find_program ( GETTEXT_MSGFMT_EXECUTABLE msgfmt PATHS /target/bin )
if ( NOT GETTEXT_MSGFMT_EXECUTABLE )
message ( FATAL_ERROR "Could not find msgfmt executable" )
endif ( NOT GETTEXT_MSGFMT_EXECUTABLE )
2010-04-06 21:18:14 +02:00
2010-06-11 00:48:23 +02:00
# Optional bits
2011-04-24 19:02:26 +02:00
if ( WIN32 )
option ( ENABLE_WIN32_CONSOLE "Show the windows console even outside Debug mode" OFF )
endif ( WIN32 )
2012-08-28 20:19:29 +02:00
optional_component ( BREAKPAD OFF "Crash reporting" )
2010-08-31 20:23:23 +02:00
2015-04-15 18:26:09 +02:00
optional_component ( GOOGLE_DRIVE ON "Google Drive support"
2012-08-28 20:19:29 +02:00
D E P E N D S " G o o g l e s p a r s e h a s h " S P A R S E H A S H _ I N C L U D E _ D I R S
2012-10-28 02:25:27 +02:00
D E P E N D S " T a g l i b 1 . 8 " " T A G L I B _ V E R S I O N V E R S I O N _ G R E A T E R 1 . 7 . 9 9 9 "
2012-08-28 20:19:29 +02:00
)
2010-08-31 20:23:23 +02:00
2015-04-15 18:26:09 +02:00
optional_component ( DROPBOX ON "Dropbox support"
2012-11-28 16:51:19 +01:00
D E P E N D S " G o o g l e s p a r s e h a s h " S P A R S E H A S H _ I N C L U D E _ D I R S
D E P E N D S " T a g l i b 1 . 8 " " T A G L I B _ V E R S I O N V E R S I O N _ G R E A T E R 1 . 7 . 9 9 9 "
)
2015-04-15 18:26:09 +02:00
optional_component ( SKYDRIVE ON "Skydrive support"
2012-11-29 17:03:52 +01:00
D E P E N D S " G o o g l e s p a r s e h a s h " S P A R S E H A S H _ I N C L U D E _ D I R S
D E P E N D S " T a g l i b 1 . 8 " " T A G L I B _ V E R S I O N V E R S I O N _ G R E A T E R 1 . 7 . 9 9 9 "
)
2015-04-15 18:26:09 +02:00
optional_component ( BOX ON "Box support"
2012-12-12 18:34:15 +01:00
D E P E N D S " G o o g l e s p a r s e h a s h " S P A R S E H A S H _ I N C L U D E _ D I R S
D E P E N D S " T a g l i b 1 . 8 " " T A G L I B _ V E R S I O N V E R S I O N _ G R E A T E R 1 . 7 . 9 9 9 "
)
2015-04-15 18:26:09 +02:00
optional_component ( SEAFILE ON "Seafile support"
2013-02-12 13:54:19 +01:00
D E P E N D S " G o o g l e s p a r s e h a s h " S P A R S E H A S H _ I N C L U D E _ D I R S
D E P E N D S " T a g l i b 1 . 8 " " T A G L I B _ V E R S I O N V E R S I O N _ G R E A T E R 1 . 7 . 9 9 9 "
)
2015-04-15 18:26:09 +02:00
optional_component ( AUDIOCD ON "Devices: Audio CD support"
2012-08-28 20:19:29 +02:00
D E P E N D S " l i b c d i o " C D I O _ F O U N D
)
2011-08-10 17:23:32 +02:00
2015-04-15 18:26:09 +02:00
optional_component ( LIBGPOD ON "Devices: iPod classic support"
2012-08-28 20:19:29 +02:00
D E P E N D S " l i b g p o d " L I B G P O D _ F O U N D
)
2010-08-31 20:23:23 +02:00
2015-04-15 18:26:09 +02:00
optional_component ( GIO ON "Devices: GIO device backend"
2012-08-28 20:19:29 +02:00
D E P E N D S " l i b g i o " G I O _ F O U N D
D E P E N D S " L i n u x o r W i n d o w s " " N O T APPLE "
)
2010-08-31 20:23:23 +02:00
2015-04-15 18:26:09 +02:00
optional_component ( LIBMTP ON "Devices: MTP support"
2012-08-28 20:19:29 +02:00
D E P E N D S " l i b m t p " L I B M T P _ F O U N D
)
2010-12-19 16:10:26 +01:00
2015-04-15 18:26:09 +02:00
optional_component ( LIBLASTFM ON "Last.fm support"
D E P E N D S " l i b l a s t f m " L A S T F M 5 _ L I B R A R I E S L A S T F M 5 _ I N C L U D E _ D I R S
2012-08-28 20:19:29 +02:00
)
2011-03-23 22:53:24 +01:00
2015-04-15 18:26:09 +02:00
optional_component ( DBUS ON "D-Bus support"
2019-01-02 16:03:24 +01:00
D E P E N D S " Q t 5 D B u s " Q t 5 D B u s _ F O U N D
2012-08-28 20:19:29 +02:00
)
2011-04-29 21:44:51 +02:00
2015-04-15 18:26:09 +02:00
optional_component ( WIIMOTEDEV ON "Wiimote support"
2019-01-02 16:03:24 +01:00
D E P E N D S " D - B u s s u p p o r t " Q t 5 D B u s _ F O U N D
2012-08-28 20:19:29 +02:00
)
2011-11-05 16:31:29 +01:00
2016-05-17 21:56:16 +02:00
optional_component ( UDISKS2 ON "Devices: UDisks2 backend"
2019-01-02 16:03:24 +01:00
D E P E N D S " D - B u s s u p p o r t " Q t 5 D B u s _ F O U N D
2018-11-17 15:08:37 +01:00
)
2019-03-18 18:57:57 +01:00
optional_component ( SPOTIFY_BLOB ON "Spotify support: non-GPL binary helper"
D E P E N D S " p r o t o b u f " P R O T O B U F _ F O U N D P R O T O B U F _ P R O T O C _ E X E C U T A B L E
D E P E N D S " l i b s p o t i f y " L I B S P O T I F Y _ F O U N D
)
2018-11-17 15:08:37 +01:00
if ( CRYPTOPP_FOUND OR HAVE_SPOTIFY_BLOB )
set ( CRYPTOPP_OR_HAVE_SPOTIFY_BLOB ON )
endif ( )
optional_component ( SPOTIFY ON "Spotify support"
D E P E N D S " c r y p t o p p o r s p o t i f y b l o b " C R Y P T O P P _ O R _ H A V E _ S P O T I F Y _ B L O B
2016-05-17 21:56:16 +02:00
)
2015-04-15 18:26:09 +02:00
optional_component ( MOODBAR ON "Moodbar support"
2012-08-28 20:19:29 +02:00
D E P E N D S " f f t w 3 " F F T W 3 _ F O U N D
)
2015-04-15 18:26:09 +02:00
optional_component ( SPARKLE ON "Sparkle integration"
2018-11-29 22:32:12 +01:00
D E P E N D S " m a c O S " APPLE
2012-08-28 20:19:29 +02:00
D E P E N D S " S p a r k l e " S P A R K L E
)
2018-11-17 16:00:32 +01:00
optional_component ( ALSA ON "ALSA integration"
D E P E N D S " A L S A " A L S A _ F O U N D
)
2015-04-15 18:26:09 +02:00
optional_component ( LIBPULSE ON "Pulse audio integration"
2014-03-29 09:17:34 +01:00
D E P E N D S " l i b p u l s e " L I B P U L S E _ F O U N D
)
2018-11-29 22:32:12 +01:00
optional_component ( VISUALISATIONS ON "Visualisations"
D E P E N D S " o p e n g l " O P E N G L _ F O U N D
)
2012-08-28 20:19:29 +02:00
2018-11-17 15:08:37 +01:00
optional_component ( TRANSLATIONS ON "Translations"
D E P E N D S " g e t t e x t " G E T T E X T _ X G E T T E X T _ E X E C U T A B L E
D E P E N D S " Q t 5 L i n g u i s t T o o l s " Q t 5 L i n g u i s t T o o l s _ F O U N D
)
2012-08-28 20:19:29 +02:00
2018-11-17 15:08:37 +01:00
option ( USE_BUNDLE "Bundle macos/windows dependencies" ON )
if ( APPLE AND USE_BUNDLE AND NOT USE_BUNDLE_DIR )
set ( USE_BUNDLE_DIR "../PlugIns" )
endif ( )
2012-07-26 22:23:08 +02:00
2018-11-17 15:08:37 +01:00
if ( CRYPTOPP_FOUND )
set ( HAVE_CRYPTOPP ON )
if ( HAVE_SPOTIFY )
set ( HAVE_SPOTIFY_DOWNLOADER ON )
endif ( HAVE_SPOTIFY )
endif ( CRYPTOPP_FOUND )
2012-08-28 20:19:29 +02:00
# Remove GLU and GL from the link line - they're not really required
# and don't exist on my mingw toolchain
list ( REMOVE_ITEM QT_LIBRARIES "-lGLU -lGL" )
2011-04-25 21:16:26 +02:00
2018-11-29 22:32:12 +01:00
option ( USE_SYSTEM_PROJECTM "Don't set this option unless your system projectM library has been compiled with the Clementine patches in 3rdparty" OFF )
2012-12-24 09:29:24 +01:00
option ( BUNDLE_PROJECTM_PRESETS "Install Clementine's own copies of libprojectm presets - disable this if you want to use a system package instead" ON )
2018-11-29 22:32:12 +01:00
if ( HAVE_VISUALISATIONS )
2010-07-10 22:21:06 +02:00
# When/if upstream accepts our patches then these options can be used to link
2010-07-10 22:33:28 +02:00
# to system installed projectM instead.
2010-07-10 22:21:06 +02:00
if ( USE_SYSTEM_PROJECTM )
2010-07-17 13:56:33 +02:00
pkg_check_modules ( LIBPROJECTM libprojectM )
2010-07-10 22:21:06 +02:00
else ( USE_SYSTEM_PROJECTM )
add_subdirectory ( 3rdparty/libprojectm )
set ( LIBPROJECTM_INCLUDE_DIRS ${ CMAKE_CURRENT_SOURCE_DIR } /3rdparty/libprojectm )
set ( LIBPROJECTM_LIBRARIES projectM )
endif ( USE_SYSTEM_PROJECTM )
2018-11-29 22:32:12 +01:00
endif ( HAVE_VISUALISATIONS )
2010-06-11 00:48:23 +02:00
2010-06-30 21:55:46 +02:00
2013-11-22 17:05:55 +01:00
# Build our copy of QSqlLiteDriver.
# We do this because we can't guarantee that the driver shipped with Qt exposes the
# raw sqlite3_ functions required for FTS support. This way we know that those symbols
# exist at compile-time and that our code links to the same sqlite library as the
# Qt driver.
add_subdirectory ( 3rdparty/qsqlite )
include_directories ( "3rdparty/qsqlite" )
2010-06-30 21:55:46 +02:00
2015-04-16 15:06:00 +02:00
# When/if upstream accepts our patches then these options can be used to link
# to system installed qtsingleapplication instead.
option ( USE_SYSTEM_QTSINGLEAPPLICATION "Don't set this option unless your system QtSingleApplication library has been compiled with the Clementine patches in 3rdparty" OFF )
if ( USE_SYSTEM_QTSINGLEAPPLICATION )
2018-10-22 17:44:59 +02:00
find_path ( QTSINGLEAPPLICATION_INCLUDE_DIRS qtsingleapplication.h PATH_SUFFIXES qt5/QtSolutions )
find_library ( QTSINGLEAPPLICATION_LIBRARIES Qt5Solutions_SingleApplication-2.6 )
find_library ( QTSINGLECOREAPPLICATION_LIBRARIES Qt5Solutions_SingleCoreApplication-2.6 )
2015-04-16 15:06:00 +02:00
else ( USE_SYSTEM_QTSINGLEAPPLICATION )
add_subdirectory ( 3rdparty/qtsingleapplication )
set ( QTSINGLEAPPLICATION_INCLUDE_DIRS ${ CMAKE_CURRENT_SOURCE_DIR } /3rdparty/qtsingleapplication )
set ( QTSINGLEAPPLICATION_LIBRARIES qtsingleapplication )
endif ( USE_SYSTEM_QTSINGLEAPPLICATION )
2010-07-10 22:33:28 +02:00
2010-07-11 14:02:30 +02:00
# QtIoCompressor isn't patched, so we can use a system version if it's
# available
find_path ( QTIOCOMPRESSOR_INCLUDE_DIRS qtiocompressor.h PATH_SUFFIXES QtSolutions )
find_library ( QTIOCOMPRESSOR_LIBRARIES QtSolutions_IOCompressor-2.3 )
if ( NOT QTIOCOMPRESSOR_INCLUDE_DIRS OR NOT QTIOCOMPRESSOR_LIBRARIES )
add_subdirectory ( 3rdparty/qtiocompressor )
set ( QTIOCOMPRESSOR_INCLUDE_DIRS ${ CMAKE_CURRENT_SOURCE_DIR } /3rdparty/qtiocompressor )
set ( QTIOCOMPRESSOR_LIBRARIES qtiocompressor )
endif ( NOT QTIOCOMPRESSOR_INCLUDE_DIRS OR NOT QTIOCOMPRESSOR_LIBRARIES )
2010-07-10 22:33:28 +02:00
2010-07-24 14:35:21 +02:00
# When/if upstream accepts our or reimplement our patches then these options can be
# used to link to system installed qxt instead.
option ( USE_SYSTEM_QXT "Don't set this option unless your system Qxt library has been compiled with the Clementine patches in 3rdparty" OFF )
if ( USE_SYSTEM_QXT )
2018-10-22 17:44:59 +02:00
find_path ( QXTCORE_INCLUDE_DIRS qxtglobal.h PATH_SUFFIXES qt5/QxtCore )
find_path ( QXTGUI_INCLUDE_DIRS qxtglobalshortcut.h PATH_SUFFIXES qt5/QxtWidgets )
2010-07-24 14:35:21 +02:00
set ( QXT_INCLUDE_DIRS ${ QXTCORE_INCLUDE_DIRS } ${ QXTGUI_INCLUDE_DIRS } )
# We only need its header. We don't need to link to QxtCore.
2018-10-22 17:44:59 +02:00
find_library ( QXT_LIBRARIES QxtWidgets-qt5 )
2010-07-24 14:35:21 +02:00
else ( USE_SYSTEM_QXT )
2010-07-24 14:46:48 +02:00
add_definitions ( -DQXT_STATIC -DBUILD_QXT_GUI -DBUILD_QXT_CORE )
2010-07-24 17:22:15 +02:00
set ( QXT_INCLUDE_DIRS ${ CMAKE_CURRENT_SOURCE_DIR } /3rdparty/qxt )
set ( QXT_LIBRARIES qxt )
2010-07-24 14:35:21 +02:00
if ( NOT APPLE )
add_subdirectory ( 3rdparty/qxt )
endif ( NOT APPLE )
endif ( USE_SYSTEM_QXT )
2011-03-29 21:05:13 +02:00
# Use system gmock if it's available
# We need to look for both gmock and gtest
find_path ( GMOCK_INCLUDE_DIRS gmock/gmock.h )
find_library ( GMOCK_LIBRARIES gmock )
if ( GMOCK_INCLUDE_DIRS )
find_path ( GTEST_INCLUDE_DIRS gtest/gtest.h )
find_library ( GTEST_LIBRARIES gtest )
if ( GTEST_INCLUDE_DIRS )
set ( USE_SYSTEM_GMOCK 1 )
set ( GMOCK_LIBRARIES ${ GMOCK_LIBRARIES } ${ GTEST_LIBRARIES } )
endif ( GTEST_INCLUDE_DIRS )
endif ( GMOCK_INCLUDE_DIRS )
2010-10-02 18:23:33 +02:00
2015-04-11 22:49:34 +02:00
# Use the system libmygpo-qt5 if a recent enough version was found
if ( LIBMYGPO_QT5_FOUND )
set ( MYGPOQT5_LIBRARIES ${ LIBMYGPO_QT5_LIBRARIES } )
set ( MYGPOQT5_INCLUDE_DIRS ${ LIBMYGPO_QT5_INCLUDE_DIRS } )
2013-04-15 13:32:57 +02:00
else ( )
2017-01-10 00:25:13 +01:00
add_definitions ( -DMYGPO_STATIC )
2015-04-11 22:49:34 +02:00
add_subdirectory ( 3rdparty/libmygpo-qt5 )
set ( MYGPOQT5_LIBRARIES mygpo-qt5 )
set ( MYGPOQT5_INCLUDE_DIRS ${ CMAKE_CURRENT_SOURCE_DIR } /3rdparty/libmygpo-qt5/src )
2013-04-15 13:32:57 +02:00
endif ( )
2012-03-06 01:35:55 +01:00
2012-06-27 17:08:51 +02:00
# Qocoa
add_subdirectory ( 3rdparty/qocoa )
2010-07-11 14:02:30 +02:00
# Subdirectories
2010-02-28 18:28:56 +01:00
add_subdirectory ( src )
2010-09-25 16:55:36 +02:00
if ( WIN32 )
2013-01-17 14:11:15 +01:00
add_subdirectory ( 3rdparty/tinysvcmdns )
2010-09-25 16:55:36 +02:00
endif ( WIN32 )
2010-03-01 02:47:50 +01:00
add_subdirectory ( tests )
2010-05-03 15:58:41 +02:00
add_subdirectory ( dist )
2012-01-06 00:22:51 +01:00
add_subdirectory ( ext/libclementine-common )
add_subdirectory ( ext/libclementine-tagreader )
add_subdirectory ( ext/clementine-tagreader )
2013-01-03 21:40:47 +01:00
add_subdirectory ( ext/libclementine-remote )
2018-11-17 15:08:37 +01:00
if ( HAVE_SPOTIFY )
add_subdirectory ( ext/libclementine-spotifyblob )
endif ( HAVE_SPOTIFY )
2011-02-15 22:08:28 +01:00
2010-09-04 22:01:51 +02:00
option ( WITH_DEBIAN OFF )
if ( WITH_DEBIAN )
add_subdirectory ( debian )
endif ( WITH_DEBIAN )
2010-03-04 17:41:14 +01:00
2011-03-23 22:53:24 +01:00
if ( HAVE_BREAKPAD )
add_subdirectory ( 3rdparty/google-breakpad )
endif ( HAVE_BREAKPAD )
2011-04-29 21:44:51 +02:00
if ( HAVE_SPOTIFY_BLOB )
2012-01-06 00:22:51 +01:00
add_subdirectory ( ext/clementine-spotifyblob )
2011-04-29 21:44:51 +02:00
endif ( HAVE_SPOTIFY_BLOB )
2012-05-27 18:28:07 +02:00
if ( HAVE_MOODBAR )
add_subdirectory ( gst/moodbar )
endif ( )
2021-03-16 06:34:49 +01:00
# Global configuration
configure_file ( ${ CMAKE_CURRENT_SOURCE_DIR } /include/clementine-config.h.in
$ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / i n c l u d e / c l e m e n t i n e - c o n f i g . h )
2010-03-04 17:41:14 +01:00
# Uninstall support
2010-03-04 17:50:27 +01:00
configure_file (
2010-03-04 17:41:14 +01:00
" $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / c m a k e _ u n i n s t a l l . c m a k e . i n "
" $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / c m a k e _ u n i n s t a l l . c m a k e "
I M M E D I A T E @ O N L Y )
2010-03-04 17:50:27 +01:00
add_custom_target ( uninstall
2010-03-04 17:41:14 +01:00
" $ { C M A K E _ C O M M A N D } " - P " $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / c m a k e _ u n i n s t a l l . c m a k e " )
2010-08-31 20:23:23 +02:00
# Show a summary of what we have enabled
summary_show ( )