Skip to content

Commit ccc4933

Browse files
committed
build: Port to CMake
Examples works and tests pass. install rules to be created in a follow-up, only then README updated to promote CMake.
1 parent dfd476e commit ccc4933

File tree

8 files changed

+304
-0
lines changed

8 files changed

+304
-0
lines changed

CMakeLists.txt

+55
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
# SPDX-FileCopyrightText: 2025 Klarälvdalens Datakonsult AB, a KDAB Group
2+
# company <[email protected]>
3+
#
4+
# SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
5+
6+
cmake_minimum_required(VERSION 3.21)
7+
project(declarativewidgets)
8+
9+
set(CMAKE_AUTOMOC ON)
10+
set(CMAKE_AUTORCC ON)
11+
set(CMAKE_AUTOUIC ON)
12+
set(CMAKE_INCLUDE_CURRENT_DIRS ON)
13+
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
14+
15+
option(USE_QT6 "Use Qt6" OFF)
16+
option(BUILD_EXAMPLES "Build the examples" ON)
17+
option(ENABLE_SANITIZERS "Enable asan/ubsan sanitizers" OFF)
18+
19+
if(USE_QT6)
20+
find_package(Qt6 6.5 NO_MODULE REQUIRED COMPONENTS Qml Widgets QuickWidgets)
21+
find_package(Qt6 6.5 NO_MODULE QUIET COMPONENTS WebEngineWidgets)
22+
set(QTMAJOR 6)
23+
else()
24+
find_package(Qt5 5.15 NO_MODULE REQUIRED COMPONENTS Qml Widgets QuickWidgets)
25+
find_package(Qt5 5.15 NO_MODULE QUIET COMPONENTS WebEngineWidgets)
26+
set(QTMAJOR 5)
27+
endif()
28+
29+
if(ENABLE_SANITIZERS)
30+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address,undefined")
31+
set(CMAKE_EXE_LINKER_FLAGS
32+
"${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address,undefined")
33+
endif()
34+
35+
set(DW_PLUGIN_IMPORT_PATH \"${CMAKE_BINARY_DIR}/qml\")
36+
37+
add_executable(runner main.cpp)
38+
39+
target_compile_definitions(
40+
runner PRIVATE -DPLUGIN_IMPORT_PATH=${DW_PLUGIN_IMPORT_PATH})
41+
42+
target_link_libraries(runner PUBLIC Qt${QTMAJOR}::Qml Qt${QTMAJOR}::Widgets)
43+
44+
set_target_properties(runner PROPERTIES OUTPUT_NAME "declarativewidgets")
45+
46+
add_subdirectory(src)
47+
add_subdirectory(ui2dw)
48+
include(CTest)
49+
if(BUILD_TESTING)
50+
add_subdirectory(tests)
51+
endif()
52+
53+
if(BUILD_EXAMPLES)
54+
add_subdirectory(examples)
55+
endif()

examples/CMakeLists.txt

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# SPDX-FileCopyrightText: 2025 Klarälvdalens Datakonsult AB, a KDAB Group
2+
# company <[email protected]>
3+
#
4+
# SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
5+
6+
if(USE_QT6)
7+
find_package(Qt6 6.5 NO_MODULE REQUIRED COMPONENTS Sql QuickWidgets)
8+
else()
9+
find_package(Qt5 5.15 NO_MODULE REQUIRED COMPONENTS Sql QuickWidgets)
10+
endif()
11+
12+
add_subdirectory(bookstore)
13+
add_subdirectory(config-editor)
14+
add_subdirectory(text-editor)

examples/bookstore/CMakeLists.txt

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# SPDX-FileCopyrightText: 2025 Klarälvdalens Datakonsult AB, a KDAB Group
2+
# company <[email protected]>
3+
#
4+
# SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
5+
6+
add_executable(bookstore main.cpp bookstore.cpp booksofauthormodel.cpp
7+
booklistproxymodel.cpp bookstore.qrc)
8+
9+
target_link_libraries(
10+
bookstore PRIVATE Qt${QTMAJOR}::Qml Qt${QTMAJOR}::Widgets
11+
Qt${QTMAJOR}::QuickWidgets Qt${QTMAJOR}::Sql)
12+
13+
if(Qt${QTMAJOR}WebEngineWidgets_FOUND)
14+
target_link_libraries(bookstore PRIVATE Qt${QTMAJOR}::WebEngineWidgets)
15+
endif()
16+
17+
target_compile_definitions(
18+
bookstore PRIVATE -DPLUGIN_IMPORT_PATH=${DW_PLUGIN_IMPORT_PATH})
19+
20+
set(QML_FILES main.qml)

examples/config-editor/CMakeLists.txt

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# SPDX-FileCopyrightText: 2025 Klarälvdalens Datakonsult AB, a KDAB Group
2+
# company <[email protected]>
3+
#
4+
# SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
5+
6+
add_executable(config-editor main.cpp configeditor.cpp settingsadaptor.cpp
7+
config-editor.qrc)
8+
9+
target_link_libraries(config-editor PRIVATE Qt${QTMAJOR}::Qml
10+
Qt${QTMAJOR}::Widgets)
11+
12+
if(Qt${QTMAJOR}WebEngineWidgets_FOUND)
13+
target_link_libraries(config-editor PRIVATE Qt${QTMAJOR}::WebEngineWidgets)
14+
endif()
15+
16+
target_compile_definitions(
17+
config-editor PRIVATE -DPLUGIN_IMPORT_PATH=${DW_PLUGIN_IMPORT_PATH})
18+
19+
set(QML_FILES main.qml)

examples/text-editor/CMakeLists.txt

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# SPDX-FileCopyrightText: 2025 Klarälvdalens Datakonsult AB, a KDAB Group
2+
# company <[email protected]>
3+
#
4+
# SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
5+
6+
add_executable(text-editor main.cpp editor.cpp text-editor.qrc)
7+
8+
target_link_libraries(text-editor PRIVATE Qt${QTMAJOR}::Qml
9+
Qt${QTMAJOR}::Widgets)
10+
11+
if(Qt${QTMAJOR}WebEngineWidgets_FOUND)
12+
target_link_libraries(text-editor PRIVATE Qt${QTMAJOR}::WebEngineWidgets)
13+
endif()
14+
15+
target_compile_definitions(
16+
text-editor PRIVATE -DPLUGIN_IMPORT_PATH=${DW_PLUGIN_IMPORT_PATH})
17+
18+
set(QML_FILES main.qml)

src/CMakeLists.txt

+89
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
# SPDX-FileCopyrightText: 2025 Klarälvdalens Datakonsult AB, a KDAB Group
2+
# company <[email protected]>
3+
#
4+
# SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
5+
6+
set(TARGET declarativewidgets)
7+
8+
add_library(
9+
${TARGET} MODULE
10+
abstractdeclarativeobject.cpp
11+
declarativeaction.cpp
12+
declarativeactionitem.cpp
13+
declarativeboxlayout.cpp
14+
declarativebuttongroupextension.cpp
15+
declarativecolordialog.cpp
16+
declarativecomboboxextension.cpp
17+
declarativefiledialog.cpp
18+
declarativefilesystemmodelextension.cpp
19+
declarativefontdialog.cpp
20+
declarativeformlayout.cpp
21+
declarativegridlayout.cpp
22+
declarativehboxlayout.cpp
23+
declarativeicon.cpp
24+
declarativeinputdialog.cpp
25+
declarativeitemviewextension.cpp
26+
declarativelabelextension.cpp
27+
declarativelayoutextension.cpp
28+
declarativeline.cpp
29+
declarativeloaderwidget.cpp
30+
declarativemessagebox.cpp
31+
declarativeobjectextension.cpp
32+
declarativepixmap.cpp
33+
declarativeqmlcontext.cpp
34+
declarativequickwidgetextension.cpp
35+
declarativeseparator.cpp
36+
declarativespaceritem.cpp
37+
declarativestackedlayout.cpp
38+
declarativestatusbar.cpp
39+
declarativestringlistmodelextension.cpp
40+
declarativetableviewextension.cpp
41+
declarativetabstops.cpp
42+
declarativetabwidget.cpp
43+
declarativetexteditextension.cpp
44+
declarativetreeviewextension.cpp
45+
declarativevboxlayout.cpp
46+
declarativewidgetextension.cpp
47+
declarativewidgets_plugin.cpp
48+
defaultobjectcontainer.cpp
49+
defaultwidgetcontainer.cpp
50+
mainwindowwidgetcontainer.cpp
51+
menubarwidgetcontainer.cpp
52+
menuwidgetcontainer.cpp
53+
objectadaptors.cpp
54+
scrollareawidgetcontainer.cpp
55+
stackedwidgetwidgetcontainer.cpp
56+
staticdialogmethodattached.cpp
57+
toolbarwidgetcontainer.cpp
58+
declarativesizepolicy.cpp)
59+
60+
target_link_libraries(
61+
${TARGET}
62+
PRIVATE Qt${QTMAJOR}::Core Qt${QTMAJOR}::CorePrivate Qt${QTMAJOR}::Qml
63+
Qt${QTMAJOR}::Widgets Qt${QTMAJOR}::QuickWidgets)
64+
65+
if(Qt${QTMAJOR}WebEngineWidgets_FOUND)
66+
target_link_libraries(${TARGET} PRIVATE Qt${QTMAJOR}::WebEngineWidgets)
67+
endif()
68+
69+
target_compile_definitions(${TARGET} PRIVATE BUILDING_DECLARATIVEWIDGETS)
70+
71+
set(PLUGIN_DESTDIR ${CMAKE_BINARY_DIR}/qml)
72+
73+
set_target_properties(${TARGET} PROPERTIES LIBRARY_OUTPUT_DIRECTORY
74+
"${PLUGIN_DESTDIR}/QtWidgets")
75+
76+
if(NOT ${CMAKE_CURRENT_SOURCE_DIR} STREQUAL "${PLUGIN_DESTDIR}/QtWidgets")
77+
add_custom_command(
78+
TARGET ${TARGET}
79+
POST_BUILD
80+
COMMENT "Copy qmldir to build directory"
81+
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/qmldir
82+
${PLUGIN_DESTDIR}/QtWidgets/qmldir)
83+
endif()
84+
85+
install(TARGETS ${TARGET}
86+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}/qt${QTMAJOR}/qml/QtWidgets)
87+
88+
install(FILES qmldir
89+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/qt${QTMAJOR}/qml/QtWidgets)

