Skip to content

Commit 9784e8a

Browse files
authored
Merge pull request #2798 from CyberTailor/qt6-tree
qt, build, ci: add optional Qt 6 support
2 parents 50c6641 + ccf2059 commit 9784e8a

29 files changed

+298
-109
lines changed

.github/workflows/cmake-ci.yml

Lines changed: 38 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ jobs:
1717
- minimal
1818
- no-asm
1919
- gui-full
20+
- gui-qt6
2021
- system-libs
2122
include:
2223
- tag: no-asm
@@ -33,6 +34,15 @@ jobs:
3334
-DENABLE_QRENCODE=ON
3435
-DENABLE_UPNP=ON
3536
-DUSE_DBUS=ON
37+
- tag: gui-qt6
38+
deps: >-
39+
qt6-base-dev
40+
qt6-5compat-dev
41+
qt6-tools-dev
42+
options: >-
43+
-DENABLE_GUI=ON
44+
-DUSE_DBUS=ON
45+
-DUSE_QT6=ON
3646
- tag: system-libs
3747
deps: >-
3848
libdb5.3++-dev
@@ -49,23 +59,10 @@ jobs:
4959
- name: Checkout
5060
uses: actions/checkout@v4
5161
- name: Install dependencies
52-
uses: awalsh128/cache-apt-pkgs-action@v1
53-
with:
54-
packages: >-
55-
${{matrix.deps}}
56-
ccache
57-
cmake
58-
libcurl4-openssl-dev
59-
libssl-dev
60-
libzip-dev
61-
ninja-build
62-
pkgconf
63-
zipcmp
64-
zipmerge
65-
ziptool
66-
version: ${{matrix.tag}}
67-
- name: Install Boost dependencies
6862
run: sudo apt-get install -y --no-install-recommends
63+
${{matrix.deps}}
64+
ccache
65+
cmake
6966
libboost-dev
7067
libboost-date-time-dev
7168
libboost-exception-dev
@@ -74,6 +71,14 @@ jobs:
7471
libboost-serialization-dev
7572
libboost-test-dev
7673
libboost-thread-dev
74+
libcurl4-openssl-dev
75+
libssl-dev
76+
libzip-dev
77+
ninja-build
78+
pkgconf
79+
zipcmp
80+
zipmerge
81+
ziptool
7782
- name: Configure
7883
run: cmake
7984
-B ${{github.workspace}}/build -G Ninja
@@ -118,6 +123,7 @@ jobs:
118123
- minimal
119124
- no-asm
120125
- gui-full
126+
- gui-qt6
121127
- system-libs
122128
include:
123129
- tag: no-asm
@@ -133,6 +139,13 @@ jobs:
133139
-DQt5_DIR=$(brew --prefix qt@5)/lib/cmake/Qt5
134140
-DENABLE_QRENCODE=ON
135141
-DENABLE_UPNP=ON
142+
- tag: gui-qt6
143+
deps: >-
144+
qt@6
145+
options: >-
146+
-DENABLE_GUI=ON
147+
-DQt6_DIR=$(brew --prefix qt@6)/lib/cmake/Qt6
148+
-DUSE_QT6=ON
136149
- tag: system-libs
137150
deps: >-
138151
berkeley-db@5
@@ -209,6 +222,7 @@ jobs:
209222
- minimal
210223
- no-asm
211224
- gui-full
225+
- gui-qt6
212226
include:
213227
- tag: no-asm
214228
deps: null
@@ -223,6 +237,14 @@ jobs:
223237
-DENABLE_GUI=ON
224238
-DENABLE_QRENCODE=ON
225239
-DENABLE_UPNP=ON
240+
- tag: gui-qt6
241+
deps: >-
242+
qt6-base:p
243+
qt6-5compat:p
244+
qt6-tools:p
245+
options: >-
246+
-DENABLE_GUI=ON
247+
-DUSE_QT6=ON
226248
steps:
227249
- name: Checkout
228250
uses: actions/checkout@v4

CMakeLists.txt

