From 7416c75ac8a229f0b4cf32b4002a8e183e442ae9 Mon Sep 17 00:00:00 2001 From: Olivier CHURLAUD Date: Thu, 29 Feb 2024 20:12:07 +0100 Subject: [PATCH] [Port to Qt6] CMakeLists upgrade for qt6 + remove warnings --- 3rdparty/qtiocompressor/CMakeLists.txt | 2 +- CMakeLists.txt | 87 +++++++++++++------------- replaygain/CMakeLists.txt | 2 +- support/CMakeLists.txt | 4 +- tags/CMakeLists.txt | 2 +- translations/CMakeLists.txt | 30 +++------ 6 files changed, 57 insertions(+), 70 deletions(-) diff --git a/3rdparty/qtiocompressor/CMakeLists.txt b/3rdparty/qtiocompressor/CMakeLists.txt index 567e8c17ef..129eb6547f 100644 --- a/3rdparty/qtiocompressor/CMakeLists.txt +++ b/3rdparty/qtiocompressor/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 3.5) include_directories(${QTINCLUDES} ${ZLIB_INCLUDE_DIRS} ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}) ADD_LIBRARY(qtiocompressor STATIC qtiocompressor.cpp) diff --git a/CMakeLists.txt b/CMakeLists.txt index 373bca6f66..5280d831d7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0) +cmake_minimum_required(VERSION 3.5) project(cantata) cmake_policy(SET CMP0020 NEW) @@ -23,7 +23,7 @@ endif () set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake) -set (QT_MIN_VERSION 5.11) +set (QT_MIN_VERSION 6.5) set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README") set(CPACK_GENERATOR "DEB;RPM;TBZ2") @@ -187,31 +187,28 @@ if (TAGLIB_FOUND) endif () else (TAGLIB_FOUND) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-but-set-variable -Wno-unused-parameter") - set(ENABLE_DEVICES_SUPPORT OFF) + set(ENABLE_DEVICES_SUPPORT OFF) endif () if (NOT MTP_FOUND) - set(ENABLE_UNCACHED_MTP OFF) + set(ENABLE_UNCACHED_MTP OFF) endif () -find_package(Qt5 ${QT_MIN_VERSION} COMPONENTS Widgets Xml Network Concurrent Svg Sql REQUIRED) +find_package(Qt6 ${QT_MIN_VERSION} COMPONENTS Core 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_CXX_STANDARD 17) + +set(QTLIBS Qt6::Core Qt6::Widgets Qt6::Network Qt6::Gui Qt6::Xml Qt6::Concurrent Qt6::Svg Qt6::Sql) +set(QTINCLUDES ${Qt6Widgets_INCLUDE_DIRS} ${Qt6Network_INCLUDE_DIRS} ${Qt6Xml_INCLUDE_DIRS} ${Qt6Core_INCLUDE_DIRS} ${Qt6Concurrent_INCLUDE_DIRS} + ${Qt6Svg_INCLUDE_DIRS} ${Qt6Sql_INCLUDE_DIRS}) +add_definitions(${Qt6Widgets_DEFINITIONS} ${Qt6Network_DEFINITIONS} ${Qt6Xml_DEFINITIONS} ${Qt6Concurrent_DEFINITIONS} ${Qt6Svg_DEFINITIONS} ${Qt6Sql_DEFINITIONS}) +if (Qt6_POSITION_INDEPENDENT_CODE) set(CMAKE_POSITION_INDEPENDENT_CODE ON) else () - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS}") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt6Widgets_EXECUTABLE_COMPILE_FLAGS}") endif () set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wpedantic -Wall -Wextra \ @@ -226,14 +223,14 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "GNU") 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) + get_target_property(QT_QMAKE_EXECUTABLE Qt6::qmake IMPORTED_LOCATION) + execute_process(COMMAND ${QT_QMAKE_EXECUTABLE} -query QT_INSTALL_TRANSLATIONS OUTPUT_VARIABLE QT_TRANSLATIONS_DIR) else () - find_package(Qt5DBus REQUIRED) + find_package(Qt6DBus 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}) + set(QTLIBS ${QTLIBS} Qt6::DBus) + set(QTINCLUDES ${QTINCLUDES} ${Qt6DBus_INCLUDE_DIRS}) + add_definitions(${Qt6DBus_DEFINITIONS}) endif () if (ENABLE_HTTP_STREAM_PLAYBACK) @@ -244,11 +241,11 @@ if (ENABLE_HTTP_STREAM_PLAYBACK) 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}) + find_package(Qt6 ${QT_MIN_VERSION} COMPONENTS Multimedia REQUIRED) + macro_log_feature(Qt6Multimedia_FOUND "Qt6Multimedia" "MPD HTTP stream playback." "http://qtproject.org") + include_directories(${Qt6Multimedia_INCLUDE_DIRS}) + add_definitions(${Qt6Multimedia_DEFINITIONS}) + set(CANTATA_LIBS ${CANTATA_LIBS} Qt6::Multimedia) endif () set(CANTATA_SRCS ${CANTATA_SRCS} mpd-interface/httpstream.cpp) endif () @@ -272,10 +269,10 @@ if (APPLE) 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}) + find_package(Qt6 COMPONENTS WinExtras REQUIRED) + set(QTINCLUDES ${QTINCLUDES} ${Qt6WinExtras_INCLUDE_DIRS}) + set(QTLIBS ${QTLIBS} Qt6::WinExtras) + add_definitions(${Qt6WinExtras_DEFINITIONS}) set(CANTATA_SRCS ${CANTATA_SRCS} windows/thumbnailtoolbar.cpp) endif () @@ -365,16 +362,16 @@ if (QT_QTDBUS_FOUND) 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) + qt6_add_dbus_adaptor(CANTATA_SRCS dbus/org.mpris.MediaPlayer2.Player.xml dbus/mpris.h Mpris) + qt6_add_dbus_adaptor(CANTATA_SRCS dbus/org.mpris.MediaPlayer2.root.xml dbus/mpris.h Mpris) + qt6_add_dbus_adaptor(CANTATA_SRCS dbus/${PROJECT_REV_URL}.xml gui/mainwindow.h MainWindow) + qt6_add_dbus_interfaces(CANTATA_SRCS dbus/org.freedesktop.Notifications.xml) + qt6_add_dbus_interfaces(CANTATA_SRCS dbus/org.freedesktop.UPower.xml) + qt6_add_dbus_interfaces(CANTATA_SRCS dbus/org.freedesktop.login1.xml) + qt6_add_dbus_interfaces(CANTATA_SRCS dbus/org.gnome.SettingsDaemon.xml) + qt6_add_dbus_interfaces(CANTATA_SRCS dbus/org.gnome.SettingsDaemon.MediaKeys.xml) + qt6_add_dbus_interfaces(CANTATA_SRCS dbus/org.kde.Solid.PowerManagement.PolicyAgent.xml) + qt6_add_dbus_interfaces(CANTATA_SRCS dbus/org.freedesktop.PowerManagement.Inhibit.xml) endif () if (NOT WIN32 AND NOT APPLE) @@ -506,14 +503,14 @@ elseif (APPLE) install(FILES ${BREW_OPENSSL_PATH}/libssl.1.0.0.dylib DESTINATION ${MACOSX_BUNDLE_APP_DIR} RENAME libssl.dylib) endif() add_subdirectory(mac) - include(DeployQt5) + include(DeployQt6) 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 + # *NEED* to install cantata-replagain/cantata-tags *before* install_qt6_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) @@ -522,9 +519,9 @@ elseif (APPLE) 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") + install_qt6_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") + install_qt6_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}) diff --git a/replaygain/CMakeLists.txt b/replaygain/CMakeLists.txt index ae456ea039..306f328262 100644 --- a/replaygain/CMakeLists.txt +++ b/replaygain/CMakeLists.txt @@ -43,7 +43,7 @@ if (FFMPEG_FOUND OR MPG123_FOUND) if (MPG123_FOUND) target_link_libraries(cantata-replaygain ${MPG123_LIBRARIES}) endif () - target_link_libraries(cantata-replaygain ${QTCORELIBS}) + target_link_libraries(cantata-replaygain Qt6::Core) if (UNIX AND NOT APPLE) target_link_libraries(cantata-replaygain -lpthread) endif () diff --git a/support/CMakeLists.txt b/support/CMakeLists.txt index 90ccf01397..977dbcc5d8 100644 --- a/support/CMakeLists.txt +++ b/support/CMakeLists.txt @@ -16,7 +16,7 @@ set(SUPPORT_SRCS ${SUPPORT_SRCS} pathrequester.cpp kmessagewidget.cpp dialog.cpp shortcutssettingswidget.cpp keysequencewidget.cpp acceleratormanager.cpp urllabel.cpp) set(SUPPORT_UIS shortcutssettingswidget.ui) -qt5_wrap_ui(SUPPORT_UI_HDRS ${SUPPORT_UIS}) -qt5_add_resources(SUPPORT_RC_SRCS support.qrc) +qt6_wrap_ui(SUPPORT_UI_HDRS ${SUPPORT_UIS}) +qt6_add_resources(SUPPORT_RC_SRCS support.qrc) add_library(support STATIC ${SUPPORT_SRCS} ${SUPPORT_UI_HDRS} ${SUPPORT_RC_SRCS}) diff --git a/tags/CMakeLists.txt b/tags/CMakeLists.txt index 1da10f9f4d..f0a4f3815f 100644 --- a/tags/CMakeLists.txt +++ b/tags/CMakeLists.txt @@ -15,7 +15,7 @@ else () endif () add_definitions(-DCANTATA_TAG_SERVER -DCANTATA_NO_UI_FUNCTIONS) -target_link_libraries(cantata-tags ${TAGLIB_LIBRARIES} ${QTGUILIBS} ${QTCORELIBS} ${QTNETWORKLIBS}) +target_link_libraries(cantata-tags ${TAGLIB_LIBRARIES} Qt6::Gui Qt6::Core Qt6::Network) if (TAGLIB-EXTRAS_FOUND) target_link_libraries(cantata-tags ${TAGLIB-EXTRAS_LIBRARIES}) include_directories(${TAGLIB-EXTRAS_INCLUDES}) diff --git a/translations/CMakeLists.txt b/translations/CMakeLists.txt index 61ab93cd3c..0346fa984b 100644 --- a/translations/CMakeLists.txt +++ b/translations/CMakeLists.txt @@ -1,28 +1,18 @@ file(GLOB TS_FILES cantata_*.ts) -foreach (TS_FILE ${TS_FILES}) - get_filename_component(TRANS ${TS_FILE} NAME_WE) - list(APPEND CANTATA_TRANS "${TRANS}") -endforeach () -find_package(Qt5LinguistTools ${QT_MIN_VERSION} QUIET) +find_package(Qt6LinguistTools ${QT_MIN_VERSION} QUIET) -if (Qt5LinguistTools_FOUND) +if (Qt6LinguistTools_FOUND) set(catalogname cantata) add_custom_target(translations ALL) - foreach(TRANS ${CANTATA_TRANS}) - if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${TRANS}.ts) - set(CUR_TS_FILE ${CMAKE_CURRENT_SOURCE_DIR}/${TRANS}.ts) - set(CUR_QM_FILE ${CMAKE_CURRENT_BINARY_DIR}/${TRANS}.qm) - add_custom_command(TARGET translations - COMMAND ${Qt5_LRELEASE_EXECUTABLE} ARGS ${CUR_TS_FILE} -qm ${CUR_QM_FILE} - DEPENDS ${CUR_TS_FILE}) - if (WIN32) - install(FILES ${CUR_QM_FILE} DESTINATION ${CMAKE_INSTALL_PREFIX}/translations/) - elseif (APPLE) - install(FILES ${CUR_QM_FILE} DESTINATION ${MACOSX_BUNDLE_RESOURCES}/translations/) - else () - install(FILES ${CUR_QM_FILE} DESTINATION ${SHARE_INSTALL_PREFIX}/cantata/translations/) - endif () + qt6_add_lrelease(translations TS_FILES ${TS_FILES} QM_FILES_OUTPUT_VARIABLE QM_FILES) + foreach(CUR_QM_FILE ${QM_FILES}) + if (WIN32) + install(FILES ${CUR_QM_FILE} DESTINATION ${CMAKE_INSTALL_PREFIX}/translations/) + elseif (APPLE) + install(FILES ${CUR_QM_FILE} DESTINATION ${MACOSX_BUNDLE_RESOURCES}/translations/) + else () + install(FILES ${CUR_QM_FILE} DESTINATION ${SHARE_INSTALL_PREFIX}/cantata/translations/) endif () endforeach() else ()