tests/CMakeLists.txt

+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# SPDX-FileCopyrightText: 2025 Klarälvdalens Datakonsult AB, a KDAB Group
2+
# company <[email protected]>
3+
#
4+
# SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
5+
6+
if(USE_QT6)
7+
find_package(Qt6 6.5 NO_MODULE REQUIRED COMPONENTS Test Quick QuickWidgets)
8+
else()
9+
find_package(Qt5 5.15 NO_MODULE REQUIRED COMPONENTS Test Quick QuickWidgets)
10+
endif()
11+
12+
enable_testing()
13+
# Function to create a test executable with Qt dependencies Args: TEST_NAME:
14+
# Name of the test executable to create ARGN: Additional source files for the
15+
# test
16+
function(add_test_executable test_name)
17+
add_executable(${test_name} ${ARGN})
18+
add_test(NAME ${test_name} COMMAND ${test_name})
19+
target_link_libraries(
20+
${test_name} PRIVATE Qt${QTMAJOR}::Quick Qt${QTMAJOR}::Widgets
21+
Qt${QTMAJOR}::QuickWidgets Qt${QTMAJOR}::Test)
22+
if(Qt${QTMAJOR}WebEngineWidgets_FOUND)
23+
target_link_libraries(${test_name} PRIVATE Qt${QTMAJOR}::WebEngineWidgets)
24+
endif()
25+
target_compile_definitions(
26+
${test_name} PRIVATE -DPLUGIN_IMPORT_PATH=${DW_PLUGIN_IMPORT_PATH})
27+
endfunction()
28+
29+
add_test_executable(
30+
tst_instantiatetypes auto/instantiatetypes/tst_instantiatetypes.cpp
31+
auto/instantiatetypes/qml.qrc)
32+
33+
add_test_executable(
34+
tst_layouts
35+
auto/layouts/formlayoutwidget.cpp
36+
auto/layouts/gridlayoutwidget.cpp
37+
auto/layouts/hboxlayoutwidget.cpp
38+
auto/layouts/stackedlayoutwidget.cpp
39+
auto/layouts/stackedwidget.cpp
40+
auto/layouts/tst_layouts.cpp
41+
auto/layouts/vboxlayoutwidget.cpp
42+
auto/layouts/qml.qrc
43+
auto/layouts/formlayout.ui
44+
auto/layouts/gridlayout.ui
45+
auto/layouts/hboxlayout.ui
46+
auto/layouts/stackedwidget.ui
47+
auto/layouts/vboxlayout.ui)
48+
49+
add_test_executable(tst_qmlplugins auto/qmlplugins/tst_qmlplugins.cpp)
50+
51+
add_test_executable(tst_quickwidget auto/quickwidget/tst_quickwidget.cpp
52+
auto/quickwidget/quickwidgets.qrc)

