cmake: allow to build qtquick and qtwidgets independently

Still hardcoded to on, but the sources are now separated
This commit is contained in:
Sergio Martins
2022-05-28 15:13:22 +01:00
parent 4cd362dc33
commit a3750ea79a
2 changed files with 61 additions and 146 deletions

View File

@@ -101,7 +101,6 @@ include(FeatureSummary)
option(${PROJECT_NAME}_QT6 "Build against Qt 6" OFF) option(${PROJECT_NAME}_QT6 "Build against Qt 6" OFF)
option(${PROJECT_NAME}_DEVELOPER_MODE "Developer Mode" OFF) option(${PROJECT_NAME}_DEVELOPER_MODE "Developer Mode" OFF)
option(${PROJECT_NAME}_PYTHON_BINDINGS "Build python bindings" OFF) option(${PROJECT_NAME}_PYTHON_BINDINGS "Build python bindings" OFF)
option(${PROJECT_NAME}_QTQUICK "Build for QtQuick instead of QtWidgets" OFF)
option(${PROJECT_NAME}_STATIC "Build statically" OFF) option(${PROJECT_NAME}_STATIC "Build statically" OFF)
option(${PROJECT_NAME}_TESTS "Build the tests" OFF) option(${PROJECT_NAME}_TESTS "Build the tests" OFF)
option(${PROJECT_NAME}_EXAMPLES "Build the examples" ON) option(${PROJECT_NAME}_EXAMPLES "Build the examples" ON)
@@ -148,18 +147,22 @@ else()
endif() endif()
include(KDQtInstallPaths) #to set QT_INSTALL_FOO variables include(KDQtInstallPaths) #to set QT_INSTALL_FOO variables
# // TODOv2 set(KDDW_FRONTEND_QTWIDGETS ON)
find_package(Qt${Qt_VERSION_MAJOR}Quick) set(KDDW_FRONTEND_QTQUICK ON)
find_package(Qt${Qt_VERSION_MAJOR}QuickControls2)
add_definitions(-DQT_NO_KEYWORDS) add_definitions(-DQT_NO_KEYWORDS)
set(${PROJECT_NAME}_DEPS "widgets")
if(${PROJECT_NAME}_QTQUICK) # TODOv2
find_package(Qt${Qt_VERSION_MAJOR}Quick) add_definitions(-DKDDOCKWIDGETS_QTWIDGETS)
find_package(Qt${Qt_VERSION_MAJOR}QuickControls2)
if (KDDW_FRONTEND_QTWIDGETS)
set(${PROJECT_NAME}_DEPS "widgets")
endif()
if (KDDW_FRONTEND_QTQUICK)
find_package(Qt${Qt_VERSION_MAJOR}Quick REQUIRED)
find_package(Qt${Qt_VERSION_MAJOR}QuickControls2 REQUIRED)
set(${PROJECT_NAME}_DEPS "${${PROJECT_NAME}_DEPS} quick quickcontrols2") set(${PROJECT_NAME}_DEPS "${${PROJECT_NAME}_DEPS} quick quickcontrols2")
else()
add_definitions(-DKDDOCKWIDGETS_QTWIDGETS)
endif() endif()
if(NOT WIN32 AND NOT APPLE AND NOT EMSCRIPTEN AND NOT ${PROJECT_NAME}_QT6 AND ${PROJECT_NAME}_X11EXTRAS) if(NOT WIN32 AND NOT APPLE AND NOT EMSCRIPTEN AND NOT ${PROJECT_NAME}_QT6 AND ${PROJECT_NAME}_X11EXTRAS)
@@ -171,7 +174,7 @@ if(${PROJECT_NAME}_DEVELOPER_MODE)
set(${PROJECT_NAME}_TESTS ON) set(${PROJECT_NAME}_TESTS ON)
set(${PROJECT_NAME}_WERROR ON) set(${PROJECT_NAME}_WERROR ON)
include(ECMEnableSanitizers) include(ECMEnableSanitizers)
# find_package(doctest REQUIRED) # find_package(doctest REQUIRED) TODOv2
endif() endif()
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
@@ -181,10 +184,7 @@ else()
endif() endif()
set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
if(${PROJECT_NAME}_QTQUICK)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
endif()
set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON) set(CMAKE_AUTORCC ON)
@@ -305,9 +305,10 @@ if(${PROJECT_NAME}_PYTHON_BINDINGS)
endif() endif()
if(${PROJECT_NAME}_EXAMPLES) if(${PROJECT_NAME}_EXAMPLES)
if(${PROJECT_NAME}_QTQUICK) if(KDDW_FRONTEND_QTQUICK AND FALSE)
add_subdirectory(examples/qtquick) add_subdirectory(examples/qtquick)
else() endif()
if(KDDW_FRONTEND_QTWIDGETS)
add_subdirectory(examples/dockwidgets) add_subdirectory(examples/dockwidgets)
add_subdirectory(examples/minimal) add_subdirectory(examples/minimal)
add_subdirectory(examples/minimal-mdi) add_subdirectory(examples/minimal-mdi)
@@ -358,13 +359,11 @@ if(${PROJECT_NAME}_TESTS)
add_test(NAME tst_separator COMMAND tst_separator) add_test(NAME tst_separator COMMAND tst_separator)
add_test(NAME tst_floatingwindow COMMAND tst_floatingwindow) add_test(NAME tst_floatingwindow COMMAND tst_floatingwindow)
add_test(NAME tst_dockwidget COMMAND tst_dockwidget) add_test(NAME tst_dockwidget COMMAND tst_dockwidget)
add_test(NAME tst_multisplitter COMMAND tst_multisplitter)
if(NOT ${PROJECT_NAME}_QTQUICK) if(KDDW_FRONTEND_QTWIDGETS)
# tst_multisplitter depends on QWidget
add_test(NAME tst_multisplitter COMMAND tst_multisplitter)
add_test(NAME tst_qtwidgets COMMAND tst_qtwidgets) add_test(NAME tst_qtwidgets COMMAND tst_qtwidgets)
endif() endif()
endif() endif()
endif() endif()

