forked from CDrummond/cantata
-
Notifications
You must be signed in to change notification settings - Fork 0
/
CMakeLists.txt
593 lines (526 loc) · 27.8 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
cmake_minimum_required(VERSION 3.0)
project(cantata)
cmake_policy(SET CMP0020 NEW)
# NOTE: If PROJECT_URL, or PROJECT_REV_URL, are changed, then cantata-dynamic, README, and
# dbus/mpd.cantata.xml will need renaming/updating.
set(PROJECT_URL "cantata.mpd")
set(PROJECT_REV_URL "mpd.cantata")
if (CMAKE_SYSTEM_NAME MATCHES "kOpenBSD.*|OpenBSD.*")
set(OPENBSD TRUE)
endif ()
if (WIN32)
# For some reason I chose mpd as the organization name for Windows builds. So, for config compatability, this is
# left as mpd for now...
set(ORGANIZATION_NAME "mpd")
else ()
# Otherwise its set to the same as the project name. Not sure what else to set it to!!!
set(ORGANIZATION_NAME ${CMAKE_PROJECT_NAME})
endif ()
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
set (QT_MIN_VERSION 5.11)
set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README")
set(CPACK_GENERATOR "DEB;RPM;TBZ2")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Qt Client for MPD")
set(CPACK_SOURCE_GENERATOR "TBZ2")
set(CPACK_PACKAGE_VERSION_MAJOR "2")
set(CPACK_PACKAGE_VERSION_MINOR "5")
set(CPACK_PACKAGE_VERSION_PATCH "0")
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
set(CPACK_PACKAGE_VERSION_SPIN "") # Use ".$number" - e.g. ".1"
set(CPACK_PACKAGE_CONTACT "Craig Drummond <[email protected]>")
set(CANTATA_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}")
set(CANTATA_VERSION_FULL "${CANTATA_VERSION}.${CPACK_PACKAGE_VERSION_PATCH}")
set(CANTATA_VERSION_WITH_SPIN "${CANTATA_VERSION_FULL}${CPACK_PACKAGE_VERSION_SPIN}")
set(CPACK_SOURCE_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${CANTATA_VERSION_WITH_SPIN}")
set(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${CANTATA_VERSION_WITH_SPIN}")
set(CPACK_SOURCE_IGNORE_FILES "/.svn/;/.git/;.gitignore;.github/;.project;CMakeLists.txt.user;README.md;/screenshots/")
include(CPack)
include(MacroLogFeature)
option(ENABLE_TAGLIB "Enable TagLib library (required for tag editing, replaygain calculation, device support, etc)" ON)
option(ENABLE_HTTP_STREAM_PLAYBACK "Enable playback of MPD HTTP streams (LibVLC or QtMultimedia)" ON)
option(ENABLE_FFMPEG "Enable ffmpeg/libav libraries (required for replaygain calculation)" ON)
option(ENABLE_MPG123 "Enable mpg123 libraries (required for replaygain calculation)" ON)
option(ENABLE_PROXY_CONFIG "Enable proxy config in settings dialog" ON)
option(ENABLE_HTTP_SERVER "Enable internal HTTP server to play non-MPD files" ON)
option(ENABLE_LIBVLC "Use libVLC for MPD HTTP stream playback (if ENABLE_HTTP_STREAM_PLAYBACK=ON)" OFF)
option(ENABLE_CATEGORIZED_VIEW "Enable support for categorised view" OFF)
option(ENABLE_SCROBBLING "Enable scrobbling" ON)
if (WIN32 OR APPLE OR HAIKU)
option(ENABLE_DEVICES_SUPPORT "Enable suport for external devices" OFF)
else ()
option(ENABLE_DEVICES_SUPPORT "Enable suport for external devices" ON)
option(ENABLE_REMOTE_DEVICES "Enable support for remote (sshfs, samba) devices" ON)
option(ENABLE_SIMPLE_MPD_SUPPORT "Enable support for simple (Cantata controlled) MPD" ON)
if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
option(ENABLE_UDISKS2 "Build UDisks2 backend, and NOT UDisks" ON)
else()
option(ENABLE_UDISKS2 "Build UDisks2 backend, and NOT UDisks" OFF)
endif()
endif ()
option(ENABLE_CDPARANOIA "Enable CDParanoia libraries (this or libCDIO_paranoia required for AudioCD support)" ON)
option(ENABLE_CDIOPARANOIA "Enable libCDIO_paranoia libraries (this or CDParanoia required for AudioCD support)" ON)
option(ENABLE_CDDB "Enable CDDB libraries (either this or MusicBrianz required for AudioCD support)" ON)
option(ENABLE_MUSICBRAINZ "Enable MusicBrianz libraries (either this or CDDB required for AudioCD support)" ON)
option(ENABLE_MTP "Enable MTP library (required to support MTP devices)" ON)
option(ENABLE_AVAHI "Enable automatic mpd server discovery" ${UNIX})
# Build all apps into top-level folder, so that can run dev versions without install
if (NOT WIN32 AND NOT APPLE)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
endif()
if(ENABLE_AVAHI)
find_package(Avahi)
macro_log_feature(AVAHI_FOUND "Avahi Support" "Automatic MPD-Server Detection" "https://www.avahi.org/" FALSE "" "")
endif()
if (AVAHI_FOUND)
set(CANTATA_SRCS ${CANTATA_SRCS} gui/findmpddialog.cpp gui/avahidiscovery.cpp gui/avahipoll.cpp)
set(CANTATA_LIBS ${CANTATA_LIBS} ${AVAHI_LIBRARIES})
endif()
if (NOT APPLE AND NOT WIN32 AND NOT HAIKU)
set(SHARE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/share"
CACHE PATH "Define install directory for read-only architecture-independent data")
else ()
set(SHARE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}"
CACHE PATH "Define install directory for read-only architecture-independent data")
endif ()
if (WIN32)
set(CANTATA_ICON_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}/icons/cantata)
elseif (APPLE)
set(MACOSX_BUNDLE_BUNDLE_NAME Cantata)
set(MACOSX_BUNDLE_EXECUTABLE cantata)
set(MACOSX_BUNDLE_SHORT_VERSION_STRING ${CANTATA_VERSION})
set(MACOSX_BUNDLE_VERSION ${CANTATA_VERSION})
set(MACOSX_BUNDLE_LONG_VERSION_STRING ${CANTATA_VERSION_WITH_SPIN})
set(MACOSX_BUNDLE_ICON_FILE cantata.icns)
set(CANTATA_APP_CONTENTS_DIR ${CMAKE_INSTALL_PREFIX}/Cantata.app/Contents)
set(MACOSX_BUNDLE_RESOURCES ${CANTATA_APP_CONTENTS_DIR}/Resources)
set(MACOSX_BUNDLE_APP_DIR ${CANTATA_APP_CONTENTS_DIR}/MacOS)
set(CANTATA_ICON_INSTALL_PREFIX ${MACOSX_BUNDLE_RESOURCES}/icons/cantata)
elseif (NOT HAIKU)
set(CANTATA_ICON_INSTALL_PREFIX ${SHARE_INSTALL_PREFIX}/icons/hicolor)
endif ()
if (NOT WIN32 AND NOT APPLE AND ENABLE_DEVICES_SUPPORT AND ENABLE_UDISKS2)
set(WITH_SOLID_UDISKS2 ON)
endif ()
if (NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Release")
message("-- Set build type to ${CMAKE_BUILD_TYPE}")
endif ()
if (NOT APPLE AND NOT WIN32)
if (CANTATA_HELPERS_LIB_DIR AND CMAKE_SIZEOF_VOID_P EQUAL 8)
set(LINUX_LIB_DIR ${CANTATA_HELPERS_LIB_DIR})
else ()
set(LINUX_LIB_DIR lib)
endif ()
endif ()
if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT AND NOT APPLE AND NOT WIN32 AND NOT HAIKU)
set(CMAKE_INSTALL_PREFIX "/usr")
message("-- Set install prefix to ${CMAKE_INSTALL_PREFIX}")
endif ()
if (ENABLE_TAGLIB)
if (NOT TAGLIB_FOUND)
set(TAGLIB_MIN_VERSION "1.6")
find_package(Taglib)
endif()
macro_log_feature(TAGLIB_FOUND "TagLib" "Tag editor, file organiser, etc." "http://taglib.github.io/")
endif ()
if (TAGLIB_FOUND)
if (ENABLE_DEVICES_SUPPORT AND (ENABLE_CDIOPARANOIA OR ENABLE_CDPARANOIA))
# Issue 1021 - prefer libcdio_paranoia over plain cdparanoia
if (ENABLE_CDIOPARANOIA)
find_package(Cdioparanoia)
macro_log_feature(CDIOPARANOIA_FOUND "libcdio_paranoia" "CD ripping." "https://www.gnu.org/software/libcdio/")
endif()
if (NOT CDIOPARANOIA_FOUND)
find_package(Cdparanoia)
macro_log_feature(CDPARANOIA_FOUND "libcdda_paranoia" "CD ripping." "http://www.xiph.org/paranoia")
endif()
if (CDIOPARANOIA_FOUND OR CDPARANOIA_FOUND)
if (ENABLE_CDDB)
find_package(CDDB)
macro_log_feature(CDDB_FOUND "libcddb" "CD info retrieval via CDDB." "http://libcddb.sourceforge.net")
endif ()
if (ENABLE_MUSICBRAINZ)
find_package(MusicBrainz5)
macro_log_feature(MUSICBRAINZ5_FOUND "libmusicbrainz5" "CD info retrieval via MusicBrainz." "http://musicbrainz.org/doc/libmusicbrainz")
endif ()
endif ()
endif ()
set(ENABLE_TAGEDITOR_SUPPORT 1)
set(ENABLE_TRACKORGANIZER_SUPPORT 1)
add_definitions(${TAGLIB_CFLAGS})
if (ENABLE_FFMPEG)
find_package(FFMPEG)
macro_log_feature(FFMPEG_FOUND "libavcodec/libavutil/libavformat" "ReplayGain calculation." "http://ffmpeg.org")
endif ()
if (ENABLE_MPG123)
find_package(MPG123)
macro_log_feature(MPG123_FOUND "libmpg123" "ReplayGain calculation." "http://www.mpg123.de")
endif ()
if (ENABLE_MTP AND ENABLE_DEVICES_SUPPORT AND NOT WIN32 AND NOT APPLE)
find_package(Mtp)
macro_log_feature(MTP_FOUND "libmtp" "MTP Device Support." "http://libmtp.sourceforge.net")
endif ()
else (TAGLIB_FOUND)
set(ENABLE_DEVICES_SUPPORT OFF)
endif ()
if (NOT MTP_FOUND)
set(ENABLE_UNCACHED_MTP OFF)
endif ()
find_package(Qt5 ${QT_MIN_VERSION} COMPONENTS Widgets Xml Network Concurrent Svg Sql REQUIRED)
set(CMAKE_AUTOMOC TRUE)
set(CMAKE_AUTOUIC TRUE)
set(CMAKE_AUTORCC TRUE)
set(CMAKE_CXX_STANDARD 11)
set(QTCORELIBS ${Qt5Core_LIBRARIES})
set(QTNETWORKLIBS ${Qt5Network_LIBRARIES})
set(QTGUILIBS ${Qt5Gui_LIBRARIES})
set(QTLIBS ${QTCORELIBS} ${Qt5Widgets_LIBRARIES} ${QTNETWORKLIBS} ${QTGUILIBS} ${Qt5Xml_LIBRARIES} ${Qt5Concurrent_LIBRARIES} ${Qt5Svg_LIBRARIES} ${Qt5Sql_LIBRARIES})
set(QTINCLUDES ${Qt5Widgets_INCLUDE_DIRS} ${Qt5Network_INCLUDE_DIRS} ${Qt5Xml_INCLUDE_DIRS} ${Qt5Core_INCLUDE_DIRS} ${Qt5Concurrent_INCLUDE_DIRS}
${Qt5Svg_INCLUDE_DIRS} ${Qt5Sql_INCLUDE_DIRS})
add_definitions(${Qt5Widgets_DEFINITIONS} ${Qt5Network_DEFINITIONS} ${Qt5Xml_DEFINITIONS} ${Qt5Concurrent_DEFINITIONS} ${Qt5Svg_DEFINITIONS} ${Qt5Sql_DEFINITIONS})
if (Qt5_POSITION_INDEPENDENT_CODE)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
else ()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS}")
endif ()
if (APPLE OR WIN32 OR HAIKU)
get_target_property(QT_QMAKE_EXECUTABLE Qt5::qmake IMPORTED_LOCATION)
exec_program(${QT_QMAKE_EXECUTABLE} ARGS -query QT_INSTALL_TRANSLATIONS OUTPUT_VARIABLE QT_TRANSLATIONS_DIR)
else ()
find_package(Qt5DBus REQUIRED)
set(QT_QTDBUS_FOUND 1) # required for config.h !!!
set(QTLIBS ${QTLIBS} ${Qt5DBus_LIBRARIES})
set(QTINCLUDES ${QTINCLUDES} ${Qt5DBus_INCLUDE_DIRS})
add_definitions(${Qt5DBus_DEFINITIONS})
endif ()
if (ENABLE_HTTP_STREAM_PLAYBACK)
if (ENABLE_LIBVLC)
find_package(LIBVLC REQUIRED)
macro_log_feature(LIBVLC_FOUND "libVLC" "MPD HTTP stream playback." "http://videolan.org")
add_definitions(-DLIBVLC_FOUND)
include_directories(${LIBVLC_INCLUDE_DIR})
set(CANTATA_LIBS ${CANTATA_LIBS} ${LIBVLC_LIBRARY})
else ()
find_package(Qt5 ${QT_MIN_VERSION} COMPONENTS Multimedia REQUIRED)
macro_log_feature(Qt5Multimedia_FOUND "Qt5Multimedia" "MPD HTTP stream playback." "http://qtproject.org")
include_directories(${Qt5Multimedia_INCLUDE_DIRS})
add_definitions(${Qt5Multimedia_DEFINITIONS})
set(CANTATA_LIBS ${CANTATA_LIBS} ${Qt5Multimedia_LIBRARIES})
endif ()
set(CANTATA_SRCS ${CANTATA_SRCS} mpd-interface/httpstream.cpp)
endif ()
find_package(ZLIB REQUIRED)
if (APPLE)
set(CANTATA_SRCS ${CANTATA_SRCS} mac/dockmenu.cpp mac/macnotify.mm)
find_package(IOKit)
if (IOKIT_FOUND)
set(CANTATA_LIBS ${CANTATA_LIBS} ${IOKIT_LIBRARY})
set(CANTATA_SRCS ${CANTATA_SRCS} mac/powermanagement.cpp)
endif ()
find_package(Foundation REQUIRED)
find_library(MAC_APPKIT_LIBRARY AppKit REQUIRED)
set(CANTATA_LIBS ${CANTATA_LIBS} ${FOUNDATION_LIBRARY} ${MAC_APPKIT_LIBRARY})
find_library(MAC_MEDIAPLAYER_LIBRARY MediaPlayer)
if (MAC_MEDIAPLAYER_LIBRARY)
set(CANTATA_SRCS ${CANTATA_SRCS} mac/macnowplaying.mm)
set(CANTATA_LIBS ${CANTATA_LIBS} ${MAC_MEDIAPLAYER_LIBRARY})
add_definitions(-DMAC_MEDIAPLAYER_FOUND)
endif ()
elseif (WIN32)
find_package(Qt5 COMPONENTS WinExtras REQUIRED)
set(QTINCLUDES ${QTINCLUDES} ${Qt5WinExtras_INCLUDE_DIRS})
set(QTLIBS ${QTLIBS} ${Qt5WinExtras_LIBRARIES})
add_definitions(${Qt5WinExtras_DEFINITIONS})
set(CANTATA_SRCS ${CANTATA_SRCS} windows/thumbnailtoolbar.cpp)
endif ()
# MusicBrainz requires exceptions to be enabled!
if (MUSICBRAINZ5_FOUND)
message("-- Enabling exceptions")
if (CMAKE_COMPILER_IS_GNUCXX)
add_definitions("-fexceptions -UQT_NO_EXCEPTIONS")
endif (CMAKE_COMPILER_IS_GNUCXX)
if (CMAKE_C_COMPILER MATCHES "icc")
add_definitions(-fexceptions)
endif ()
if (MSVC)
add_definitions(-EHsc)
endif ()
endif ()
include_directories(${CMAKE_SOURCE_DIR}/3rdparty ${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${QTINCLUDES} ${ZLIB_INCLUDE_DIRS})
set(CANTATA_SRCS ${CANTATA_SRCS}
gui/settings.cpp gui/application.cpp gui/initialsettingswizard.cpp gui/mainwindow.cpp gui/preferencesdialog.cpp gui/customactionssettings.cpp
gui/interfacesettings.cpp gui/playbacksettings.cpp gui/serversettings.cpp gui/librarypage.cpp gui/customactions.cpp
gui/folderpage.cpp gui/trayitem.cpp gui/cachesettings.cpp gui/coverdialog.cpp gui/searchpage.cpp gui/stdactions.cpp
gui/main.cpp gui/covers.cpp gui/currentcover.cpp gui/mpdbrowsepage.cpp gui/localfolderpage.cpp gui/multimediakeysinterface.cpp
gui/apikeys.cpp gui/apikeyssettings.cpp
devices/deviceoptions.cpp
db/librarydb.cpp db/mpdlibrarydb.cpp
widgets/treeview.cpp widgets/listview.cpp widgets/itemview.cpp widgets/autohidingsplitter.cpp widgets/nowplayingwidget.cpp
widgets/actionlabel.cpp widgets/playqueueview.cpp widgets/groupedview.cpp widgets/actionitemdelegate.cpp widgets/textbrowser.cpp
widgets/volumeslider.cpp widgets/menubutton.cpp widgets/icons.cpp widgets/toolbutton.cpp widgets/wizardpage.cpp
widgets/searchwidget.cpp widgets/messageoverlay.cpp widgets/basicitemdelegate.cpp widgets/sizegrip.cpp
widgets/spacerwidget.cpp widgets/songdialog.cpp widgets/stretchheaderview.cpp
widgets/tableview.cpp widgets/thinsplitterhandle.cpp widgets/coverwidget.cpp widgets/ratingwidget.cpp widgets/notelabel.cpp
widgets/selectorlabel.cpp widgets/titlewidget.cpp widgets/multipagewidget.cpp widgets/singlepagewidget.cpp widgets/stackedpagewidget.cpp
widgets/mirrormenu.cpp widgets/genrecombo.cpp widgets/volumecontrol.cpp
context/lyricsettings.cpp context/ultimatelyricsprovider.cpp context/ultimatelyrics.cpp context/lyricsdialog.cpp
context/contextwidget.cpp context/view.cpp context/artistview.cpp context/albumview.cpp context/songview.cpp context/contextengine.cpp
context/wikipediaengine.cpp context/wikipediasettings.cpp context/othersettings.cpp context/contextsettings.cpp context/togglelist.cpp
context/lastfmengine.cpp context/metaengine.cpp context/onlineview.cpp
streams/streamspage.cpp streams/streamdialog.cpp streams/streamfetcher.cpp
models/streamsproxymodel.cpp models/streamsearchmodel.cpp models/musiclibraryitemroot.cpp
models/musiclibraryitemartist.cpp models/musiclibraryitemalbum.cpp models/musiclibraryproxymodel.cpp models/playlistsmodel.cpp
models/playlistsproxymodel.cpp models/playqueuemodel.cpp models/proxymodel.cpp models/actionmodel.cpp models/musiclibraryitem.cpp
models/browsemodel.cpp models/searchmodel.cpp models/streamsmodel.cpp models/searchproxymodel.cpp models/sqllibrarymodel.cpp
models/mpdlibrarymodel.cpp models/mpdsearchmodel.cpp models/playqueueproxymodel.cpp models/localbrowsemodel.cpp
mpd-interface/mpdconnection.cpp mpd-interface/mpdparseutils.cpp mpd-interface/mpdstats.cpp mpd-interface/mpdstatus.cpp
mpd-interface/song.cpp mpd-interface/cuefile.cpp
network/networkaccessmanager.cpp network/networkproxyfactory.cpp
playlists/dynamicplaylists.cpp playlists/playlistproxymodel.cpp playlists/dynamicplaylistspage.cpp playlists/playlistruledialog.cpp
playlists/playlistrulesdialog.cpp playlists/playlistspage.cpp playlists/storedplaylistspage.cpp playlists/rulesplaylists.cpp
playlists/smartplaylists.cpp playlists/smartplaylistspage.cpp
online/onlineservicespage.cpp online/onlinedbservice.cpp online/jamendoservice.cpp online/onlinedbwidget.cpp online/onlineservice.cpp
online/jamendosettingsdialog.cpp online/magnatuneservice.cpp online/magnatunesettingsdialog.cpp
#online/soundcloudservice.cpp
online/onlinesearchwidget.cpp online/podcastservice.cpp online/rssparser.cpp online/opmlparser.cpp online/podcastsearchdialog.cpp
online/podcastsettingsdialog.cpp online/podcastwidget.cpp online/onlinesearchservice.cpp
db/onlinedb.cpp
http/httpserver.cpp)
if (ENABLE_CATEGORIZED_VIEW)
set(CANTATA_SRCS ${CANTATA_SRCS} widgets/categorizedview.cpp)
endif ()
if (ENABLE_SIMPLE_MPD_SUPPORT)
set(CANTATA_SRCS ${CANTATA_SRCS} mpd-interface/mpduser.cpp)
endif ()
if (ENABLE_SCROBBLING)
set(CANTATA_SRCS ${CANTATA_SRCS} scrobbling/scrobbler.cpp scrobbling/pausabletimer.cpp scrobbling/scrobblingsettings.cpp scrobbling/scrobblinglove.cpp)
endif()
set(CANTATA_LIBS ${CANTATA_LIBS} support)
if (WIN32)
# Not installed for windows - script uses sym-links...
elseif (APPLE)
install(PROGRAMS playlists/cantata-dynamic DESTINATION ${MACOSX_BUNDLE_RESOURCES}/scripts/)
else ()
install(PROGRAMS playlists/cantata-dynamic DESTINATION ${SHARE_INSTALL_PREFIX}/${CMAKE_PROJECT_NAME}/scripts)
endif ()
if (ENABLE_HTTP_SERVER)
set(CANTATA_SRCS ${CANTATA_SRCS} http/httpsocket.cpp)
endif ()
if (QT_QTDBUS_FOUND)
set(CANTATA_SRCS ${CANTATA_SRCS} dbus/gnomemediakeys.cpp)
set_SOURCE_FILES_PROPERTIES(dbus/org.gnome.SettingsDaemon.xml dbus/org.gnome.SettingsDaemon.MediaKeys.xml PROPERTIES NO_NAMESPACE TRUE)
set(CANTATA_SRCS ${CANTATA_SRCS} dbus/mpris.cpp dbus/powermanagement.cpp)
set(CANTATA_SRCS ${CANTATA_SRCS} dbus/notify.cpp)
qt5_add_dbus_adaptor(CANTATA_SRCS dbus/org.mpris.MediaPlayer2.Player.xml dbus/mpris.h Mpris)
qt5_add_dbus_adaptor(CANTATA_SRCS dbus/org.mpris.MediaPlayer2.root.xml dbus/mpris.h Mpris)
qt5_add_dbus_adaptor(CANTATA_SRCS dbus/${PROJECT_REV_URL}.xml gui/mainwindow.h MainWindow)
qt5_add_dbus_interfaces(CANTATA_SRCS dbus/org.freedesktop.Notifications.xml)
qt5_add_dbus_interfaces(CANTATA_SRCS dbus/org.freedesktop.UPower.xml)
qt5_add_dbus_interfaces(CANTATA_SRCS dbus/org.freedesktop.login1.xml)
qt5_add_dbus_interfaces(CANTATA_SRCS dbus/org.gnome.SettingsDaemon.xml)
qt5_add_dbus_interfaces(CANTATA_SRCS dbus/org.gnome.SettingsDaemon.MediaKeys.xml)
qt5_add_dbus_interfaces(CANTATA_SRCS dbus/org.kde.Solid.PowerManagement.PolicyAgent.xml)
qt5_add_dbus_interfaces(CANTATA_SRCS dbus/org.freedesktop.PowerManagement.Inhibit.xml)
endif ()
if (NOT WIN32 AND NOT APPLE)
set(CANTATA_SRCS ${CANTATA_SRCS} devices/mountpoints.cpp)
endif ()
set(CANTATA_SRCS ${CANTATA_SRCS} cantata.qrc cantata_media.qrc)
if (TAGLIB_FOUND)
set(CANTATA_SRCS ${CANTATA_SRCS} tags/tageditor.cpp tags/trackorganiser.cpp devices/filenameschemedialog.cpp widgets/tagspinbox.cpp)
# Cantata still links to taglib, even if external tag reader/writer is used, because JamendoService uses taglib for ID3 genres.
set(CANTATA_LIBS ${CANTATA_LIBS} ${TAGLIB_LIBRARIES})
include_directories(${TAGLIB_INCLUDES})
if (APPLE OR OPENBSD)
# for some reason under osx we get full path no include/taglib?
include_directories(${TAGLIB_INCLUDES}/..)
endif ()
if (ENABLE_DEVICES_SUPPORT)
set(CANTATA_LIBS ${CANTATA_LIBS} solidlite)
endif ()
if (FFMPEG_FOUND OR MPG123_FOUND)
set(CANTATA_SRCS ${CANTATA_SRCS} replaygain/albumscanner.cpp replaygain/rgdialog.cpp replaygain/tagreader.cpp replaygain/jobcontroller.cpp)
set(ENABLE_REPLAYGAIN_SUPPORT 1)
add_subdirectory(replaygain)
endif ()
set(CANTATA_SRCS ${CANTATA_SRCS} tags/taghelperiface.cpp)
add_subdirectory(tags)
if (ENABLE_DEVICES_SUPPORT)
add_subdirectory(3rdparty/solid-lite)
if (MTP_FOUND)
set(CANTATA_SRCS ${CANTATA_SRCS} devices/mtpdevice.cpp)
include_directories(${MTP_INCLUDE_DIR})
set(CANTATA_LIBS ${CANTATA_LIBS} ${MTP_LIBRARIES})
endif ()
if (CDDB_FOUND OR MUSICBRAINZ5_FOUND)
if (CDDB_FOUND)
set(CANTATA_SRCS ${CANTATA_SRCS} devices/cddbinterface.cpp)
include_directories(${CDDB_INCLUDE_DIR})
set(CANTATA_LIBS ${CANTATA_LIBS} ${CDDB_LIBS})
endif ()
if (MUSICBRAINZ5_FOUND)
set(CANTATA_SRCS ${CANTATA_SRCS} devices/musicbrainz.cpp)
include_directories(${MUSICBRAINZ5_INCLUDE_DIRS})
set(CANTATA_LIBS ${CANTATA_LIBS} ${MUSICBRAINZ5_LIBRARIES})
endif ()
set(CANTATA_SRCS ${CANTATA_SRCS} devices/audiocddevice.cpp devices/cddbselectiondialog.cpp
devices/cdparanoia.cpp devices/audiocdsettings.cpp devices/extractjob.cpp devices/albumdetailsdialog.cpp)
# If CDDB/MusicBrainz5 found - then CDParanoia must have been!
if (CDIOPARANOIA_FOUND)
set(CANTATA_LIBS ${CANTATA_LIBS} ${CDIOPARANOIA_LIBRARIES})
include_directories(${CDIOPARANOIA_INCLUDE_DIRS})
else()
set(CANTATA_LIBS ${CANTATA_LIBS} ${CDPARANOIA_LIBRARIES})
include_directories(${CDPARANOIA_INCLUDE_DIR})
endif()
endif ()
set(CANTATA_SRCS ${CANTATA_SRCS} devices/devicespage.cpp devices/filejob.cpp
devices/device.cpp devices/fsdevice.cpp devices/umsdevice.cpp devices/splitlabelwidget.cpp
models/devicesmodel.cpp devices/actiondialog.cpp devices/devicepropertieswidget.cpp
devices/devicepropertiesdialog.cpp devices/encoders.cpp devices/freespaceinfo.cpp
devices/transcodingjob.cpp devices/valueslider.cpp devices/syncdialog.cpp
devices/synccollectionwidget.cpp
models/musiclibrarymodel.cpp)
if (ENABLE_REMOTE_DEVICES)
set(CANTATA_SRCS ${CANTATA_SRCS} devices/remotefsdevice.cpp devices/remotedevicepropertiesdialog.cpp
devices/remotedevicepropertieswidget.cpp)
endif ()
else (ENABLE_DEVICES_SUPPORT)
set(CANTATA_SRCS ${CANTATA_SRCS} devices/device.cpp)
endif ()
else (TAGLIB_FOUND)
set(ENABLE_DEVICES_SUPPORT OFF)
set(ENABLE_REMOTE_DEVICES OFF)
endif ()
if (ENABLE_PROXY_CONFIG)
set(CANTATA_SRCS ${CANTATA_SRCS} network/proxysettings.cpp)
endif ()
if (WIN32 OR APPLE OR HAIKU)
set(CANTATA_SRCS ${CANTATA_SRCS} gui/singleapplication.cpp)
endif ()
if (WIN32)
set(CANTATA_SRCS ${CANTATA_SRCS} gui/application_win.cpp)
elseif (APPLE)
set(CANTATA_SRCS ${CANTATA_SRCS} gui/application_mac.cpp)
elseif (HAIKU)
set(CANTATA_SRCS ${CANTATA_SRCS} gui/application_haiku.cpp)
else ()
set(CANTATA_SRCS ${CANTATA_SRCS} gui/application_qt.cpp)
endif ()
if (WIN32)
add_definitions(-DWIN32)
add_subdirectory(windows)
set(CANTATA_SRCS ${CANTATA_SRCS} windows/cantataico.rc)
if (NOT CANTATA_WINDOWS_INSTALLER_DEST)
set(CANTATA_WINDOWS_INSTALLER_DEST z:\ )
endif ()
elseif (APPLE)
add_definitions(-D__APPLE__)
endif ()
set(CANTATA_SRCS ${CANTATA_SRCS} gui/shortcutssettingspage.cpp gui/mediakeys.cpp)
if (WIN32 OR APPLE)
set(CANTATA_SRCS ${CANTATA_SRCS} cantata_icon.qrc)
else()
add_subdirectory(icons)
endif()
if (WIN32)
add_definitions(-DQXT_STATIC)
add_subdirectory(3rdparty/qxt)
set(CANTATA_SRCS ${CANTATA_SRCS} gui/qxtmediakeys.cpp)
set(CMAKE_BUILD_TYPE "Release")
ADD_EXECUTABLE(cantata WIN32 ${CANTATA_SRCS} ${CANTATA_PO})
install(TARGETS cantata DESTINATION ${CMAKE_INSTALL_PREFIX})
elseif (APPLE)
ADD_EXECUTABLE(cantata MACOSX_BUNDLE ${CANTATA_SRCS} ${CANTATA_PO})
set(BREW_OPENSSL_PATH /usr/local/opt/openssl/lib)
if (EXISTS ${BREW_OPENSSL_PATH}/libcrypto.1.0.0.dylib AND EXISTS ${BREW_OPENSSL_PATH}/libssl.1.0.0.dylib)
install(FILES ${BREW_OPENSSL_PATH}/libcrypto.1.0.0.dylib DESTINATION ${MACOSX_BUNDLE_APP_DIR} RENAME libcrypto.dylib)
install(FILES ${BREW_OPENSSL_PATH}/libssl.1.0.0.dylib DESTINATION ${MACOSX_BUNDLE_APP_DIR} RENAME libssl.dylib)
endif()
add_subdirectory(mac)
include(DeployQt5)
install(PROGRAMS ${CMAKE_BINARY_DIR}/cantata.app/Contents/MacOS/cantata DESTINATION ${MACOSX_BUNDLE_APP_DIR})
# Create our own plist file to enable HighDPI support
configure_file(mac/Info.plist.cmake ${CMAKE_CURRENT_BINARY_DIR}/mac/Info.plist)
configure_file(mac/dmg/create-dmg.sh.in ${CMAKE_CURRENT_BINARY_DIR}/mac/create-dmg.sh)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/mac/Info.plist DESTINATION ${CANTATA_APP_CONTENTS_DIR})
if (TAGLIB_FOUND)
# *NEED* to install cantata-replagain/cantata-tags *before* install_qt5_executable fix'es the bundle
# If we install from their own CMakeLists.txt then they are installed *after* the fix-up, and so link
# to the build libs not the packaged ones!
if (FFMPEG_FOUND OR MPG123_FOUND)
install(PROGRAMS ${CMAKE_BINARY_DIR}/replaygain/cantata-replaygain DESTINATION ${MACOSX_BUNDLE_APP_DIR})
endif (FFMPEG_FOUND OR MPG123_FOUND)
install(PROGRAMS ${CMAKE_BINARY_DIR}/tags/cantata-tags DESTINATION ${MACOSX_BUNDLE_APP_DIR})
endif (TAGLIB_FOUND)
if (ENABLE_HTTP_STREAM_PLAYBACK AND NOT ENABLE_LIBVLC)
install_qt5_executable(Cantata.app "qjpeg;qsvg;qsvgicon;qcocoa;qmacstyle;qsqlite;qavfmediaplayer")
else (ENABLE_HTTP_STREAM_PLAYBACK AND NOT ENABLE_LIBVLC)
install_qt5_executable(Cantata.app "qjpeg;qsvg;qsvgicon;qcocoa;qmacstyle;qsqlite")
endif (ENABLE_HTTP_STREAM_PLAYBACK AND NOT ENABLE_LIBVLC)
elseif (HAIKU)
ADD_EXECUTABLE(cantata ${CANTATA_SRCS})
install(TARGETS cantata DESTINATION ${CMAKE_INSTALL_PREFIX})
else ()
ADD_EXECUTABLE(cantata ${CANTATA_SRCS})
install(TARGETS cantata RUNTIME DESTINATION bin LIBRARY DESTINATION lib ARCHIVE DESTINATION lib)
endif ()
if (ENABLE_CATEGORIZED_VIEW)
add_subdirectory(3rdparty/kcategorizedview)
target_link_libraries(cantata kcategorizedview)
endif ()
if (WIN32 OR APPLE OR HAIKU)
add_subdirectory(3rdparty/qtsingleapplication)
target_link_libraries(cantata qtsingleapplication)
else ()
set(XDG_APPS_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/applications")
endif ()
if (WIN32)
target_link_libraries(cantata qxt)
endif (WIN32)
add_subdirectory(translations)
add_subdirectory(support)
add_subdirectory(3rdparty/qtiocompressor)
add_subdirectory(streams/icons)
add_subdirectory(online/icons)
target_link_libraries(cantata support-core qtiocompressor ${CANTATA_LIBS} ${QTLIBS} ${ZLIB_LIBRARIES})
# enable warnings
add_definitions(-DQT_NO_DEBUG_OUTPUT)
if (UNIX AND NOT APPLE)
if (NOT HAIKU)
configure_file(cantata-remote.cmake ${CMAKE_BINARY_DIR}/cantata-remote)
install(PROGRAMS ${CMAKE_BINARY_DIR}/cantata-remote DESTINATION ${SHARE_INSTALL_PREFIX}/${CMAKE_PROJECT_NAME}/scripts)
install(FILES cantata.desktop DESTINATION ${XDG_APPS_INSTALL_DIR})
endif ()
target_link_libraries(cantata -lpthread)
endif ()
configure_file(config.h.cmake ${CMAKE_BINARY_DIR}/config.h)
if (NOT WIN32 AND NOT APPLE AND NOT HAIKU)
# uninstall target
configure_file("${CMAKE_SOURCE_DIR}/cmake_uninstall.cmake.in" "${CMAKE_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY)
configure_file(install_dirs.cmake ${CMAKE_BINARY_DIR}/install_dirs)
add_custom_target(uninstall COMMAND ${CMAKE_COMMAND} -P ${CMAKE_BINARY_DIR}/cmake_uninstall.cmake)
endif ()
macro_display_feature_log()
if ( (NOT WIN32 AND NOT APPLE AND ( (NOT ENABLE_SIMPLE_MPD_SUPPORT) OR (NOT ENABLE_DEVICES_SUPPORT) OR (ENABLE_DEVICES_SUPPORT AND NOT ENABLE_REMOTE_DEVICES) ) ) OR (NOT ENABLE_HTTP_STREAM_PLAYBACK) OR (NOT ENABLE_PROXY_CONFIG))
message("-----------------------------------------------------------------------------")
message("-- The following STANDARD options have been DISABLED.")
message("-----------------------------------------------------------------------------")
if (NOT WIN32 AND NOT APPLE)
if (NOT ENABLE_SIMPLE_MPD_SUPPORT)
message(" * Simple/Personal (Cantata controlled) MPD instance support")
endif()
if (NOT ENABLE_DEVICES_SUPPORT)
message(" * Devices Tab - Media device support (UMS, MTP, AudioCD).")
elseif (NOT ENABLE_REMOTE_DEVICES)
message(" * Remote Devices - Access sshfs, Samba, and local folders as devices. (EXPERIMENTAL)")
endif ()
endif()
if (NOT ENABLE_HTTP_STREAM_PLAYBACK)
message(" * MPD HTTP Streams - Playback MPD HTTP output stream via libVLC.")
endif ()
if (NOT ENABLE_PROXY_CONFIG)
message(" * Proxy Configuration")
endif ()
message("")
endif ()