ui2dw/CMakeLists.txt

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# SPDX-FileCopyrightText: 2025 Klarälvdalens Datakonsult AB, a KDAB Group
2+
# company <[email protected]>
3+
#
4+
# SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
5+
6+
set(CMAKE_AUTOMOC ON)
7+
set(CMAKE_AUTORCC ON)
8+
set(CMAKE_AUTOUIC ON)
9+
10+
set(SOURCES
11+
main.cpp
12+
uinode.cpp
13+
uinodevisitor.cpp
14+
uiwidgetnode.cpp
15+
parser.cpp
16+
uitopnode.cpp
17+
qmlwriter.cpp
18+
idvisitor.cpp
19+
uilayoutnode.cpp
20+
uiobjectnode.cpp
21+
uipropertynode.cpp
22+
elementnamevisitor.cpp
23+
uiactionnode.cpp
24+
uiaddactionnode.cpp
25+
uilayoutitemnode.cpp
26+
itemvisitor.cpp
27+
uispacernode.cpp
28+
fontproperyvisitor.cpp
29+
uiconnectionnode.cpp
30+
connectionnodevisitor.cpp
31+
layoutvisitor.cpp
32+
buddyvisitor.cpp
33+
uitabstopsnode.cpp
34+
tabstopsnodevisitor.cpp)
35+
36+
add_executable(ui2dw ${SOURCES})
37+
target_link_libraries(ui2dw PRIVATE Qt${QTMAJOR}::Core)

0 commit comments

Comments
 (0)