View File

@@ -21,7 +21,7 @@ add_definitions(-DQT_NO_SIGNALS_SLOTS_KEYWORDS
-DQT_NO_FOREACH -DQT_NO_FOREACH
) )
set(DOCKSLIBS_SRCS set(KDDW_BACKEND_SRCS
KDDockWidgets.cpp KDDockWidgets.cpp
Config.cpp Config.cpp
Config.h Config.h
@@ -47,18 +47,15 @@ set(DOCKSLIBS_SRCS
private/WindowBeingDragged_p.h private/WindowBeingDragged_p.h
private/DragController.cpp private/DragController.cpp
private/DragController_p.h private/DragController_p.h
private/WidgetResizeHandler.cpp private/WidgetResizeHandler.cpp
private/WidgetResizeHandler_p.h private/WidgetResizeHandler_p.h
private/WindowZOrder_x11_p.h private/WindowZOrder_x11_p.h
private/multisplitter/Item.cpp private/multisplitter/Item.cpp
private/multisplitter/Item_p.h private/multisplitter/Item_p.h
private/multisplitter/ItemFreeContainer.cpp private/multisplitter/ItemFreeContainer.cpp
private/multisplitter/ItemFreeContainer_p.h private/multisplitter/ItemFreeContainer_p.h
private/multisplitter/MultiSplitterConfig.cpp private/multisplitter/MultiSplitterConfig.cpp
private/multisplitter/MultiSplitterConfig.h private/multisplitter/MultiSplitterConfig.h
controllers/DockWidget.cpp controllers/DockWidget.cpp
controllers/DockWidget.h controllers/DockWidget.h
controllers/DropArea.cpp controllers/DropArea.cpp
@@ -108,6 +105,10 @@ set(DOCKSLIBS_SRCS
qtcommon/Platform_qt.h qtcommon/Platform_qt.h
qtcommon/Window_qt.cpp qtcommon/Window_qt.cpp
qtcommon/Window_qt.h qtcommon/Window_qt.h
kddockwidgets_resources.qrc
)
SET(KDDW_FRONTEND_QTWIDGETS_SRCS
qtwidgets/Window_qtwidgets.cpp qtwidgets/Window_qtwidgets.cpp
qtwidgets/Window_qtwidgets.h qtwidgets/Window_qtwidgets.h
qtwidgets/Platform_qtwidgets.cpp qtwidgets/Platform_qtwidgets.cpp
@@ -156,62 +157,7 @@ set(DOCKSLIBS_SRCS
qtwidgets/ObjectViewer_p.h qtwidgets/ObjectViewer_p.h
) )
# add_library(kddockwidgets_backend STATIC ${KDDW_BACKEND_SRCS}) SET(KDDW_FRONTEND_QTQUICK_SRCS
# target_link_libraries(kddockwidgets_backend Qt5::Widgets)
# target_include_directories(kddockwidgets_backend
# PUBLIC
# $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/backend_temp_includes> # TODO remove
# $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/backend_temp_includes/kddockwidgets>
# $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/3rdparty> # TODO: Link to KDBindings instead
# )
#--------------------------------
set(DOCKS_INSTALLABLE_INCLUDES
docks_export.h
Config.h
ViewFactory.h
# DockWidget.h
KDDockWidgets.h
Qt5Qt6Compat_p.h
FocusScope.h
# QWidgetAdapter.h
LayoutSaver.h
MainWindowMDI.h
# MainWindow.h
)
set(DOCKS_INSTALLABLE_PRIVATE_INCLUDES
private/DragController_p.h
private/Draggable_p.h
private/DropIndicatorOverlay.h
# private/FloatingWindow_p.h
# private/Frame_p.h
private/LayoutSaver_p.h
# private/Layout.h
# private/SideBar_p.h
private/TitleBar_p.h
private/WindowBeingDragged_p.h
private/WidgetResizeHandler_p.h
private/DockRegistry_p.h
# private/TabWidget_p.h
)
set(DOCKS_INSTALLABLE_PRIVATE_WIDGET_INCLUDES
# private/widgets/QWidgetAdapter_widgets_p.h
# private/widgets/SideBarWidget_p.h
# private/widgets/FloatingWindowWidget_p.h
# private/widgets/FrameWidget_p.h
# private/widgets/TabBarWidget_p.h
# private/widgets/TabWidgetWidget_p.h
)
set(DOCKS_INSTALLABLE_PRIVATE_QUICK_INCLUDES
# private/quick/QWidgetAdapter_quick_p.h
)
set(KDDW_QTQUICK_FRONTEND_SRCS
qtquick/Window_qtquick.cpp qtquick/Window_qtquick.cpp
qtquick/Window_qtquick.h qtquick/Window_qtquick.h
qtquick/Platform_qtquick.cpp qtquick/Platform_qtquick.cpp
@@ -259,72 +205,44 @@ set(KDDW_QTQUICK_FRONTEND_SRCS
kddockwidgets_qtquick.qrc kddockwidgets_qtquick.qrc
) )
if(${PROJECT_NAME}_QTQUICK) set(DOCKS_INSTALLABLE_INCLUDES
set(DOCKSLIBS_SRCS ${DOCKSLIBS_SRCS} docks_export.h
DockWidgetQuick.cpp Config.h
DockWidgetQuick.h ViewFactory.h
private/quick/DockWidgetInstantiator.cpp # DockWidget.h
private/quick/DockWidgetInstantiator_p.h KDDockWidgets.h
# private/quick/QWidgetAdapter_quick.cpp Qt5Qt6Compat_p.h
# private/quick/QWidgetAdapter_quick_p.h FocusScope.h
private/quick/FloatingWindowQuick.cpp # QWidgetAdapter.h
private/quick/FloatingWindowQuick_p.h LayoutSaver.h
# private/quick/TabWidgetQuick.cpp MainWindowMDI.h
# private/quick/TabWidgetQuick_p.h # MainWindow.h
private/quick/TabBarQuick.cpp )
private/quick/TabBarQuick_p.h
private/quick/TitleBarQuick.cpp
private/quick/TitleBarQuick_p.h
private/quick/QmlTypes.cpp
private/quick/QmlTypes.h
private/quick/Helpers.cpp
private/quick/Helpers_p.h
private/quick/FrameQuick.cpp
private/quick/FrameQuick_p.h
private/quick/LayoutSaverInstantiator.cpp
private/quick/LayoutSaverInstantiator_p.h
private/quick/RubberBandQuick.cpp
private/quick/RubberBandQuick.h
private/quick/MainWindowQuick.cpp
private/quick/MainWindowQuick_p.h
private/quick/MainWindowInstantiator.cpp
private/quick/MainWindowInstantiator_p.h
private/multisplitter/Separator_quick.cpp
private/multisplitter/Separator_quick.h
private/multisplitter/Rubberband_quick.cpp
private/multisplitter/Rubberband_quick.h
kddockwidgets_qtquick.qrc)
set(DOCKS_INSTALLABLE_INCLUDES ${DOCKS_INSTALLABLE_INCLUDES} DockWidgetQuick.h) set(DOCKS_INSTALLABLE_PRIVATE_INCLUDES
private/DragController_p.h
private/Draggable_p.h
private/DropIndicatorOverlay.h
# private/FloatingWindow_p.h
# private/Frame_p.h
private/LayoutSaver_p.h
# private/Layout.h
# private/SideBar_p.h
private/TitleBar_p.h
private/WindowBeingDragged_p.h
private/WidgetResizeHandler_p.h
private/DockRegistry_p.h
# private/TabWidget_p.h
)
else() set(DOCKSLIBS_SRCS ${KDDW_BACKEND_SRCS})
set(DOCKSLIBS_SRCS ${DOCKSLIBS_SRCS}
# MainWindow.cpp if (KDDW_FRONTEND_QTWIDGETS)
# MainWindow.h set(DOCKSLIBS_SRCS ${DOCKSLIBS_SRCS} ${KDDW_FRONTEND_QTWIDGETS_SRCS})
# DockWidget.h endif()
# private/widgets/TabBarWidget.cpp
# private/widgets/TabBarWidget_p.h
# private/widgets/FloatingWindowWidget.cpp
# private/widgets/FloatingWindowWidget_p.h
# private/widgets/FrameWidget.cpp
# private/widgets/FrameWidget_p.h
# private/widgets/SideBarWidget.cpp
# private/widgets/SideBarWidget_p.h
# private/widgets/TabWidgetWidget.cpp
# private/widgets/TabWidgetWidget_p.h
# private/widgets/DockWidget.cpp
# private/widgets/QWidgetAdapter_widgets.cpp
# private/widgets/QWidgetAdapter_widgets_p.h
# private/indicators/AnimatedIndicators.cpp
)
set(DOCKS_INSTALLABLE_INCLUDES if (KDDW_FRONTEND_QTQUICK)
${DOCKS_INSTALLABLE_INCLUDES} set(DOCKSLIBS_SRCS ${DOCKSLIBS_SRCS} ${KDDW_FRONTEND_QTQUICK_SRCS})
# MainWindow.h
# DockWidget.h
# MDIArea.h
)
endif() endif()
#Generate C/C++ CamelCase forwarding headers (only public includes) #Generate C/C++ CamelCase forwarding headers (only public includes)
@@ -345,9 +263,7 @@ ecm_generate_headers(camelcase_HEADERS
MainWindowMDI MainWindowMDI
) )
set(RESOURCES ${CMAKE_CURRENT_SOURCE_DIR}/kddockwidgets_resources.qrc) add_library(kddockwidgets ${KDDockWidgets_LIBRARY_MODE} ${DOCKSLIBS_SRCS} ${DOCKS_INSTALLABLE_INCLUDES} ${RESOURCES})
add_library(kddockwidgets ${KDDockWidgets_LIBRARY_MODE} ${DOCKSLIBS_SRCS} ${KDDW_QTQUICK_FRONTEND_SRCS} ${DOCKS_INSTALLABLE_INCLUDES} ${RESOURCES})
add_library(KDAB::kddockwidgets ALIAS kddockwidgets) add_library(KDAB::kddockwidgets ALIAS kddockwidgets)
set_target_properties(kddockwidgets PROPERTIES OUTPUT_NAME "kddockwidgets${KDDockWidgets_LIBRARY_QTID}") set_target_properties(kddockwidgets PROPERTIES OUTPUT_NAME "kddockwidgets${KDDockWidgets_LIBRARY_QTID}")