Lines changed: 36 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -101,9 +101,10 @@ option(ENABLE_QRENCODE "Enable generation of QR Codes for receiving payments" O
101101
option(ENABLE_UPNP "Enable UPnP port mapping support" OFF)
102102
option(DEFAULT_UPNP "Turn UPnP on startup" OFF)
103103
option(USE_DBUS "Enable DBus support" OFF)
104+
option(USE_QT6 "Use Qt 6 instead of Qt 5" OFF)
104105

105106
# Bundled packages
106-
option(SYSTEM_BDB "Find system installation of Berkeley DB CXX 5.3" OFF)
107+
option(SYSTEM_BDB "Find system installation of Berkeley DB CXX 5.3" OFF)
107108
option(SYSTEM_LEVELDB "Find system installation of leveldb" OFF)
108109
option(SYSTEM_SECP256K1 "Find system installation of libsecp256k1 with pkg-config" OFF)
109110
option(SYSTEM_UNIVALUE "Find system installation of Univalue with pkg-config" OFF)
@@ -114,20 +115,24 @@ option(BUNDLED_BOOST "Use the bundled version of Boost" ${HUNTER_ENABLED})
114115
option(BUNDLED_CURL "Use the bundled version of cURL" ${HUNTER_ENABLED})
115116
option(BUNDLED_LIBZIP "Use the bundled version of libzip" ${HUNTER_ENABLED})
116117
option(BUNDLED_OPENSSL "Use the bundled version of OpenSSL" ${HUNTER_ENABLED})
117-
option(BUNDLED_QT "Use the bundled version of Qt" ${HUNTER_ENABLED})
118+
option(BUNDLED_QT5 "Use the bundled version of Qt 5" ${HUNTER_ENABLED})
118119

119120

120121
# Handle dependencies
121122
# ===================
122123

123124
set(QT5_MINIMUM_VERSION 5.9.5)
124-
set(QT5_COMPONENTS Concurrent Core Gui LinguistTools Network Widgets)
125-
set(QT5_HUNTER_COMPONENTS qtbase qttools)
125+
set(QT6_MINIMUM_VERSION 6.2.0)
126+
set(QT_COMPONENTS Core Concurrent Gui LinguistTools Network Widgets)
127+
set(QT_HUNTER_COMPONENTS qtbase qttools)
128+
if(USE_QT6)
129+
list(APPEND QT_COMPONENTS Core5Compat)
130+
endif()
126131
if(USE_DBUS)
127-
list(APPEND QT5_COMPONENTS DBus)
132+
list(APPEND QT_COMPONENTS DBus)
128133
endif()
129134
if(ENABLE_TESTS)
130-
list(APPEND QT5_COMPONENTS Test)
135+
list(APPEND QT_COMPONENTS Test)
131136
endif()
132137

133138
set(BOOST_MINIMUM_VERSION 1.63.0)
@@ -199,25 +204,36 @@ if(USE_ASM)
199204
endif()
200205

201206
if(ENABLE_GUI)
202-
if(BUNDLED_QT)
203-
hunter_add_package(Qt COMPONENTS ${QT5_HUNTER_COMPONENTS})
207+
set(QT_MACOS_DISABLE_DARK_MODE False)
208+
if(USE_QT6)
209+
find_package(Qt6 ${QT6_MINIMUM_VERSION} COMPONENTS ${QT_COMPONENTS} REQUIRED)
210+
set(QT Qt6)
211+
else()
212+
if(BUNDLED_QT5)
213+
hunter_add_package(Qt COMPONENTS ${QT_HUNTER_COMPONENTS})
214+
endif()
215+
find_package(Qt5 ${QT5_MINIMUM_VERSION} COMPONENTS ${QT_COMPONENTS} REQUIRED)
216+
set(QT Qt5)
217+
218+
if(Qt5Core_VERSION VERSION_LESS 5.12.0)
219+
set(QT_MACOS_DISABLE_DARK_MODE True)
220+
endif()
221+
222+
# Compatibility macros
223+
if(Qt5Core_VERSION VERSION_LESS 5.15.0)
224+
macro(qt_create_translation)
225+
qt5_create_translation(${ARGN})
226+
endmacro()
227+
228+
macro(qt_add_translation)
229+
qt5_add_translation(${ARGN})
230+
endmacro()
231+
endif()
204232
endif()
205-
find_package(Qt5 ${QT5_MINIMUM_VERSION} COMPONENTS ${QT5_COMPONENTS} REQUIRED)
206233

207234
if(ENABLE_QRENCODE)
208235
pkg_check_modules(QRENCODE REQUIRED IMPORTED_TARGET libqrencode)
209236
endif()
210-
211-
# Compatibility macros
212-
if(Qt5Core_VERSION VERSION_LESS 5.15.0)
213-
macro(qt_create_translation)
214-
qt5_create_translation(${ARGN})
215-
endmacro()
216-
217-
macro(qt_add_translation)
218-
qt5_add_translation(${ARGN})
219-
endmacro()
220-
endif()
221237
endif()
222238

223239
if(ENABLE_UPNP)

share/qt/Info.plist.cmake.in

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd">
3+
<plist version="0.9">
4+
<dict>
5+
<key>LSMinimumSystemVersion</key>
6+
<string>10.8.0</string>
7+
8+
<key>LSArchitecturePriority</key>
9+
<array>
10+
<string>x86_64</string>
11+
</array>
12+
13+
<key>CFBundleIconFile</key>
14+
<string>gridcoin.icns</string>
15+
16+
<key>CFBundlePackageType</key>
17+
<string>APPL</string>
18+
19+
<key>CFBundleGetInfoString</key>
20+
<string>@PROJECT_VERSION@, Copyright © 2009-@COPYRIGHT_YEAR@ @COPYRIGHT_HOLDERS_FINAL@</string>
21+
22+
<key>CFBundleShortVersionString</key>
23+
<string>@PROJECT_VERSION@</string>
24+
25+
<key>CFBundleVersion</key>
26+
<string>@PROJECT_VERSION@</string>
27+
28+
<key>CFBundleSignature</key>
29+
<string>????</string>
30+
31+
<key>CFBundleExecutable</key>
32+
<string>gridcoinresearch</string>
33+
34+
<key>CFBundleName</key>
35+
<string>Gridcoin</string>
36+
37+
<key>LSHasLocalizedDisplayName</key>
38+
<true/>
39+
40+
<key>CFBundleIdentifier</key>
41+
<string>world.gridcoin.Gridcoin-Qt</string>
42+
43+
<key>CFBundleURLTypes</key>
44+
<array>
45+
<dict>
46+
<key>CFBundleTypeRole</key>
47+
<string>Editor</string>
48+
<key>CFBundleURLName</key>
49+
<string>world.gridcoin.GridcoinPayment</string>
50+
<key>CFBundleURLSchemes</key>
51+
<array>
52+
<string>gridcoin</string>
53+
</array>
54+
</dict>
55+
</array>
56+
57+
<key>UTExportedTypeDeclarations</key>
58+
<array>
59+
<dict>
60+
<key>UTTypeIdentifier</key>
61+
<string>world.gridcoin.paymentrequest</string>
62+
<key>UTTypeDescription</key>
63+
<string>Gridcoin payment request</string>
64+
<key>UTTypeConformsTo</key>
65+
<array>
66+
<string>public.data</string>
67+
</array>
68+
<key>UTTypeTagSpecification</key>
69+
<dict>
70+
<key>public.mime-type</key>
71+
<string>application/x-gridcoin-payment-request</string>
72+
<key>public.filename-extension</key>
73+
<array>
74+
<string>gridcoinpaymentrequest</string>
75+
</array>
76+
</dict>
77+
</dict>
78+
</array>
79+
80+
<key>CFBundleDocumentTypes</key>
81+
<array>
82+
<dict>
83+
<key>CFBundleTypeRole</key>
84+
<string>Editor</string>
85+
<key>LSItemContentTypes</key>
86+
<array>
87+
<string>world.gridcoin.paymentrequest</string>
88+
</array>
89+
<key>LSHandlerRank</key>
90+
<string>Owner</string>
91+
</dict>
92+
</array>
93+
94+
<key>NSPrincipalClass</key>
95+
<string>NSApplication</string>
96+
97+
<key>NSHighResolutionCapable</key>
98+
<string>True</string>
99+
100+
<key>LSApplicationCategoryType</key>
101+
<string>public.app-category.finance</string>
102+
103+
<key>NSRequiresAquaSystemAppearance</key>
104+
<string>@QT_MACOS_DISABLE_DARK_MODE@</string>
105+
</dict>
106+
</plist>

src/Makefile.qt.include

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ QT_MOC_CPP = \
133133
qt/moc_bitcoinaddressvalidator.cpp \
134134
qt/moc_bitcoinamountfield.cpp \
135135
qt/moc_bitcoingui.cpp \
136+
qt/moc_bitcoinunits.cpp \
136137
qt/moc_clicklabel.cpp \
137138
qt/moc_clientmodel.cpp \
138139
qt/moc_coincontroldialog.cpp \
@@ -173,6 +174,7 @@ QT_MOC_CPP = \
173174
qt/moc_transactiontablemodel.cpp \
174175
qt/moc_transactionview.cpp \
175176
qt/moc_updatedialog.cpp \
177+
qt/moc_upgradeqt.cpp \
176178
qt/moc_walletmodel.cpp \
177179
qt/researcher/moc_projecttablemodel.cpp \
178180
qt/researcher/moc_researchermodel.cpp \

src/qt/CMakeLists.txt

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -141,14 +141,21 @@ set_source_files_properties(
141141
# =================
142142

143143
target_link_libraries(gridcoinqt PUBLIC
144-
Qt5::Concurrent
145-
Qt5::Core
146-
Qt5::Gui
147-
Qt5::Network
148-
Qt5::Widgets
144+
${QT}::Core
145+
${QT}::Concurrent
146+
${QT}::Gui
147+
${QT}::Network
148+
${QT}::Widgets
149149
gridcoin_util
150150
)
151151

152+
if(USE_QT6)
153+
target_link_libraries(gridcoinqt PUBLIC ${QT}::Core5Compat)
154+
endif()
155+
if(USE_DBUS)
156+
target_link_libraries(gridcoinqt PUBLIC ${QT}::DBus)
157+
endif()
158+
152159
if(APPLE)
153160
target_link_libraries(gridcoinqt PUBLIC
154161
"-framework Foundation"
@@ -160,10 +167,7 @@ elseif(WIN32)
160167
endif()
161168

162169
target_compile_definitions(gridcoinqt PUBLIC HAVE_CONFIG_H)
163-
164-
if(USE_DBUS)
165-
target_link_libraries(gridcoinqt PUBLIC Qt5::DBus)
166-
endif()
170+
target_compile_definitions(gridcoinqt PUBLIC QT_DISABLE_DEPRECATED_UP_TO=0x050F00)
167171

168172
if(ENABLE_UPNP)
169173
if(DEFAULT_UPNP)
@@ -179,15 +183,27 @@ add_dependencies(gridcoinqt gridcoinqt_l10n)
179183
# Application
180184
# ===========
181185

182-
add_executable(gridcoinresearch WIN32 MACOSX_BUNDLE bitcoin.cpp)
186+
add_executable(gridcoinresearch bitcoin.cpp)
187+
188+
set(MACOSX_BUNDLE_RESOURCE_FILES res/icons/gridcoin.icns)
189+
if(APPLE)
190+
target_sources(gridcoinresearch PRIVATE ${MACOSX_BUNDLE_RESOURCE_FILES})
191+
endif()
183192

184193
target_link_libraries(gridcoinresearch PRIVATE
185194
${RUNTIME_LIBS}
186-
Qt5::Widgets
195+
${QT}::Widgets
187196
gridcoin_util
188197
gridcoinqt
189198
)
190199

200+
set_target_properties(gridcoinresearch PROPERTIES
201+
WIN32_EXECUTABLE TRUE
202+
MACOSX_BUNDLE TRUE
203+
MACOSX_BUNDLE_INFO_PLIST "${CMAKE_SOURCE_DIR}/share/qt/Info.plist.cmake.in"
204+
RESOURCE ${MACOSX_BUNDLE_RESOURCE_FILES}
205+
)
206+
191207
if(UNIX AND NOT APPLE)
192208
include(GNUInstallDirs)
193209
install(TARGETS gridcoinresearch

0 commit comments

Comments
 (0)