Skip to content

Commit 6a54479

Browse files
committed
build(cmake): refactor Qt version compatibility
- 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
1 parent 5c6f247 commit 6a54479

9 files changed

Lines changed: 80 additions & 43 deletions

File tree

CMakeLists.txt

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
cmake_minimum_required(VERSION 3.0)
1+
cmake_minimum_required(VERSION 3.13)
22
project(deepin-diskmanager)
33

44
find_package(Threads REQUIRED)
@@ -31,17 +31,20 @@ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstack-protector-all -fPIC")
3131
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector-all -fPIE")
3232
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -z relro -z now -z noexecstack -pie")
3333

34-
# Qt 版本检测
35-
find_package(Qt6 QUIET)
36-
if(Qt6_FOUND)
37-
message("Found Qt6.")
34+
# Auto-detect Qt version (tries Qt6 first, falls back to Qt5)
35+
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core)
36+
message(STATUS "Found Qt version: ${QT_VERSION_MAJOR}")
3837

39-
set(QT_VERSION_MAJOR 6)
40-
set(DTK_VERSION 6)
38+
# Map to DTK version (Qt6→DTK6, Qt5→DTK5)
39+
if (QT_VERSION_MAJOR MATCHES 6)
40+
set(DTK_VERSION_MAJOR 6)
4141
else()
42-
message("Found Qt5.")
42+
set(DTK_VERSION_MAJOR "")
43+
endif()
44+
message(STATUS "Build with DTK: ${DTK_VERSION_MAJOR}")
4345

44-
set(QT_VERSION_MAJOR 5)
46+
# For Qt5, add DBUS caller auth check
47+
if (QT_VERSION_MAJOR MATCHES 5)
4548
add_compile_definitions(NO_DBUS_CALLER_AUTH_CHECK)
4649
message("NO_DBUS_CALLER_AUTH_CHECK is on.")
4750
endif()

application/CMakeLists.txt

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
cmake_minimum_required(VERSION 3.0)
1+
cmake_minimum_required(VERSION 3.13)
22
project(deepin-diskmanager)
33

44
if (NOT DEFINED VERSION)
@@ -15,8 +15,8 @@ set(CMAKE_AUTOUIC ON)#开启uic 编译转换*.ui文件生存设计界面对应
1515

1616
# Find the library
1717
find_package(PkgConfig REQUIRED)
18-
find_package(Dtk${DTK_VERSION}Widget REQUIRED)
19-
find_package(Dtk${DTK_VERSION}Gui REQUIRED)
18+
find_package(Dtk${DTK_VERSION_MAJOR}Widget REQUIRED)
19+
find_package(Dtk${DTK_VERSION_MAJOR}Gui REQUIRED)
2020
#find_package(DtkCMake REQUIRED)
2121
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS
2222
Core
@@ -29,12 +29,16 @@ set(LINK_LIBS
2929
Qt${QT_VERSION_MAJOR}::Core
3030
Qt${QT_VERSION_MAJOR}::DBus
3131
Qt${QT_VERSION_MAJOR}::Widgets
32-
Qt${QT_VERSION_MAJOR}::WidgetsPrivate
33-
Dtk${DTK_VERSION}::Core
34-
Dtk${DTK_VERSION}::Gui
35-
Dtk${DTK_VERSION}::Widget
32+
Dtk${DTK_VERSION_MAJOR}::Core
33+
Dtk${DTK_VERSION_MAJOR}::Gui
34+
Dtk${DTK_VERSION_MAJOR}::Widget
3635
)
3736

37+
# Qt6 has WidgetsPrivate module, Qt5 does not (use private target differently)
38+
if (QT_VERSION_MAJOR MATCHES 6)
39+
list(APPEND LINK_LIBS Qt${QT_VERSION_MAJOR}::WidgetsPrivate)
40+
endif()
41+
3842
#common resource names
3943
set(APP_RES_DIR "assets")
4044
set(APP_DESKTOP "deepin-diskmanager.desktop")
@@ -80,7 +84,7 @@ add_executable(${PROJECT_NAME} ${ALL_SRCS} ${APP_QRC} ${DTNG_QM_FILES})
8084

8185
target_include_directories(${PROJECT_NAME} PUBLIC
8286
${DtkWidget_INCLUDE_DIRS}
83-
${Qt5Gui_PRIVATE_INCLUDE_DIRS}
87+
Qt${QT_VERSION_MAJOR}::GuiPrivate
8488
${PROJECT_BINARY_DIR}
8589
)
8690

basestruct/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
#
33
# SPDX-License-Identifier: GPL-3.0-only
44

5-
cmake_minimum_required(VERSION 3.0)
5+
cmake_minimum_required(VERSION 3.13)
66
project(basestruct)
77

