Warning, /multimedia/kmix/CMakeLists.txt is written in an unsupported language. File is not indexed.

0001 cmake_minimum_required(VERSION 3.16)
0002 
0003 # KDE Applications version, managed by release script.
0004 set(RELEASE_SERVICE_VERSION_MAJOR "22")
0005 set(RELEASE_SERVICE_VERSION_MINOR "08")
0006 set(RELEASE_SERVICE_VERSION_MICRO "1")
0007 set(RELEASE_SERVICE_VERSION "${RELEASE_SERVICE_VERSION_MAJOR}.${RELEASE_SERVICE_VERSION_MINOR}.${RELEASE_SERVICE_VERSION_MICRO}")
0008 
0009 set(KMIX_VERSION ${RELEASE_SERVICE_VERSION})
0010 project(kmix VERSION ${KMIX_VERSION})
0011 # SOVERSION of the kmixcore library
0012 set(KMIX_VERSION_MAJOR 5)
0013 # Version of the configuration, originally from core/version.h
0014 set(KMIX_CONFIG_VERSION 3)
0015 
0016 ####################################################################################################
0017 ########### options ################################################################################
0018 ####################################################################################################
0019 
0020 # Plasma dataengines are apparently deprecated and will be removed in Plasma 6
0021 option(BUILD_DATAENGINE "Build the Plasma dataengine" OFF)
0022 
0023 ####################################################################################################
0024 ########### dependencies and tests #################################################################
0025 ####################################################################################################
0026 
0027 set (QT_MIN_VERSION "5.15.0")
0028 set (KF5_MIN_VERSION "5.90.0")
0029 set (PA_MIN_VERSION "0.9.16")
0030 set(KDE_COMPILERSETTINGS_LEVEL "5.82")
0031 find_package(ECM ${KF5_MIN_VERSION} REQUIRED NO_MODULE)
0032 set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} )
0033 set(CMAKE_CXX_STANDARD 17)
0034 set(CMAKE_CXX_STANDARD_REQUIRED ON)
0035 
0036 include(KDEInstallDirs)
0037 include(KDECMakeSettings)
0038 include(KDECompilerSettings NO_POLICY_SCOPE)
0039 include(ECMInstallIcons)
0040 include(ECMQtDeclareLoggingCategory)
0041 include(GenerateExportHeader)
0042 
0043 find_package(Qt${QT_MAJOR_VERSION} ${QT_MIN_VERSION} REQUIRED NO_MODULE COMPONENTS
0044     Core
0045     DBus
0046     Gui
0047     Widgets
0048     Xml
0049 )
0050 
0051 find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS
0052     Completion
0053     Config
0054     ConfigWidgets
0055     Crash
0056     DBusAddons
0057     DocTools
0058     GlobalAccel
0059     I18n
0060     Notifications
0061     Solid
0062     WidgetsAddons
0063     WindowSystem
0064     XmlGui
0065 )
0066 
0067 if (BUILD_DATAENGINE)
0068   find_package(KF5Plasma ${KF5_MIN_VERSION} REQUIRED)
0069   set_package_properties(KF5Plasma PROPERTIES PURPOSE "Required to build the Plasma dataengine")
0070 endif ()
0071 
0072 # PulseAudio is an optional dependency
0073 find_package(PulseAudio "${PA_MIN_VERSION}")
0074 
0075 # Canberra is an optional dependency
0076 find_package(Canberra)
0077 
0078 # ALSA is an optional dependency
0079 find_package(ALSA)
0080 
0081 ####################################################################################################
0082 ########### compile definitions ####################################################################
0083 ####################################################################################################
0084 
0085 include_directories(${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR})
0086 
0087 add_definitions(-DTRANSLATION_DOMAIN=\"kmix\")
0088 add_definitions(-DKMIX_VERSION=\"${KMIX_VERSION}\")
0089 add_definitions(-DKMIX_CONFIG_VERSION=${KMIX_CONFIG_VERSION})
0090 
0091 if (ALSA_FOUND)
0092   set(HAVE_LIBASOUND2 TRUE)
0093   add_definitions(-DHAVE_LIBASOUND2)
0094 endif ()
0095 
0096 if (PulseAudio_FOUND)
0097   add_definitions(-DHAVE_PULSE)
0098 endif ()
0099 
0100 if (CANBERRA_FOUND)
0101   add_definitions(-DHAVE_CANBERRA)
0102 endif ()
0103 
0104 ####################################################################################################
0105 ########### subdirectories #########################################################################
0106 ####################################################################################################
0107 
0108 add_subdirectory(doc)
0109 add_subdirectory(pics)
0110 add_subdirectory(profiles)
0111 
0112 if (BUILD_DATAENGINE)
0113   if (KF5Plasma_FOUND)
0114     add_subdirectory(plasma)
0115   endif ()
0116 endif ()
0117 
0118 ####################################################################################################
0119 ########### definitions: logging ###################################################################
0120 ####################################################################################################
0121 
0122 ecm_qt_declare_logging_category(kmix_debug_SRCS
0123                                 HEADER kmix_debug.h
0124                                 IDENTIFIER KMIX_LOG
0125                                 EXPORT kmixlogging
0126                                 DESCRIPTION "KMix sound mixer and volume control"
0127                                 CATEGORY_NAME org.kde.kmix)
0128 
0129 ####################################################################################################
0130 ########### definitions: DBus adaptor ##############################################################
0131 ####################################################################################################
0132 
0133 set(kmix_adaptor_SRCS
0134   dbus/dbusmixerwrapper.cpp
0135   dbus/dbusmixsetwrapper.cpp
0136   dbus/dbuscontrolwrapper.cpp
0137 )
0138 
0139 qt_add_dbus_adaptor( kmix_adaptor_SRCS dbus/org.kde.kmix.control.xml
0140         dbus/dbuscontrolwrapper.h DBusControlWrapper )
0141 qt_add_dbus_adaptor( kmix_adaptor_SRCS dbus/org.kde.kmix.mixer.xml
0142         dbus/dbusmixerwrapper.h DBusMixerWrapper )
0143 qt_add_dbus_adaptor( kmix_adaptor_SRCS dbus/org.kde.kmix.mixset.xml
0144         dbus/dbusmixsetwrapper.h DBusMixSetWrapper )
0145 
0146 install(FILES dbus/org.kde.kmix.control.xml DESTINATION ${KDE_INSTALL_DBUSINTERFACEDIR})
0147 install(FILES dbus/org.kde.kmix.mixer.xml DESTINATION ${KDE_INSTALL_DBUSINTERFACEDIR})
0148 install(FILES dbus/org.kde.kmix.mixset.xml DESTINATION ${KDE_INSTALL_DBUSINTERFACEDIR})
0149 
0150 ####################################################################################################
0151 ########### definitions: backends ##################################################################
0152 ####################################################################################################
0153 
0154 set(kmix_backend_SRCS
0155   backends/mixer_backend.cpp
0156   backends/mixer_mpris2.cpp
0157 )
0158 
0159 if (HAVE_LIBASOUND2)
0160   set(kmix_backend_SRCS ${kmix_backend_SRCS} backends/mixer_alsa9.cpp backends/mixer_alsa9.h)
0161 endif ()
0162 
0163 if (PulseAudio_FOUND)
0164   set(kmix_backend_SRCS ${kmix_backend_SRCS} backends/mixer_pulse.cpp backends/mixer_pulse.h)
0165 endif ()
0166 
0167 ####################################################################################################
0168 ########### target: kmixcore library ###############################################################
0169 ####################################################################################################
0170 
0171 set(kmixcore_SRCS
0172   core/MediaController.cpp
0173   core/mixertoolbox.cpp
0174   core/kmixdevicemanager.cpp
0175   core/ControlManager.cpp
0176   core/MasterControl.cpp
0177   core/mixer.cpp
0178   core/mixset.cpp
0179   core/mixdevice.cpp
0180   core/mixdevicecomposite.cpp
0181   core/volume.cpp
0182   core/MediaController.h
0183   core/mixertoolbox.h
0184   core/kmixdevicemanager.h
0185   core/ControlManager.h
0186   core/MasterControl.h
0187   core/mixer.h
0188   core/mixset.h
0189   core/mixdevice.h
0190   core/mixdevicecomposite.h
0191   core/volume.h
0192 )
0193 
0194 kconfig_add_kcfg_files(kmixcore_SRCS core/settings.kcfgc)
0195 
0196 add_library(kmixcore SHARED
0197   ${kmixcore_SRCS}
0198   ${kmix_adaptor_SRCS}
0199   ${kmix_backend_SRCS}
0200   ${kmix_debug_SRCS}
0201 )
0202 
0203 target_link_libraries(kmixcore
0204   PUBLIC
0205     Qt::Core
0206     Qt::Widgets
0207   PRIVATE
0208     Qt::Xml
0209     Qt::DBus
0210     KF5::I18n
0211     KF5::Solid
0212   PUBLIC
0213     KF5::ConfigCore
0214     KF5::ConfigGui
0215     KF5::CoreAddons
0216 )
0217 
0218 set_target_properties(kmixcore PROPERTIES VERSION ${KMIX_VERSION} SOVERSION ${KMIX_VERSION_MAJOR})
0219 generate_export_header(kmixcore BASE_NAME kmixcore EXPORT_FILE_NAME kmixcore_export.h)
0220 
0221 if (HAVE_LIBASOUND2)
0222   target_link_libraries(kmixcore PRIVATE ALSA::ALSA)
0223 endif ()
0224 
0225 if (PulseAudio_FOUND)
0226   target_link_libraries(kmixcore PRIVATE PulseAudio::PulseAudio)
0227 endif ()
0228 
0229 if (CANBERRA_FOUND)
0230   # VolumeFeedback calls Canberra directly, so public linking is required
0231   target_link_libraries(kmixcore PUBLIC Canberra::Canberra)
0232 endif ()
0233 
0234 install(TARGETS kmixcore DESTINATION ${KDE_INSTALL_LIBDIR} LIBRARY NAMELINK_SKIP)
0235 install(FILES core/settings.kcfg RENAME kmixsettings.kcfg DESTINATION ${KDE_INSTALL_KCFGDIR})
0236 
0237 ####################################################################################################
0238 ########### target: kmixgui library ################################################################
0239 ####################################################################################################
0240 
0241 set(kmixgui_SRCS
0242   gui/dialogbase.cpp
0243   gui/dialogstatesaver.cpp
0244   gui/kmixdockwidget.cpp
0245   gui/kmixprefdlg.cpp
0246   gui/viewbase.cpp
0247   gui/viewdockareapopup.cpp
0248   gui/viewsliders.cpp
0249   gui/mixdevicewidget.cpp
0250   gui/mdwslider.cpp
0251   gui/mdwenum.cpp
0252   gui/kmixerwidget.cpp
0253   gui/verticaltext.cpp
0254   gui/volumeslider.cpp
0255   gui/kmixtoolbox.cpp
0256   gui/dialogaddview.cpp
0257   gui/dialogviewconfiguration.cpp
0258   gui/dialogselectmaster.cpp
0259   gui/dialogchoosebackends.cpp
0260   gui/guiprofile.cpp
0261   gui/toggletoolbutton.cpp
0262   gui/dialogbase.h
0263   gui/dialogstatesaver.h
0264   gui/kmixdockwidget.h
0265   gui/kmixprefdlg.h
0266   gui/viewbase.h
0267   gui/viewdockareapopup.h
0268   gui/viewsliders.h
0269   gui/mixdevicewidget.h
0270   gui/mdwslider.h
0271   gui/mdwenum.h
0272   gui/kmixerwidget.h
0273   gui/verticaltext.h
0274   gui/volumeslider.h
0275   gui/kmixtoolbox.h
0276   gui/dialogaddview.h
0277   gui/dialogviewconfiguration.h
0278   gui/dialogselectmaster.h
0279   gui/dialogchoosebackends.h
0280   gui/guiprofile.h
0281   gui/toggletoolbutton.h
0282 )
0283 
0284 add_library(kmixgui STATIC
0285   ${kmixgui_SRCS}
0286   ${kmix_debug_SRCS}
0287 )
0288 
0289 target_link_libraries(kmixgui
0290   kmixcore
0291   Qt::Core
0292   Qt::Widgets
0293   KF5::I18n
0294   KF5::ConfigCore
0295   KF5::ConfigGui
0296   KF5::GlobalAccel
0297   KF5::Notifications
0298   KF5::XmlGui
0299   KF5::WindowSystem
0300 )
0301 
0302 ####################################################################################################
0303 ########### target: kmix ###########################################################################
0304 ####################################################################################################
0305 
0306 set(kmix_SRCS
0307   apps/main.cpp
0308   apps/kmixwindow.cpp
0309   apps/kmixapp.cpp
0310   apps/kmixwindow.h
0311   apps/kmixapp.h
0312   ${kmix_debug_SRCS}
0313 )
0314 
0315 if (CANBERRA_FOUND)
0316   set(kmix_SRCS ${kmix_SRCS} apps/volumefeedback.cpp apps/volumefeedback.h)
0317 endif ()
0318 
0319 add_executable(kmix ${kmix_SRCS})
0320 target_link_libraries(kmix
0321   kmixcore
0322   kmixgui
0323   KF5::I18n
0324   KF5::CoreAddons
0325   KF5::DBusAddons
0326   KF5::GlobalAccel
0327   KF5::XmlGui
0328   KF5::Notifications
0329   KF5::WindowSystem
0330 )
0331 
0332 install(TARGETS kmix ${KDE_INSTALL_TARGETS_DEFAULT_ARGS})
0333 
0334 install(FILES desktop/kmixui.rc DESTINATION ${KDE_INSTALL_KXMLGUIDIR}/kmix)
0335 install(PROGRAMS desktop/org.kde.kmix.desktop DESTINATION ${KDE_INSTALL_APPDIR})
0336 install(FILES desktop/org.kde.kmix.appdata.xml DESTINATION ${KDE_INSTALL_METAINFODIR})
0337 install(FILES desktop/kmix_autostart.desktop DESTINATION ${KDE_INSTALL_AUTOSTARTDIR})
0338 install(FILES desktop/kmix.notifyrc DESTINATION ${KDE_INSTALL_KNOTIFYRCDIR} )
0339 
0340 ####################################################################################################
0341 ########### target: kded_kmixd #####################################################################
0342 ####################################################################################################
0343 
0344 set(kmixd_SRCS
0345   apps/kmixd.cpp
0346   ${kmix_debug_SRCS}
0347 )
0348 
0349 add_library(kded_kmixd MODULE ${kmixd_SRCS})
0350 set_target_properties(kded_kmixd PROPERTIES OUTPUT_NAME kmixd)
0351 kcoreaddons_desktop_to_json(kded_kmixd desktop/kmixd.desktop)
0352 
0353 target_link_libraries(kded_kmixd
0354   kmixcore
0355   KF5::I18n
0356   KF5::CoreAddons
0357   KF5::DBusAddons
0358 )
0359 
0360 install(TARGETS kded_kmixd DESTINATION ${KDE_INSTALL_PLUGINDIR}/kf5/kded)
0361 
0362 ####################################################################################################
0363 ########### target: kmixctrl #######################################################################
0364 ####################################################################################################
0365 
0366 set(kmixctrl_SRCS
0367   apps/kmixctrl.cpp
0368   ${kmix_debug_SRCS}
0369 )
0370 
0371 add_executable(kmixctrl ${kmixctrl_SRCS})
0372 target_link_libraries(kmixctrl
0373   kmixcore
0374   KF5::I18n
0375   KF5::CoreAddons
0376 )
0377 
0378 install(TARGETS kmixctrl ${KDE_INSTALL_TARGETS_DEFAULT_ARGS})
0379 
0380 install(FILES desktop/kmixctrl_restore.desktop DESTINATION ${KDE_INSTALL_KSERVICESDIR})
0381 
0382 ####################################################################################################
0383 ########### tests ##################################################################################
0384 ####################################################################################################
0385 
0386 if(BUILD_TESTING)
0387   find_package(Qt${QT_MAJOR_VERSION}Test ${QT_MIN_VERSION} CONFIG REQUIRED)
0388   add_subdirectory(tests)
0389 endif()
0390 
0391 ####################################################################################################
0392 ########### other installs #########################################################################
0393 ####################################################################################################
0394 
0395 install(PROGRAMS apps/kmixremote DESTINATION ${KDE_INSTALL_BINDIR})
0396 install(FILES desktop/restore_kmix_volumes.desktop DESTINATION ${KDE_INSTALL_AUTOSTARTDIR})
0397 
0398 ecm_qt_install_logging_categories(EXPORT kmixlogging
0399                                   FILE kmix.categories
0400                                   DESTINATION "${KDE_INSTALL_LOGGINGCATEGORIESDIR}")
0401 
0402 ki18n_install(po)
0403 kdoctools_install(po)
0404 
0405 ####################################################################################################
0406 ########### end ####################################################################################
0407 ####################################################################################################
0408 
0409 feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES)