Skip to content

Commit 0542b59

Browse files
committed
Basic Qt6 support in OpenFLUID and shipped wares
(references #1155)
1 parent eaa972e commit 0542b59

File tree

72 files changed

+1078
-133
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

72 files changed

+1078
-133
lines changed

.github/workflows/CI-macos.yaml

+28
Original file line numberDiff line numberDiff line change
@@ -34,3 +34,31 @@ jobs:
3434
run: make -j 2
3535
working-directory: ./_build
3636

37+
38+
##########################################
39+
40+
41+
ci-macos-release-qt6:
42+
strategy:
43+
matrix:
44+
os: [macos-11,macos-12]
45+
runs-on: ${{ matrix.os }}
46+
47+
steps:
48+
- name: Installation of dependencies
49+
run: |
50+
brew install \
51+
boost gdal curl qt6 \
52+
doxygen gnuplot doxygen
53+
- name: Checkout of source code
54+
uses: actions/checkout@v3
55+
- name: Preparation
56+
run: |
57+
echo "$(brew --prefix qt6)/bin" >> $GITHUB_PATH
58+
mkdir ./_build
59+
- name: Configuration
60+
run: cmake .. -DCMAKE_PREFIX_PATH=$(brew --prefix qt6)/lib/cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local
61+
working-directory: ./_build
62+
- name: Build
63+
run: make -j 2
64+
working-directory: ./_build

.gitignore

+3
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,6 @@ _*
1111
# OpenFLUID local configuration files
1212
CMake.in.local.config
1313
CMake.in.local.cmake
14+
15+
# analysis files
16+
*.clazy.yaml

CMake.in.cmake

+3
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,9 @@ ENDIF()
182182

183183
################### compilation and build ###################
184184

185+
add_compile_options(-Wno-attributes) # TODO REMOVE to fix
186+
add_compile_options(-Wno-missing-field-initializers) # TODO REMOVE to fix
187+
185188
SET(OFBUILD_DEBUG_COMPILE_OPTIONS "")
186189
SET(OFBUILD_RELEASE_COMPILE_OPTIONS "")
187190
IF((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))

CMakeLists.txt

+25-4
Original file line numberDiff line numberDiff line change
@@ -138,8 +138,22 @@ FIND_PACKAGE(GDAL REQUIRED)
138138
OPENFLUID_CHECK_GDAL_VERSION()
139139
FIND_PACKAGE(CURL REQUIRED HTTP HTTPS)
140140
IF(OFBUILD_ENABLE_GUI)
141-
FIND_PACKAGE(Qt5 COMPONENTS Core Widgets Svg REQUIRED)
142-
MESSAGE(STATUS "Found Qt5 (version ${Qt5_VERSION})")
141+
FIND_PACKAGE(Qt6 COMPONENTS Core Widgets Svg)
142+
IF (NOT Qt6_FOUND)
143+
FIND_PACKAGE(Qt5 COMPONENTS Core Widgets Svg REQUIRED)
144+
SET(QT_VERSION_MAJOR ${Qt5Core_VERSION_MAJOR})
145+
SET(QT_VERSION_MINOR ${Qt5Core_VERSION_MINOR})
146+
SET(QT_VERSION ${Qt5Core_VERSION})
147+
ELSE()
148+
SET(QT_VERSION_MAJOR ${Qt6Core_VERSION_MAJOR})
149+
SET(QT_VERSION_MINOR ${Qt6Core_VERSION_MINOR})
150+
SET(QT_VERSION ${Qt6Core_VERSION})
151+
ENDIF()
152+
IF (QT_VERSION_MAJOR LESS 6)
153+
MESSAGE(STATUS "Found Qt5 (version ${Qt5_VERSION})")
154+
ELSE()
155+
MESSAGE(STATUS "Found Qt6 (version ${Qt6_VERSION})")
156+
ENDIF()
143157
ENDIF()
144158

145159
IF(OFBUILD_ENABLE_DOCS)
@@ -150,8 +164,15 @@ ENDIF()
150164

151165
IF(OFBUILD_ENABLE_GUI)
152166
# Detection of external translations tools and setup of common translations targets
153-
FIND_PROGRAM(LRELEASE_EXECUTABLE NAMES lrelease lrelease-qt5)
154-
FIND_PROGRAM(LUPDATE_EXECUTABLE NAMES lupdate lupdate-qt5)
167+
IF (QT_VERSION_MAJOR LESS 6)
168+
FIND_PROGRAM(LRELEASE_EXECUTABLE NAMES lrelease lrelease-qt5)
169+
FIND_PROGRAM(LUPDATE_EXECUTABLE NAMES lupdate lupdate-qt5)
170+
ELSE()
171+
FIND_PACKAGE(Qt6 COMPONENTS LinguistTools) # WARNING requires qtchoose manual setup externally FIXME see how to make it automatic
172+
SET(LRELEASE_EXECUTABLE lrelease)
173+
SET(LUPDATE_EXECUTABLE lupdate)
174+
ENDIF()
175+
155176
ADD_CUSTOM_TARGET(update-translations-strings)
156177
ADD_CUSTOM_TARGET(release-translations ALL)
157178
ENDIF()

CPack.linux.in.cmake

+10-3
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,16 @@ SET(OFPACK_DEPEND_RPM_FEDORA "make, gcc-c++, gcc-gfortran, cmake, boost-devel >=
77
SET(OFPACK_DEPEND_RPM_CENTOS "gcc-c++, boost-devel >= 1.40, gdal-devel, libcurl, git")
88

99
IF(OFBUILD_ENABLE_GUI)
10-
SET(OFPACK_DEPEND_DEB "${OFPACK_DEPEND_DEB}, qtbase5-dev-tools, qttools5-dev-tools, libqt5svg5-dev, libqt5webkit5-dev")
11-
SET(OFPACK_DEPEND_RPM_FEDORA "${OFPACK_DEPEND_RPM_FEDORA}, qt5-qttools-devel, qt5-qtbase-devel, qt5-qtsvg-devel, qt5-qtwebkit-devel")
12-
SET(OFPACK_DEPEND_RPM_CENTOS "${OFPACK_DEPEND_RPM_CENTOS}, qt5-qttools-devel, qt5-qtbase-devel, qt5-qtsvg-devel, qt5-qtwebkit-devel")
10+
11+
IF (QT_VERSION_MAJOR LESS 6)
12+
SET(OFPACK_DEPEND_DEB "${OFPACK_DEPEND_DEB}, qtbase5-dev-tools, qttools5-dev-tools, libqt5svg5-dev, libqt5webkit5-dev")
13+
SET(OFPACK_DEPEND_RPM_FEDORA "${OFPACK_DEPEND_RPM_FEDORA}, qt5-qttools-devel, qt5-qtbase-devel, qt5-qtsvg-devel, qt5-qtwebkit-devel")
14+
SET(OFPACK_DEPEND_RPM_CENTOS "${OFPACK_DEPEND_RPM_CENTOS}, qt5-qttools-devel, qt5-qtbase-devel, qt5-qtsvg-devel, qt5-qtwebkit-devel")
15+
ELSE()
16+
SET(OFPACK_DEPEND_DEB "${OFPACK_DEPEND_DEB}, qt6-base-dev qt6-tools-dev libqt6svg6-dev") #FIXME find packages
17+
#SET(OFPACK_DEPEND_RPM_FEDORA "${OFPACK_DEPEND_RPM_FEDORA}, qt5-qttools-devel, qt5-qtbase-devel, qt5-qtsvg-devel, qt5-qtwebkit-devel") #FIXME find packages
18+
#SET(OFPACK_DEPEND_RPM_CENTOS "${OFPACK_DEPEND_RPM_CENTOS}, qt5-qttools-devel, qt5-qtbase-devel, qt5-qtsvg-devel, qt5-qtwebkit-devel") #FIXME find packages
19+
ENDIF()
1320
ENDIF()
1421

1522

README.md

+14-8
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,19 @@
1515

1616
<br/>
1717

18-
* [About OpenFLUID](#about-openfluid)
19-
* [Getting started](#getting-started)
20-
* [Installation](#installation)
21-
* [Manuals and Trainings](#manuals-and-trainings)
22-
* [Resources](#resources)
23-
* [Authors and License](#authors-and-license)
24-
* [Contact](#contact)
18+
- [About OpenFLUID](#about-openfluid)
19+
- [Features](#features)
20+
- [Built with](#built-with)
21+
- [Getting started](#getting-started)
22+
- [Installation](#installation)
23+
- [Linux](#linux)
24+
- [MacOS](#macos)
25+
- [Windows](#windows)
26+
- [From sources](#from-sources)
27+
- [Manuals and Trainings](#manuals-and-trainings)
28+
- [Resources](#resources)
29+
- [Authors and License](#authors-and-license)
30+
- [Contact](#contact)
2531

2632

2733
# About OpenFLUID
@@ -56,7 +62,7 @@ OpenFLUID relies on several tools and libraries
5662
* [JSON](https://github.com/nlohmann/json) for metadata and settings I/O
5763
* [TinyXML](https://github.com/leethomason/tinyxml2) for datasets I/O
5864
* [libcurl](https://github.com/curl/curl) for network operations
59-
* [Qt5](https://www.qt.io/) for UI framework and applications
65+
* [Qt5](https://www.qt.io/) for UI framework and applications, Qt6 potentially incoming
6066
* [CMake](https://cmake.org/) for build/test/packaging configuration and management
6167
* [Doxygen](https://www.doxygen.nl/) for technical documentation
6268

cmake/OpenFLUIDDetectQt.cmake

+38-16
Original file line numberDiff line numberDiff line change
@@ -44,23 +44,45 @@
4444
# More information on the Qt5 dedicated page : http://doc.qt.io/qt-5/cmake-manual.html
4545
#
4646

47+
IF (QT_VERSION_MAJOR LESS 6)
48+
FIND_PACKAGE(Qt5 COMPONENTS Core Widgets Network Xml Svg REQUIRED)
49+
MESSAGE(STATUS "Found Qt5 (version ${Qt5_VERSION})")
50+
CMAKE_POLICY(SET CMP0020 OLD)
4751

48-
FIND_PACKAGE(Qt5 COMPONENTS Core Widgets Network Xml Svg REQUIRED)
49-
MESSAGE(STATUS "Found Qt5 (version ${Qt5_VERSION})")
50-
CMAKE_POLICY(SET CMP0020 OLD)
52+
SET(QT_INCLUDES ${Qt5Core_INCLUDE_DIRS} ${Qt5Widgets_INCLUDE_DIRS}
53+
${Qt5Network_INCLUDE_DIRS} ${Qt5Xml_INCLUDE_DIRS} ${Qt5Svg_INCLUDE_DIRS})
54+
55+
SET(QT_QTCORE_LIBRARIES Qt5::Core)
56+
SET(QT_QTWIDGETS_LIBRARIES Qt5::Widgets)
57+
SET(QT_QTNETWORK_LIBRARIES Qt5::Network)
58+
SET(QT_QTXML_LIBRARIES Qt5::Xml)
59+
SET(QT_QTSVG_LIBRARIES Qt5::Svg)
5160

52-
SET(QT_INCLUDES ${Qt5Core_INCLUDE_DIRS} ${Qt5Widgets_INCLUDE_DIRS}
53-
${Qt5Network_INCLUDE_DIRS} ${Qt5Xml_INCLUDE_DIRS} ${Qt5Svg_INCLUDE_DIRS})
54-
55-
SET(QT_QTCORE_LIBRARIES Qt5::Core)
56-
SET(QT_QTGUI_LIBRARIES Qt5::Widgets)
57-
SET(QT_QTNETWORK_LIBRARIES Qt5::Network)
58-
SET(QT_QTXML_LIBRARIES Qt5::Xml)
59-
SET(QT_QTSVG_LIBRARIES Qt5::Svg)
61+
SET(QT_QTCORE_LIBRARY Qt5::Core)
62+
SET(QT_QTWIDGETS_LIBRARY Qt5::Widgets)
63+
SET(QT_QTNETWORK_LIBRARY Qt5::Network)
64+
SET(QT_QTXML_LIBRARY Qt5::Xml)
65+
SET(QT_QTSVG_LIBRARY Qt5::Svg)
66+
ELSE() # FIXME adjust for real qt6 setup
6067

61-
SET(QT_QTCORE_LIBRARY Qt5::Core)
62-
SET(QT_QTGUI_LIBRARY Qt5::Widgets)
63-
SET(QT_QTNETWORK_LIBRARY Qt5::Network)
64-
SET(QT_QTXML_LIBRARY Qt5::Xml)
65-
SET(QT_QTSVG_LIBRARY Qt5::Svg)
68+
FIND_PACKAGE(Qt6 COMPONENTS Core Widgets Network Xml Svg Gui REQUIRED)
69+
MESSAGE(STATUS "Found Qt6 (version ${Qt6_VERSION})")
70+
CMAKE_POLICY(SET CMP0020 OLD)
6671

72+
SET(QT_INCLUDES ${Qt6Core_INCLUDE_DIRS} ${Qt6Widgets_INCLUDE_DIRS}
73+
${Qt6Network_INCLUDE_DIRS} ${Qt6Xml_INCLUDE_DIRS} ${Qt6Svg_INCLUDE_DIRS})
74+
75+
SET(QT_QTCORE_LIBRARIES Qt6::Core)
76+
SET(QT_QTWIDGETS_LIBRARIES Qt6::Widgets)
77+
SET(QT_QTGUI_LIBRARIES Qt6::Gui)
78+
SET(QT_QTNETWORK_LIBRARIES Qt6::Network)
79+
SET(QT_QTXML_LIBRARIES Qt6::Xml)
80+
SET(QT_QTSVG_LIBRARIES Qt6::Svg)
81+
82+
SET(QT_QTCORE_LIBRARY Qt6::Core)
83+
SET(QT_QTWIDGETS_LIBRARY Qt6::Widgets)
84+
SET(QT_QTGUI_LIBRARY Qt6::Gui)
85+
SET(QT_QTNETWORK_LIBRARY Qt6::Network)
86+
SET(QT_QTXML_LIBRARY Qt6::Xml)
87+
SET(QT_QTSVG_LIBRARY Qt6::Svg)
88+
ENDIF()

cmake/OpenFLUIDHelpers.cmake.in

+35-10
Original file line numberDiff line numberDiff line change
@@ -220,13 +220,24 @@ FUNCTION(_OPENFLUID_WAREPLUGIN_BUILD)
220220

221221
IF(_OPNFLD_QT_REQUIRED)
222222
# SET(CMAKE_INCLUDE_CURRENT_DIR ON)
223-
FIND_PACKAGE(Qt5 COMPONENTS Core Widgets REQUIRED)
224-
MESSAGE(STATUS "Found Qt5 (version ${Qt5_VERSION})")
225-
# QT5_WRAP_UI(_QT_WRAPPED_UI ${_BUILDARGS_UI_FILES})
226-
# QT5_ADD_RESOURCES(_QT_ADDED_RC ${_BUILDARGS_RC_FILES})
227-
# SET(_QT_PREPARED_UIRC ${_QT_WRAPPED_UI} ${_QT_ADDED_RC})
228-
set_property(DIRECTORY PROPERTY QT_VERSION_MAJOR ${Qt5Core_VERSION_MAJOR})
229-
set_property(DIRECTORY PROPERTY QT_VERSION_MINOR ${Qt5Core_VERSION_MINOR})
223+
224+
FIND_PACKAGE(Qt6 COMPONENTS Core Widgets Gui)
225+
IF (NOT Qt6_FOUND)
226+
FIND_PACKAGE(Qt5 COMPONENTS Core Widgets REQUIRED)
227+
MESSAGE(STATUS "Found Qt5 (version ${Qt5_VERSION})")
228+
# QT5_WRAP_UI(_QT_WRAPPED_UI ${_BUILDARGS_UI_FILES})
229+
# QT5_ADD_RESOURCES(_QT_ADDED_RC ${_BUILDARGS_RC_FILES})
230+
# SET(_QT_PREPARED_UIRC ${_QT_WRAPPED_UI} ${_QT_ADDED_RC})
231+
set_property(DIRECTORY PROPERTY QT_VERSION_MAJOR ${Qt5Core_VERSION_MAJOR})
232+
set_property(DIRECTORY PROPERTY QT_VERSION_MINOR ${Qt5Core_VERSION_MINOR})
233+
set_property(DIRECTORY PROPERTY QT_VERSION ${Qt5Core_VERSION})
234+
ELSE()
235+
MESSAGE(STATUS "Found Qt6 (version ${Qt6_VERSION})")
236+
set_property(DIRECTORY PROPERTY QT_VERSION_MAJOR ${Qt6Core_VERSION_MAJOR})
237+
set_property(DIRECTORY PROPERTY QT_VERSION_MINOR ${Qt6Core_VERSION_MINOR})
238+
set_property(DIRECTORY PROPERTY QT_VERSION ${Qt6Core_VERSION})
239+
ENDIF()
240+
230241
ENDIF()
231242

232243
FIND_PACKAGE(OpenFLUID REQUIRED ${_OPNFLD_OPENFLUID_COMPONENTS})
@@ -344,7 +355,11 @@ FUNCTION(_OPENFLUID_WAREPLUGIN_BUILD)
344355
SET_TARGET_PROPERTIES(${_WARE_TARGET} PROPERTIES AUTOMOC ON)
345356
SET_TARGET_PROPERTIES(${_WARE_TARGET} PROPERTIES AUTOUIC ON)
346357
SET_TARGET_PROPERTIES(${_WARE_TARGET} PROPERTIES AUTORCC ON)
347-
TARGET_LINK_LIBRARIES(${_WARE_TARGET} PUBLIC Qt5::Core Qt5::Widgets)
358+
IF (NOT Qt6_FOUND)
359+
TARGET_LINK_LIBRARIES(${_WARE_TARGET} PUBLIC Qt5::Core Qt5::Widgets)
360+
ELSE()
361+
TARGET_LINK_LIBRARIES(${_WARE_TARGET} PUBLIC Qt6::Core Qt6::Widgets)
362+
ENDIF()
348363
ENDIF()
349364

350365
TARGET_LINK_LIBRARIES(${_WARE_TARGET}
@@ -411,7 +426,12 @@ FUNCTION(_OPENFLUID_WAREPLUGIN_BUILD)
411426

412427
# ====== update ======
413428

414-
FIND_PROGRAM(_LUPDATE_EXECUTABLE NAMES lupdate lupdate-qt4)
429+
IF (QT_VERSION_MAJOR LESS 6)
430+
FIND_PROGRAM(_LUPDATE_EXECUTABLE NAMES lupdate lupdate-qt5)
431+
ELSE()
432+
FIND_PACKAGE(Qt6 COMPONENTS LinguistTools)
433+
SET(_LUPDATE_EXECUTABLE lupdate)
434+
ENDIF()
415435

416436
IF(_LUPDATE_EXECUTABLE)
417437

@@ -438,7 +458,12 @@ FUNCTION(_OPENFLUID_WAREPLUGIN_BUILD)
438458

439459
# ====== release ======
440460

441-
FIND_PROGRAM(_LRELEASE_EXECUTABLE NAMES lrelease lrelease-qt5)
461+
IF (QT_VERSION_MAJOR LESS 6)
462+
FIND_PROGRAM(_LRELEASE_EXECUTABLE NAMES lrelease lrelease-qt5)
463+
ELSE()
464+
FIND_PACKAGE(Qt6 COMPONENTS LinguistTools)
465+
SET(_LRELEASE_EXECUTABLE lrelease)
466+
ENDIF()
442467

443468
IF(_LRELEASE_EXECUTABLE)
444469

resources/tools/ofsrc-stylecheck.py

+6-1
Original file line numberDiff line numberDiff line change
@@ -528,6 +528,7 @@ def isInstructionBlock(self, Word):
528528

529529
@cppOnly
530530
def checkBrackets(self, Filename, Lines):
531+
CheckOneline = True
531532

532533
i = 1
533534
IsNewBlock = False
@@ -537,6 +538,9 @@ def checkBrackets(self, Filename, Lines):
537538
IsDo = False
538539
for Line in Lines:
539540
if len(Line.split()) > 0:
541+
if CheckOneline:
542+
CheckOneline = not self.isDirective(Line, "!brac-oneline")
543+
540544
FirstWord = Line.split()[0].split("(")[0]
541545
NoCommentLine = Line.split("//")[0]
542546
NoSpaceLine = NoCommentLine.replace(" ","")
@@ -579,7 +583,8 @@ def checkBrackets(self, Filename, Lines):
579583
if FirstWord == "for" and NoSpaceLine.endswith(";"): # unconclusive
580584
pass
581585
else:
582-
self.addProblem('BRAC',Filename,i,'block must not be on one line')
586+
if CheckOneline:
587+
self.addProblem('BRAC',Filename,i,'block must not be on one line')
583588
else: # finish with "{" case
584589
self.addProblem('BRAC',Filename,i,'bracket must be on a new line')
585590
IsPartialInstruction = False

0 commit comments

Comments
 (0)