88
# Find the library
@@ -26,7 +26,7 @@ set(BASESTRUCT_SRCS ${BASESTRUCT_SOURCES} ${BASESTRUCT_HEADERS} )
2626

2727
add_library(${PROJECT_NAME} STATIC ${BASESTRUCT_SRCS})
2828
target_include_directories(${PROJECT_NAME} PUBLIC
29-
${Qt6Gui_PRIVATE_INCLUDE_DIRS}
29+
Qt${QT_VERSION_MAJOR}::GuiPrivate
3030
${PROJECT_BINARY_DIR}
3131
)
3232

debian/control

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@ Build-Depends:
77
cmake,
88
pkg-config,
99
libc6-dev,
10-
qt6-tools-dev | qttools5-dev,
11-
qt6-base-dev | qtbase5-dev,
10+
qt6-tools-dev,
11+
qt6-base-dev,
1212
libx11-dev,
13-
libdtk6widget-dev | libdtkwidget-dev,
14-
qt6-tools-dev-tools | qttools5-dev-tools,
15-
qt6-base-private-dev | qtbase5-private-dev,
13+
libdtk6widget-dev,
14+
qt6-tools-dev-tools,
15+
qt6-base-private-dev,
1616
libparted-dev,
1717
libparted-fs-resize0,
18-
libpolkit-qt6-1-dev | libpolkit-qt5-1-dev,
18+
libpolkit-qt6-1-dev,
1919
libgtest-dev,
2020
libgmock-dev,
2121
deepin-gettext-tools
@@ -26,4 +26,3 @@ Architecture: any
2626
Depends: ${shlibs:Depends}, ${misc:Depends}, smartmontools, pkexec
2727
Description: Disk Utility is a disk management tool for creating, reorganizing and formatting partitions.
2828
Disk Utility is a disk management tool for disk.
29-

debian/control.1

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
Source: deepin-diskmanager
2+
Section: admin
3+
Priority: optional
4+
Maintainer: deepin <packages@deepin.com>
5+
Build-Depends:
6+
debhelper (>= 11),
7+
cmake,
8+
pkg-config,
9+
libc6-dev,
10+
qttools5-dev,
11+
qtbase5-dev,
12+
libx11-dev,
13+
libdtkwidget-dev,
14+
qttools5-dev-tools,
15+
qtbase5-private-dev,
16+
libparted-dev,
17+
libparted-fs-resize0,
18+
libpolkit-qt5-1-dev,
19+
libgtest-dev,
20+
libgmock-dev,
21+
deepin-gettext-tools
22+
Standards-Version: 4.1.3
23+
24+
Package: deepin-diskmanager
25+
Architecture: any
26+
Depends: ${shlibs:Depends}, ${misc:Depends}, smartmontools, pkexec
27+
Description: Disk Utility is a disk management tool for creating, reorganizing and formatting partitions.
28+
Disk Utility is a disk management tool for disk.

log/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626

2727
#install(TARGETS dlmlog DESTINATION lib)
2828

29-
cmake_minimum_required(VERSION 3.0)
29+
cmake_minimum_required(VERSION 3.13)
3030
project(ddmlog)
3131

3232
# Find the library
@@ -50,7 +50,7 @@ set(LOG_SRCS
5050

5151
add_library(${PROJECT_NAME} STATIC ${LOG_SRCS})
5252
target_include_directories(${PROJECT_NAME} PUBLIC
53-
Qt${QT_VERSION_MAJOR}::Gui_private
53+
Qt${QT_VERSION_MAJOR}::GuiPrivate
5454
${PROJECT_BINARY_DIR}
5555
)
5656

service/CMakeLists.txt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11

2-
cmake_minimum_required(VERSION 3.0)
2+
cmake_minimum_required(VERSION 3.13)
33
project(deepin-diskmanager-service)
44

55

@@ -26,18 +26,18 @@ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pie")
2626

2727
# Find the library
2828
find_package(PkgConfig REQUIRED)
29-
find_package(Dtk${DTK_VERSION}Gui REQUIRED)
29+
find_package(Dtk${DTK_VERSION_MAJOR}Gui REQUIRED)
3030
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS
3131
Core
3232
Widgets
3333
DBus
3434
REQUIRED)
35-
find_package(PolkitQt${QT_VERSION_MAJOR}-1)
35+
find_package(PolkitQt${QT_VERSION_MAJOR}-1 REQUIRED)
3636

