From eefb4f585dfa4e5fd7d778604eef1b1e47cdf85e Mon Sep 17 00:00:00 2001 From: re2zero Date: Tue, 27 Jan 2026 08:53:35 +0800 Subject: [PATCH] build(cmake): refactor Qt version compatibility MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add Qt auto-detection using find_package(QT NAMES Qt6 Qt5) - Separate debian/control files: * control: V25 (Qt6) with explicit qt6-base-dev, libdtk6*-dev deps * control.1: V20 (Qt5) with explicit qtbase5-dev, libdtk*-dev deps - remove Qt5 fallback build dependencies - adjust Qt private include paths to use modern Qt6 syntax - add conditional Qt6 WidgetsPrivate linking - refactor DTK version variable usage throughout build system - maintain NO_DBUS_CALLER_AUTH_CHECK for Qt5 builds This enables seamless building on both V25 (Qt6) and V20 (Qt5) systems without version-specific conditional dependencies. Log: 分离Qt5/Qt6构建配置,支持V25/V20双版本 PMS: https://pms.uniontech.com/task-view-386321.html --- CMakeLists.txt | 21 ++++++++++++--------- application/CMakeLists.txt | 20 ++++++++++++-------- basestruct/CMakeLists.txt | 4 ++-- debian/control | 13 ++++++------- debian/control.1 | 28 ++++++++++++++++++++++++++++ log/CMakeLists.txt | 4 ++-- service/CMakeLists.txt | 10 +++++----- test/CMakeLists.txt | 2 +- tests/CMakeLists.txt | 21 ++++++++++++--------- 9 files changed, 80 insertions(+), 43 deletions(-) create mode 100644 debian/control.1 diff --git a/CMakeLists.txt b/CMakeLists.txt index 75aac596..b05b63c9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0) +cmake_minimum_required(VERSION 3.13) project(deepin-diskmanager) find_package(Threads REQUIRED) @@ -31,17 +31,20 @@ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstack-protector-all -fPIC") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector-all -fPIE") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -z relro -z now -z noexecstack -pie") -# Qt 版本检测 -find_package(Qt6 QUIET) -if(Qt6_FOUND) - message("Found Qt6.") +# Auto-detect Qt version (tries Qt6 first, falls back to Qt5) +find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core) +message(STATUS "Found Qt version: ${QT_VERSION_MAJOR}") - set(QT_VERSION_MAJOR 6) - set(DTK_VERSION 6) +# Map to DTK version (Qt6→DTK6, Qt5→DTK5) +if (QT_VERSION_MAJOR MATCHES 6) + set(DTK_VERSION_MAJOR 6) else() - message("Found Qt5.") + set(DTK_VERSION_MAJOR "") +endif() +message(STATUS "Build with DTK: ${DTK_VERSION_MAJOR}") - set(QT_VERSION_MAJOR 5) +# For Qt5, add DBUS caller auth check +if (QT_VERSION_MAJOR MATCHES 5) add_compile_definitions(NO_DBUS_CALLER_AUTH_CHECK) message("NO_DBUS_CALLER_AUTH_CHECK is on.") endif() diff --git a/application/CMakeLists.txt b/application/CMakeLists.txt index f5954a7a..f92fc91f 100644 --- a/application/CMakeLists.txt +++ b/application/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0) +cmake_minimum_required(VERSION 3.13) project(deepin-diskmanager) if (NOT DEFINED VERSION) @@ -15,8 +15,8 @@ set(CMAKE_AUTOUIC ON)#开启uic 编译转换*.ui文件生存设计界面对应 # Find the library find_package(PkgConfig REQUIRED) -find_package(Dtk${DTK_VERSION}Widget REQUIRED) -find_package(Dtk${DTK_VERSION}Gui REQUIRED) +find_package(Dtk${DTK_VERSION_MAJOR}Widget REQUIRED) +find_package(Dtk${DTK_VERSION_MAJOR}Gui REQUIRED) #find_package(DtkCMake REQUIRED) find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core @@ -29,12 +29,16 @@ set(LINK_LIBS Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::DBus Qt${QT_VERSION_MAJOR}::Widgets - Qt${QT_VERSION_MAJOR}::WidgetsPrivate - Dtk${DTK_VERSION}::Core - Dtk${DTK_VERSION}::Gui - Dtk${DTK_VERSION}::Widget + Dtk${DTK_VERSION_MAJOR}::Core + Dtk${DTK_VERSION_MAJOR}::Gui + Dtk${DTK_VERSION_MAJOR}::Widget ) +# Qt6 has WidgetsPrivate module, Qt5 does not (use private target differently) +if (QT_VERSION_MAJOR MATCHES 6) + list(APPEND LINK_LIBS Qt${QT_VERSION_MAJOR}::WidgetsPrivate) +endif() + #common resource names set(APP_RES_DIR "assets") set(APP_DESKTOP "deepin-diskmanager.desktop") @@ -80,7 +84,7 @@ add_executable(${PROJECT_NAME} ${ALL_SRCS} ${APP_QRC} ${DTNG_QM_FILES}) target_include_directories(${PROJECT_NAME} PUBLIC ${DtkWidget_INCLUDE_DIRS} - ${Qt5Gui_PRIVATE_INCLUDE_DIRS} + Qt${QT_VERSION_MAJOR}::GuiPrivate ${PROJECT_BINARY_DIR} ) diff --git a/basestruct/CMakeLists.txt b/basestruct/CMakeLists.txt index 608d3dfd..be31f70e 100644 --- a/basestruct/CMakeLists.txt +++ b/basestruct/CMakeLists.txt @@ -2,7 +2,7 @@ # # SPDX-License-Identifier: GPL-3.0-only -cmake_minimum_required(VERSION 3.0) +cmake_minimum_required(VERSION 3.13) project(basestruct) # Find the library @@ -26,7 +26,7 @@ set(BASESTRUCT_SRCS ${BASESTRUCT_SOURCES} ${BASESTRUCT_HEADERS} ) add_library(${PROJECT_NAME} STATIC ${BASESTRUCT_SRCS}) target_include_directories(${PROJECT_NAME} PUBLIC - ${Qt6Gui_PRIVATE_INCLUDE_DIRS} + Qt${QT_VERSION_MAJOR}::GuiPrivate ${PROJECT_BINARY_DIR} ) diff --git a/debian/control b/debian/control index 2994af72..09b926c3 100644 --- a/debian/control +++ b/debian/control @@ -7,15 +7,15 @@ Build-Depends: cmake, pkg-config, libc6-dev, - qt6-tools-dev | qttools5-dev, - qt6-base-dev | qtbase5-dev, + qt6-tools-dev, + qt6-base-dev, libx11-dev, - libdtk6widget-dev | libdtkwidget-dev, - qt6-tools-dev-tools | qttools5-dev-tools, - qt6-base-private-dev | qtbase5-private-dev, + libdtk6widget-dev, + qt6-tools-dev-tools, + qt6-base-private-dev, libparted-dev, libparted-fs-resize0, - libpolkit-qt6-1-dev | libpolkit-qt5-1-dev, + libpolkit-qt6-1-dev, libgtest-dev, libgmock-dev, deepin-gettext-tools @@ -26,4 +26,3 @@ Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, smartmontools, pkexec Description: Disk Utility is a disk management tool for creating, reorganizing and formatting partitions. Disk Utility is a disk management tool for disk. - diff --git a/debian/control.1 b/debian/control.1 new file mode 100644 index 00000000..35c8dfe8 --- /dev/null +++ b/debian/control.1 @@ -0,0 +1,28 @@ +Source: deepin-diskmanager +Section: admin +Priority: optional +Maintainer: deepin +Build-Depends: + debhelper (>= 11), + cmake, + pkg-config, + libc6-dev, + qttools5-dev, + qtbase5-dev, + libx11-dev, + libdtkwidget-dev, + qttools5-dev-tools, + qtbase5-private-dev, + libparted-dev, + libparted-fs-resize0, + libpolkit-qt5-1-dev, + libgtest-dev, + libgmock-dev, + deepin-gettext-tools +Standards-Version: 4.1.3 + +Package: deepin-diskmanager +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, smartmontools, pkexec +Description: Disk Utility is a disk management tool for creating, reorganizing and formatting partitions. + Disk Utility is a disk management tool for disk. diff --git a/log/CMakeLists.txt b/log/CMakeLists.txt index 7167210f..30ddeed4 100644 --- a/log/CMakeLists.txt +++ b/log/CMakeLists.txt @@ -26,7 +26,7 @@ #install(TARGETS dlmlog DESTINATION lib) -cmake_minimum_required(VERSION 3.0) +cmake_minimum_required(VERSION 3.13) project(ddmlog) # Find the library @@ -50,7 +50,7 @@ set(LOG_SRCS add_library(${PROJECT_NAME} STATIC ${LOG_SRCS}) target_include_directories(${PROJECT_NAME} PUBLIC - Qt${QT_VERSION_MAJOR}::Gui_private + Qt${QT_VERSION_MAJOR}::GuiPrivate ${PROJECT_BINARY_DIR} ) diff --git a/service/CMakeLists.txt b/service/CMakeLists.txt index 2dadab60..9d5503d2 100644 --- a/service/CMakeLists.txt +++ b/service/CMakeLists.txt @@ -1,5 +1,5 @@ -cmake_minimum_required(VERSION 3.0) +cmake_minimum_required(VERSION 3.13) project(deepin-diskmanager-service) @@ -26,18 +26,18 @@ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pie") # Find the library find_package(PkgConfig REQUIRED) -find_package(Dtk${DTK_VERSION}Gui REQUIRED) +find_package(Dtk${DTK_VERSION_MAJOR}Gui REQUIRED) find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core Widgets DBus REQUIRED) -find_package(PolkitQt${QT_VERSION_MAJOR}-1) +find_package(PolkitQt${QT_VERSION_MAJOR}-1 REQUIRED) set(LINK_LIBS Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::DBus - Dtk${DTK_VERSION}::Core + Dtk${DTK_VERSION_MAJOR}::Core parted parted-fs-resize PolkitQt${QT_VERSION_MAJOR}-1::Agent @@ -63,7 +63,7 @@ link_directories(${PROJECT_BINARY_DIR}) add_executable(${PROJECT_NAME} ${ALL_SOURCES} ${ALL_HEADERS}) target_include_directories(${PROJECT_NAME} PUBLIC - ${Qt6Gui_PRIVATE_INCLUDE_DIRS} + Qt${QT_VERSION_MAJOR}::GuiPrivate ${PROJECT_BINARY_DIR} ) #link_libraries(../basestruct/basestruct) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 1536473e..25ac8942 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -27,7 +27,7 @@ file(GLOB ALL_SOURCES "../service/diskoperation/*.cpp" "../service/diskoperation add_executable(${PROJECT_NAME_TEST} ${SRC_LIST} ${ALL_HEADERS} ${ALL_SOURCES}) -target_link_libraries(${PROJECT_NAME_TEST} gmock gmock_main gtest gtest_main pthread Qt5::Core basestruct parted parted-fs-resize) +target_link_libraries(${PROJECT_NAME_TEST} gmock gmock_main gtest gtest_main pthread Qt${QT_VERSION_MAJOR}::Core basestruct parted parted-fs-resize) # 添加 QTest 测试 add_test(${PROJECT_NAME_TEST} that-test-I-made COMMAND ${PROJECT_NAME_TEST}) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index e33fe1e4..6193d5ad 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -41,8 +41,8 @@ file(GLOB ALL_QRCS "../application/assets/appicons.qrc") list(REMOVE_ITEM ALL_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/../application/main.cpp) find_package(PkgConfig REQUIRED) -find_package(Dtk${DTK_VERSION}Widget REQUIRED) -find_package(Dtk${DTK_VERSION}Gui REQUIRED) +find_package(Dtk${DTK_VERSION_MAJOR}Widget REQUIRED) +find_package(Dtk${DTK_VERSION_MAJOR}Gui REQUIRED) find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core Widgets @@ -53,21 +53,25 @@ set(LINK_LIBS Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::DBus Qt${QT_VERSION_MAJOR}::Widgets - Qt${QT_VERSION_MAJOR}::WidgetsPrivate - Dtk${DTK_VERSION}::Core - Dtk${DTK_VERSION}::Gui - Dtk${DTK_VERSION}::Widget + Dtk${DTK_VERSION_MAJOR}::Core + Dtk${DTK_VERSION_MAJOR}::Gui + Dtk${DTK_VERSION_MAJOR}::Widget ) +# Qt6 has WidgetsPrivate module, Qt5 does not +if (QT_VERSION_MAJOR MATCHES 6) + list(APPEND LINK_LIBS Qt${QT_VERSION_MAJOR}::WidgetsPrivate) +endif() + ##需要生成的moc文件,输出文件名称放在变量 mocfiles中,必须在find QT5 package才能调用 #QT5_WRAP_CPP (UDLC_UI_HEADERS_MOC ${ALL_HEADERS}) add_executable(${PROJECT_NAME_TEST} ${SRC_LIST} ${ALL_HEADERS} ${ALL_SOURCES} ${ALL_QRCS}) -target_include_directories(${PROJECT_NAME} PUBLIC +target_include_directories(${PROJECT_NAME_TEST} PUBLIC ${DtkWidget_INCLUDE_DIRS} - ${Qt5Gui_PRIVATE_INCLUDE_DIRS} + Qt${QT_VERSION_MAJOR}::GuiPrivate ${PROJECT_BINARY_DIR} ) target_link_libraries(${PROJECT_NAME_TEST} @@ -82,7 +86,6 @@ target_link_libraries(${PROJECT_NAME_TEST} parted-fs-resize Qt${QT_VERSION_MAJOR}::DBus Qt${QT_VERSION_MAJOR}::Widgets - Qt${QT_VERSION_MAJOR}::WidgetsPrivate Qt${QT_VERSION_MAJOR}::Test ${LINK_LIBS}) # 添加 QTest 测试