3737
set(LINK_LIBS
3838
Qt${QT_VERSION_MAJOR}::Core
3939
Qt${QT_VERSION_MAJOR}::DBus
40-
Dtk${DTK_VERSION}::Core
40+
Dtk${DTK_VERSION_MAJOR}::Core
4141
parted
4242
parted-fs-resize
4343
PolkitQt${QT_VERSION_MAJOR}-1::Agent
@@ -63,7 +63,7 @@ link_directories(${PROJECT_BINARY_DIR})
6363

6464
add_executable(${PROJECT_NAME} ${ALL_SOURCES} ${ALL_HEADERS})
6565
target_include_directories(${PROJECT_NAME} PUBLIC
66-
${Qt6Gui_PRIVATE_INCLUDE_DIRS}
66+
Qt${QT_VERSION_MAJOR}::GuiPrivate
6767
${PROJECT_BINARY_DIR}
6868
)
6969
#link_libraries(../basestruct/basestruct)

test/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ file(GLOB ALL_SOURCES "../service/diskoperation/*.cpp" "../service/diskoperation
2727

2828
add_executable(${PROJECT_NAME_TEST} ${SRC_LIST} ${ALL_HEADERS} ${ALL_SOURCES})
2929

30-
target_link_libraries(${PROJECT_NAME_TEST} gmock gmock_main gtest gtest_main pthread Qt5::Core basestruct parted parted-fs-resize)
30+
target_link_libraries(${PROJECT_NAME_TEST} gmock gmock_main gtest gtest_main pthread Qt${QT_VERSION_MAJOR}::Core basestruct parted parted-fs-resize)
3131

3232
# 添加 QTest 测试
3333
add_test(${PROJECT_NAME_TEST} that-test-I-made COMMAND ${PROJECT_NAME_TEST})

tests/CMakeLists.txt

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ file(GLOB ALL_QRCS "../application/assets/appicons.qrc")
4141
list(REMOVE_ITEM ALL_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/../application/main.cpp)
4242

4343
find_package(PkgConfig REQUIRED)
44-
find_package(Dtk${DTK_VERSION}Widget REQUIRED)
45-
find_package(Dtk${DTK_VERSION}Gui REQUIRED)
44+
find_package(Dtk${DTK_VERSION_MAJOR}Widget REQUIRED)
45+
find_package(Dtk${DTK_VERSION_MAJOR}Gui REQUIRED)
4646
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS
4747
Core
4848
Widgets
@@ -53,21 +53,25 @@ set(LINK_LIBS
5353
Qt${QT_VERSION_MAJOR}::Core
5454
Qt${QT_VERSION_MAJOR}::DBus
5555
Qt${QT_VERSION_MAJOR}::Widgets
56-
Qt${QT_VERSION_MAJOR}::WidgetsPrivate
5756

58-
Dtk${DTK_VERSION}::Core
59-
Dtk${DTK_VERSION}::Gui
60-
Dtk${DTK_VERSION}::Widget
57+
Dtk${DTK_VERSION_MAJOR}::Core
58+
Dtk${DTK_VERSION_MAJOR}::Gui
59+
Dtk${DTK_VERSION_MAJOR}::Widget
6160
)
6261

62+
# Qt6 has WidgetsPrivate module, Qt5 does not
63+
if (QT_VERSION_MAJOR MATCHES 6)
64+
list(APPEND LINK_LIBS Qt${QT_VERSION_MAJOR}::WidgetsPrivate)
65+
endif()
66+
6367
##需要生成的moc文件,输出文件名称放在变量 mocfiles中,必须在find QT5 package才能调用
6468
#QT5_WRAP_CPP (UDLC_UI_HEADERS_MOC ${ALL_HEADERS})
6569

6670
add_executable(${PROJECT_NAME_TEST} ${SRC_LIST} ${ALL_HEADERS} ${ALL_SOURCES} ${ALL_QRCS})
6771

68-
target_include_directories(${PROJECT_NAME} PUBLIC
72+
target_include_directories(${PROJECT_NAME_TEST} PUBLIC
6973
${DtkWidget_INCLUDE_DIRS}
70-
${Qt5Gui_PRIVATE_INCLUDE_DIRS}
74+
Qt${QT_VERSION_MAJOR}::GuiPrivate
7175
${PROJECT_BINARY_DIR}
7276
)
7377
target_link_libraries(${PROJECT_NAME_TEST}
@@ -82,7 +86,6 @@ target_link_libraries(${PROJECT_NAME_TEST}
8286
parted-fs-resize
8387
Qt${QT_VERSION_MAJOR}::DBus
8488
Qt${QT_VERSION_MAJOR}::Widgets
85-
Qt${QT_VERSION_MAJOR}::WidgetsPrivate
8689
Qt${QT_VERSION_MAJOR}::Test ${LINK_LIBS})
8790

8891
# 添加 QTest 测试

0 commit comments

Comments
 (0)