From 460b898beae862dfa4d282d09a6414684b69ece2 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sat, 9 Jul 2022 09:11:17 -0400 Subject: [PATCH] cmake-lint, cmake-format CMake files --- .pre-commit-config.yaml | 3 + CMakeLists.txt | 362 ++++++++-------- cmake/InstallLocation.cmake | 16 +- docs/CMakeLists.txt | 13 +- docs/api/CMakeLists.txt | 84 ++-- examples/dockwidgets/CMakeLists.txt | 20 +- examples/mdi_with_docking/CMakeLists.txt | 18 +- examples/minimal-mdi/CMakeLists.txt | 18 +- examples/minimal/CMakeLists.txt | 18 +- .../qtquick/customtitlebar/CMakeLists.txt | 22 +- examples/qtquick/dockwidgets/CMakeLists.txt | 22 +- examples/qtquick/mdi/CMakeLists.txt | 22 +- python/CMakeLists.txt | 21 +- python/PyKDDockWidgets/CMakeLists.txt | 60 +-- python/tests/CMakeLists.txt | 28 +- src/CMakeLists.txt | 386 ++++++++++-------- tests/CMakeLists.txt | 14 +- 17 files changed, 574 insertions(+), 553 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 5446ca5f..5e533a95 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,5 +1,6 @@ # See https://pre-commit.com for more information # See https://pre-commit.com/hooks.html for more hooks +exclude: ^(cmake/ECM|cmake/KDAB/) repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v3.2.0 @@ -32,4 +33,6 @@ repos: rev: v0.6.13 hooks: - id: cmake-lint + exclude: (.py.cmake|Doxyfile.cmake) - id: cmake-format + exclude: (.py.cmake|Doxyfile.cmake) diff --git a/CMakeLists.txt b/CMakeLists.txt index ac7879c0..df60e599 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -72,26 +72,36 @@ cmake_minimum_required(VERSION 3.7) # Allow using a non-KDAB install location. -set(KDAB_INSTALL True CACHE INTERNAL "Install to default KDAB Location") +set(KDAB_INSTALL + True + CACHE INTERNAL "Install to default KDAB Location" +) if(DEFINED CMAKE_INSTALL_PREFIX) - if(NOT "${CMAKE_INSTALL_PREFIX}" STREQUAL "") - set(KDAB_INSTALL False CACHE INTERNAL "Install to non-KDAB Location") - endif() + if(NOT "${CMAKE_INSTALL_PREFIX}" STREQUAL "") + set(KDAB_INSTALL + False + CACHE INTERNAL "Install to non-KDAB Location" + ) + endif() endif() if(${CMAKE_VERSION} VERSION_LESS "3.12.0") - project(KDDockWidgets LANGUAGES CXX) + project(KDDockWidgets LANGUAGES CXX) else() - project(KDDockWidgets - DESCRIPTION "An advanced docking system for Qt" - HOMEPAGE_URL "https://github.com/KDAB/KDDockWidgets" - LANGUAGES CXX) + project( + KDDockWidgets + DESCRIPTION "An advanced docking system for Qt" + HOMEPAGE_URL "https://github.com/KDAB/KDDockWidgets" + LANGUAGES CXX + ) endif() set(${PROJECT_NAME}_VERSION_MAJOR 1) set(${PROJECT_NAME}_VERSION_MINOR 5) set(${PROJECT_NAME}_VERSION_PATCH 99) -set(${PROJECT_NAME}_VERSION ${${PROJECT_NAME}_VERSION_MAJOR}.${${PROJECT_NAME}_VERSION_MINOR}.${${PROJECT_NAME}_VERSION_PATCH}) +set(${PROJECT_NAME}_VERSION + ${${PROJECT_NAME}_VERSION_MAJOR}.${${PROJECT_NAME}_VERSION_MINOR}.${${PROJECT_NAME}_VERSION_PATCH} +) set(PROJECT_VERSION ${${PROJECT_NAME}_VERSION}) #PROJECT_VERSION is needed by some ECM modules set(${PROJECT_NAME}_SOVERSION "1.6") @@ -106,7 +116,10 @@ option(${PROJECT_NAME}_TESTS "Build the tests" OFF) option(${PROJECT_NAME}_EXAMPLES "Build the examples" ON) option(${PROJECT_NAME}_DOCS "Build the API documentation" OFF) option(${PROJECT_NAME}_WERROR "Use -Werror (will be true for developer-mode unconditionally)" OFF) -option(${PROJECT_NAME}_X11EXTRAS "On Linux, link against QtX11Extras so we can detect if the compositor supports transparency. Not applicable to other platforms or Qt6." ON) +option(${PROJECT_NAME}_X11EXTRAS + "Link with QtX11Extras to detect if the compositor supports transparency. Not applicable to non-Linux or Qt6." + ON +) option(${PROJECT_NAME}_XLib "On Linux, link against XLib, for a more robust window z-order detection." OFF) list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake") @@ -116,60 +129,68 @@ list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake/KDAB/modules") # Set a default build type if none was specified set(default_build_type "Release") if(EXISTS "${CMAKE_SOURCE_DIR}/.git" OR ${PROJECT_NAME}_DEVELOPER_MODE) - set(default_build_type "Debug") + set(default_build_type "Debug") endif() if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) - message(STATUS "Setting build type to ${default_build_type} as none was specified.") - set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE STRING "Choose the type of build." FORCE) - # Set the possible values of build type for cmake-gui - set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo") + message(STATUS "Setting build type to ${default_build_type} as none was specified.") + set(CMAKE_BUILD_TYPE + "${default_build_type}" + CACHE STRING "Choose the type of build." FORCE + ) + # Set the possible values of build type for cmake-gui + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo") endif() -if (${PROJECT_NAME}_XLib) - add_definitions(-DKDDockWidgets_XLIB) +if(${PROJECT_NAME}_XLib) + add_definitions(-DKDDockWidgets_XLIB) endif() if(${PROJECT_NAME}_QT6) - set(Qt_VERSION_MAJOR 6) - set(QT_MIN_VERSION "6.0.0") - set(${PROJECT_NAME}_LIBRARY_QTID "-qt6") + set(Qt_VERSION_MAJOR 6) + set(QT_MIN_VERSION "6.0.0") + set(${PROJECT_NAME}_LIBRARY_QTID "-qt6") else() - set(Qt_VERSION_MAJOR 5) - set(QT_MIN_VERSION "5.15") - set(${PROJECT_NAME}_LIBRARY_QTID "") + set(Qt_VERSION_MAJOR 5) + set(QT_MIN_VERSION "5.15") + set(${PROJECT_NAME}_LIBRARY_QTID "") endif() find_package(Qt${Qt_VERSION_MAJOR} ${QT_MIN_VERSION} NO_MODULE REQUIRED COMPONENTS Widgets Test) include(KDQtInstallPaths) #to set QT_INSTALL_FOO variables set(${PROJECT_NAME}_DEPS "widgets") if(${PROJECT_NAME}_QTQUICK) - find_package(Qt${Qt_VERSION_MAJOR} NO_MODULE REQUIRED COMPONENTS Quick QuickControls2) - add_definitions(-DKDDOCKWIDGETS_QTQUICK) - set(${PROJECT_NAME}_DEPS "${${PROJECT_NAME}_DEPS} quick quickcontrols2") + find_package(Qt${Qt_VERSION_MAJOR} NO_MODULE REQUIRED COMPONENTS Quick QuickControls2) + add_definitions(-DKDDOCKWIDGETS_QTQUICK) + set(${PROJECT_NAME}_DEPS "${${PROJECT_NAME}_DEPS} quick quickcontrols2") else() - add_definitions(-DKDDOCKWIDGETS_QTWIDGETS) + add_definitions(-DKDDOCKWIDGETS_QTWIDGETS) endif() -if(NOT WIN32 AND NOT APPLE AND NOT EMSCRIPTEN AND NOT ${PROJECT_NAME}_QT6 AND ${PROJECT_NAME}_X11EXTRAS) - set(${PROJECT_NAME}_DEPS "${${PROJECT_NAME}_DEPS} x11extras") +if(NOT WIN32 + AND NOT APPLE + AND NOT EMSCRIPTEN + AND NOT ${PROJECT_NAME}_QT6 + AND ${PROJECT_NAME}_X11EXTRAS +) + set(${PROJECT_NAME}_DEPS "${${PROJECT_NAME}_DEPS} x11extras") endif() #Always build the test harness in developer-mode if(${PROJECT_NAME}_DEVELOPER_MODE) - set(${PROJECT_NAME}_TESTS ON) - set(${PROJECT_NAME}_WERROR ON) - include(ECMEnableSanitizers) + set(${PROJECT_NAME}_TESTS ON) + set(${PROJECT_NAME}_WERROR ON) + include(ECMEnableSanitizers) endif() if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - set(IS_CLANG_BUILD TRUE) + set(IS_CLANG_BUILD TRUE) else() - set(IS_CLANG_BUILD FALSE) + set(IS_CLANG_BUILD FALSE) endif() if(${PROJECT_NAME}_QTQUICK) - set(CMAKE_CXX_STANDARD 17) - set(CMAKE_CXX_STANDARD_REQUIRED ON) + set(CMAKE_CXX_STANDARD 17) + set(CMAKE_CXX_STANDARD_REQUIRED ON) endif() set(CMAKE_AUTOMOC ON) @@ -180,178 +201,199 @@ set(CMAKE_C_VISIBILITY_PRESET hidden) set(CMAKE_CXX_VISIBILITY_PRESET hidden) set(CMAKE_VISIBILITY_INLINES_HIDDEN 1) +# Sets compiler flags for the specified target, taking platform into consideration. macro(set_compiler_flags targetName) - if(${PROJECT_NAME}_DEVELOPER_MODE) - target_compile_definitions(${targetName} PUBLIC DOCKS_DEVELOPER_MODE PRIVATE QT_FORCE_ASSERTS) + if(${PROJECT_NAME}_DEVELOPER_MODE) + target_compile_definitions( + ${targetName} + PUBLIC DOCKS_DEVELOPER_MODE + PRIVATE QT_FORCE_ASSERTS + ) - if(NOT MSVC) - target_compile_options(${targetName} PRIVATE -Wall -Wextra) + if(NOT MSVC) + target_compile_options(${targetName} PRIVATE -Wall -Wextra) + endif() + + if(APPLE) + target_compile_options(${targetName} PRIVATE -Wweak-vtables) + endif() endif() - if(APPLE) - target_compile_options(${targetName} PRIVATE -Wweak-vtables) + # Enable -Werror + if(${PROJECT_NAME}_WERROR AND (NOT MSVC OR IS_CLANG_BUILD)) # clang-cl accepts these too + target_compile_options(${targetName} PRIVATE -Werror -Wundef -Wno-error=deprecated-declarations) endif() - endif() - - # Enable -Werror - if(${PROJECT_NAME}_WERROR AND (NOT MSVC OR IS_CLANG_BUILD)) # clang-cl accepts these too - target_compile_options(${targetName} PRIVATE -Werror -Wundef -Wno-error=deprecated-declarations) - endif() endmacro() -if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND NOT APPLE) OR - (CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND NOT APPLE) OR - (CMAKE_CXX_COMPILER_ID STREQUAL "Intel" AND NOT WIN32)) - # Linker warnings should be treated as errors - set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--fatal-warnings ${CMAKE_SHARED_LINKER_FLAGS}") - set(CMAKE_MODULE_LINKER_FLAGS "-Wl,--fatal-warnings ${CMAKE_MODULE_LINKER_FLAGS}") +if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND NOT APPLE) + OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND NOT APPLE) + OR (CMAKE_CXX_COMPILER_ID STREQUAL "Intel" AND NOT WIN32) +) + # Linker warnings should be treated as errors + set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--fatal-warnings ${CMAKE_SHARED_LINKER_FLAGS}") + set(CMAKE_MODULE_LINKER_FLAGS "-Wl,--fatal-warnings ${CMAKE_MODULE_LINKER_FLAGS}") - string(TOUPPER "CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE}" compileflags) - if("${CMAKE_CXX_FLAGS} ${${compileflags}}" MATCHES "-fsanitize") - set(sanitizers_enabled TRUE) - else() - set(sanitizers_enabled FALSE) - endif() - - if(APPLE OR LINUX) - # cannot enable this for clang + sanitizers - if(NOT sanitizers_enabled OR NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang") - # Do not allow undefined symbols, even in non-symbolic shared libraries - set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--no-undefined ${CMAKE_SHARED_LINKER_FLAGS}") - set(CMAKE_MODULE_LINKER_FLAGS "-Wl,--no-undefined ${CMAKE_MODULE_LINKER_FLAGS}") + string(TOUPPER "CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE}" compileflags) + if("${CMAKE_CXX_FLAGS} ${${compileflags}}" MATCHES "-fsanitize") + set(sanitizers_enabled TRUE) + else() + set(sanitizers_enabled FALSE) + endif() + + if(APPLE OR LINUX) + # cannot enable this for clang + sanitizers + if(NOT sanitizers_enabled OR NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang") + # Do not allow undefined symbols, even in non-symbolic shared libraries + set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--no-undefined ${CMAKE_SHARED_LINKER_FLAGS}") + set(CMAKE_MODULE_LINKER_FLAGS "-Wl,--no-undefined ${CMAKE_MODULE_LINKER_FLAGS}") + endif() endif() - endif() endif() if(${PROJECT_NAME}_STATIC) - set(${PROJECT_NAME}_LIBRARY_MODE "STATIC") + set(${PROJECT_NAME}_LIBRARY_MODE "STATIC") else() - set(${PROJECT_NAME}_LIBRARY_MODE "SHARED") + set(${PROJECT_NAME}_LIBRARY_MODE "SHARED") endif() if(KDAB_INSTALL) - if(UNIX) - set(CMAKE_INSTALL_PREFIX "/usr/local/KDAB/${PROJECT_NAME}-${${PROJECT_NAME}_VERSION}" CACHE INTERNAL "Install to default KDAB Location") - elseif(WIN32) - set(CMAKE_INSTALL_PREFIX "C:\\KDAB\\${PROJECT_NAME}-${${PROJECT_NAME}_VERSION}" CACHE INTERNAL "Install to default KDAB Location") - endif() + if(UNIX) + set(CMAKE_INSTALL_PREFIX + "/usr/local/KDAB/${PROJECT_NAME}-${${PROJECT_NAME}_VERSION}" + CACHE INTERNAL "Install to default KDAB Location" + ) + elseif(WIN32) + set(CMAKE_INSTALL_PREFIX + "C:\\KDAB\\${PROJECT_NAME}-${${PROJECT_NAME}_VERSION}" + CACHE INTERNAL "Install to default KDAB Location" + ) + endif() endif() # setup default install locations include(InstallLocation) if(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR) - set(${PROJECT_NAME}_IS_ROOT_PROJECT TRUE) + set(${PROJECT_NAME}_IS_ROOT_PROJECT TRUE) - message(STATUS "Building ${PROJECT_NAME} ${${PROJECT_NAME}_VERSION} in ${CMAKE_BUILD_TYPE} mode. Installing to ${CMAKE_INSTALL_PREFIX}") - - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin") - set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/lib") - set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/lib") - - install(FILES LICENSE.txt README.md DESTINATION ${INSTALL_DOC_DIR}) - install(DIRECTORY LICENSES DESTINATION ${INSTALL_DOC_DIR}) - - # Generate .pri file for qmake users - #TODO: ECM does not support Qt6 yet - if(Qt_VERSION_MAJOR EQUAL 5 AND - CMAKE_VERSION VERSION_GREATER "3.11.99" AND NOT CMAKE_CONFIGURATION_TYPES) # Not working with VS generator or older cmake versions - include(ECMGeneratePriFile) - set(PROJECT_VERSION_STRING ${${PROJECT_NAME}_VERSION}) - ecm_generate_pri_file(BASE_NAME KDDockWidgets - LIB_NAME kddockwidgets - DEPS ${${PROJECT_NAME}_DEPS} - FILENAME_VAR pri_filename - INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR} + message(STATUS "Building ${PROJECT_NAME} ${${PROJECT_NAME}_VERSION} in ${CMAKE_BUILD_TYPE} mode. " + "Installing to ${CMAKE_INSTALL_PREFIX}" ) - install(FILES ${pri_filename} DESTINATION ${ECM_MKSPECS_INSTALL_DIR}) - endif() + + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin") + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/lib") + set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/lib") + + install(FILES LICENSE.txt README.md DESTINATION ${INSTALL_DOC_DIR}) + install(DIRECTORY LICENSES DESTINATION ${INSTALL_DOC_DIR}) + + # Generate .pri file for qmake users + #TODO: ECM does not support Qt6 yet, nor with VS generator for older cmake versions + if(Qt_VERSION_MAJOR EQUAL 5 + AND CMAKE_VERSION VERSION_GREATER "3.11.99" + AND NOT CMAKE_CONFIGURATION_TYPES + ) + include(ECMGeneratePriFile) + set(PROJECT_VERSION_STRING ${${PROJECT_NAME}_VERSION}) + ecm_generate_pri_file( + BASE_NAME + KDDockWidgets + LIB_NAME + kddockwidgets + DEPS + ${${PROJECT_NAME}_DEPS} + FILENAME_VAR + pri_filename + INCLUDE_INSTALL_DIR + ${CMAKE_INSTALL_INCLUDEDIR} + ) + install(FILES ${pri_filename} DESTINATION ${ECM_MKSPECS_INSTALL_DIR}) + endif() else() - #Always disable tests, examples, docs when used as a submodule - set(${PROJECT_NAME}_IS_ROOT_PROJECT FALSE) - set(${PROJECT_NAME}_TESTS FALSE) - set(${PROJECT_NAME}_EXAMPLES FALSE) - set(${PROJECT_NAME}_DOCS FALSE) + #Always disable tests, examples, docs when used as a submodule + set(${PROJECT_NAME}_IS_ROOT_PROJECT FALSE) + set(${PROJECT_NAME}_TESTS FALSE) + set(${PROJECT_NAME}_EXAMPLES FALSE) + set(${PROJECT_NAME}_DOCS FALSE) endif() if(${PROJECT_NAME}_TESTS) - enable_testing() + enable_testing() endif() add_subdirectory(src) if(${PROJECT_NAME}_PYTHON_BINDINGS) - if(CMAKE_BUILD_TYPE MATCHES "^[Dd]eb" OR ${PROJECT_NAME}_STATIC) - message(FATAL_ERROR "** Python Bindings are disabled in debug or static builds.") - endif() - if(CMAKE_UNITY_BUILD) - message(FATAL_ERROR "** Python Bindings are disabled in Unity builds. " - "Try again with CMAKE_UNITY_BUILD=OFF") - endif() + if(CMAKE_BUILD_TYPE MATCHES "^[Dd]eb" OR ${PROJECT_NAME}_STATIC) + message(FATAL_ERROR "** Python Bindings are disabled in debug or static builds.") + endif() + if(CMAKE_UNITY_BUILD) + message(FATAL_ERROR "** Python Bindings are disabled in Unity builds. " "Try again with CMAKE_UNITY_BUILD=OFF") + endif() endif() if(${PROJECT_NAME}_PYTHON_BINDINGS) - add_subdirectory(python) + add_subdirectory(python) endif() if(${PROJECT_NAME}_EXAMPLES) - if(${PROJECT_NAME}_QTQUICK) - add_subdirectory(examples/qtquick) - else() - add_subdirectory(examples/dockwidgets) - add_subdirectory(examples/minimal) - add_subdirectory(examples/minimal-mdi) - add_subdirectory(examples/mdi_with_docking) - set_compiler_flags(kddockwidgets_example) - set_compiler_flags(kddockwidgets_minimal_example) - set_compiler_flags(kddockwidgets_mdi_with_docking_example) - endif() + if(${PROJECT_NAME}_QTQUICK) + add_subdirectory(examples/qtquick) + else() + add_subdirectory(examples/dockwidgets) + add_subdirectory(examples/minimal) + add_subdirectory(examples/minimal-mdi) + add_subdirectory(examples/mdi_with_docking) + set_compiler_flags(kddockwidgets_example) + set_compiler_flags(kddockwidgets_minimal_example) + set_compiler_flags(kddockwidgets_mdi_with_docking_example) + endif() endif() if(${PROJECT_NAME}_TESTS) - if(${PROJECT_NAME}_DEVELOPER_MODE) - add_subdirectory(tests) + if(${PROJECT_NAME}_DEVELOPER_MODE) + add_subdirectory(tests) - # Require Qt5.15.1 or higher to run the tests_launcher tests on Mac - if(NOT APPLE OR Qt5Widgets_VERSION VERSION_GREATER 5.15.0) - # tst_docks.exe is pretty big (160 tests), so split it in more runs so we can use threads. - add_test(NAME tst_docks0 COMMAND tests_launcher 0 5) - add_test(NAME tst_docks1 COMMAND tests_launcher 1 5) - add_test(NAME tst_docks2 COMMAND tests_launcher 2 5) - add_test(NAME tst_docks3 COMMAND tests_launcher 3 5) - add_test(NAME tst_docks4 COMMAND tests_launcher 4 5) - add_test(NAME tst_docks5 COMMAND tests_launcher 5 5) - add_test(NAME tst_docks6 COMMAND tests_launcher 6 5) - add_test(NAME tst_docks7 COMMAND tests_launcher 7 5) - add_test(NAME tst_docks8 COMMAND tests_launcher 8 5) - add_test(NAME tst_docks9 COMMAND tests_launcher 9 5) - add_test(NAME tst_docks10 COMMAND tests_launcher 10 5) - add_test(NAME tst_docks11 COMMAND tests_launcher 10 5) - add_test(NAME tst_docks12 COMMAND tests_launcher 11 5) - add_test(NAME tst_docks13 COMMAND tests_launcher 12 5) - add_test(NAME tst_docks14 COMMAND tests_launcher 13 5) - add_test(NAME tst_docks15 COMMAND tests_launcher 14 5) - add_test(NAME tst_docks16 COMMAND tests_launcher 15 5) - add_test(NAME tst_docks17 COMMAND tests_launcher 16 5) - add_test(NAME tst_docks18 COMMAND tests_launcher 17 5) - add_test(NAME tst_docks19 COMMAND tests_launcher 18 5) - add_test(NAME tst_docks20 COMMAND tests_launcher 19 5) - add_test(NAME tst_docks21 COMMAND tests_launcher 20 5) # one more for rounding leftovers - endif() - if(NOT ${PROJECT_NAME}_QTQUICK) - # tst_multisplitter depends on QWidget - add_test(NAME tst_multisplitter COMMAND tst_multisplitter) - endif() + # Require Qt5.15.1 or higher to run the tests_launcher tests on Mac + if(NOT APPLE OR Qt5Widgets_VERSION VERSION_GREATER 5.15.0) + # tst_docks.exe is pretty big (160 tests), so split it in more runs so we can use threads. + add_test(NAME tst_docks0 COMMAND tests_launcher 0 5) + add_test(NAME tst_docks1 COMMAND tests_launcher 1 5) + add_test(NAME tst_docks2 COMMAND tests_launcher 2 5) + add_test(NAME tst_docks3 COMMAND tests_launcher 3 5) + add_test(NAME tst_docks4 COMMAND tests_launcher 4 5) + add_test(NAME tst_docks5 COMMAND tests_launcher 5 5) + add_test(NAME tst_docks6 COMMAND tests_launcher 6 5) + add_test(NAME tst_docks7 COMMAND tests_launcher 7 5) + add_test(NAME tst_docks8 COMMAND tests_launcher 8 5) + add_test(NAME tst_docks9 COMMAND tests_launcher 9 5) + add_test(NAME tst_docks10 COMMAND tests_launcher 10 5) + add_test(NAME tst_docks11 COMMAND tests_launcher 10 5) + add_test(NAME tst_docks12 COMMAND tests_launcher 11 5) + add_test(NAME tst_docks13 COMMAND tests_launcher 12 5) + add_test(NAME tst_docks14 COMMAND tests_launcher 13 5) + add_test(NAME tst_docks15 COMMAND tests_launcher 14 5) + add_test(NAME tst_docks16 COMMAND tests_launcher 15 5) + add_test(NAME tst_docks17 COMMAND tests_launcher 16 5) + add_test(NAME tst_docks18 COMMAND tests_launcher 17 5) + add_test(NAME tst_docks19 COMMAND tests_launcher 18 5) + add_test(NAME tst_docks20 COMMAND tests_launcher 19 5) + add_test(NAME tst_docks21 COMMAND tests_launcher 20 5) # one more for rounding leftovers + endif() + if(NOT ${PROJECT_NAME}_QTQUICK) + # tst_multisplitter depends on QWidget + add_test(NAME tst_multisplitter COMMAND tst_multisplitter) + endif() - endif() + endif() endif() if(${PROJECT_NAME}_DOCS) - add_subdirectory(docs) # needs to go last, in case there are build source files + add_subdirectory(docs) # needs to go last, in case there are build source files endif() if(${PROJECT_NAME}_IS_ROOT_PROJECT) - # Add uninstall target (not for submodules since parent projects typically have uninstall too) - include(ECMUninstallTarget) + # Add uninstall target (not for submodules since parent projects typically have uninstall too) + include(ECMUninstallTarget) endif() feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES) diff --git a/cmake/InstallLocation.cmake b/cmake/InstallLocation.cmake index f0aa940f..4b20c980 100644 --- a/cmake/InstallLocation.cmake +++ b/cmake/InstallLocation.cmake @@ -9,27 +9,27 @@ include(GNUInstallDirs) if(NOT INSTALL_RUNTIME_DIR) - set(INSTALL_RUNTIME_DIR ${CMAKE_INSTALL_BINDIR}) + set(INSTALL_RUNTIME_DIR ${CMAKE_INSTALL_BINDIR}) endif() if(NOT INSTALL_LIBRARY_DIR) - set(INSTALL_LIBRARY_DIR ${CMAKE_INSTALL_LIBDIR}) + set(INSTALL_LIBRARY_DIR ${CMAKE_INSTALL_LIBDIR}) endif() if(NOT INSTALL_ARCHIVE_DIR) - set(INSTALL_ARCHIVE_DIR ${CMAKE_INSTALL_LIBDIR}) + set(INSTALL_ARCHIVE_DIR ${CMAKE_INSTALL_LIBDIR}) endif() if(NOT INSTALL_INCLUDE_DIR) - set(INSTALL_INCLUDE_DIR ${CMAKE_INSTALL_INCLUDEDIR}) + set(INSTALL_INCLUDE_DIR ${CMAKE_INSTALL_INCLUDEDIR}) endif() if(NOT INSTALL_DATADIR) - set(INSTALL_DATADIR ${CMAKE_INSTALL_DATADIR}) + set(INSTALL_DATADIR ${CMAKE_INSTALL_DATADIR}) endif() if(NOT INSTALL_DOC_DIR) - set(INSTALL_DOC_DIR ${CMAKE_INSTALL_DOCDIR}${KDDockWidgets_LIBRARY_QTID}) + set(INSTALL_DOC_DIR ${CMAKE_INSTALL_DOCDIR}${KDDockWidgets_LIBRARY_QTID}) endif() set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) if(APPLE) - set(CMAKE_MACOSX_RPATH ON) + set(CMAKE_MACOSX_RPATH ON) else() - set(CMAKE_INSTALL_RPATH "$ORIGIN/../${INSTALL_LIBRARY_DIR}") + set(CMAKE_INSTALL_RPATH "$ORIGIN/../${INSTALL_LIBRARY_DIR}") endif() diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt index b0a0897b..eef0e3d9 100644 --- a/docs/CMakeLists.txt +++ b/docs/CMakeLists.txt @@ -11,13 +11,14 @@ # Doxygen find_package(Doxygen) -set_package_properties(Doxygen PROPERTIES - TYPE OPTIONAL - DESCRIPTION "API Documentation system" - URL "https://www.doxygen.org" - PURPOSE "Needed to build the API documentation." +set_package_properties( + Doxygen PROPERTIES + TYPE OPTIONAL + DESCRIPTION "API Documentation system" + URL "https://www.doxygen.org" + PURPOSE "Needed to build the API documentation." ) if(DOXYGEN_FOUND) - add_subdirectory(api) + add_subdirectory(api) endif() diff --git a/docs/api/CMakeLists.txt b/docs/api/CMakeLists.txt index 0d846008..5dfd9b0f 100644 --- a/docs/api/CMakeLists.txt +++ b/docs/api/CMakeLists.txt @@ -11,61 +11,73 @@ # dot should come with Doxygen find_package(Doxygen) if(DOXYGEN_DOT_EXECUTABLE) - set(HAVE_DOT "YES") + set(HAVE_DOT "YES") else() - set(HAVE_DOT "NO") - message(STATUS "Unable to provide inheritance diagrams for the API documentation. To fix, install the graphviz project from https://www.graphviz.org") + set(HAVE_DOT "NO") + message(STATUS "Unable to provide inheritance diagrams for the API documentation. " + "To fix, install the graphviz project from https://www.graphviz.org" + ) endif() # qhelpgenerator -find_program(QHELPGEN_EXECUTABLE qhelpgenerator - HINTS ${QT_INSTALL_BINS} -) +find_program(QHELPGEN_EXECUTABLE qhelpgenerator HINTS ${QT_INSTALL_BINS}) if(QHELPGEN_EXECUTABLE) - set(HAVE_QHELPGEN "YES") + set(HAVE_QHELPGEN "YES") else() - set(HAVE_QHELPGEN "NO") - message(STATUS "Unable to generate the API documentation in qch format. To fix, install the qthelpgenerator program which comes with Qt.") + set(HAVE_QHELPGEN "NO") + message(STATUS "Unable to generate the API documentation in qch format. " + "To fix, install the qthelpgenerator program which comes with Qt." + ) endif() -find_file(QDOC_QTCORE_TAG qtcore.tags - HINTS ${QT_INSTALL_DOCS}/qtcore - HINTS ${QT_INSTALL_DATA}/doc/qtcore -) +find_file(QDOC_QTCORE_TAG qtcore.tags HINTS ${QT_INSTALL_DOCS}/qtcore ${QT_INSTALL_DATA}/doc/qtcore) set(QDOC_TAG_DIR "") if(QDOC_QTCORE_TAG) - get_filename_component(QDOC_TAG_DIR ${QDOC_QTCORE_TAG} DIRECTORY) - get_filename_component(QDOC_TAG_DIR ${QDOC_TAG_DIR} DIRECTORY) + get_filename_component(QDOC_TAG_DIR ${QDOC_QTCORE_TAG} DIRECTORY) + get_filename_component(QDOC_TAG_DIR ${QDOC_TAG_DIR} DIRECTORY) endif() file(GLOB _dox_deps *.dox *.html) set(DOXYGEN_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}) #apidox generation using doxygen -configure_file( - ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.cmake - ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile -) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.cmake ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile) add_custom_command( - OUTPUT ${DOXYGEN_OUTPUT_DIR}/qch/kddockwidgets-api.qch - COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile - #handle a bug in doxygen where image files referred to in markdown are not copied the output - COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/../../screencap.gif ${DOXYGEN_OUTPUT_DIR}/html - #copy some files by-hand that are referred to by the markdown README - COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_SOURCE_DIR}/README-bindings.md ${DOXYGEN_OUTPUT_DIR}/html - COMMAND ${CMAKE_COMMAND} -E make_directory ${DOXYGEN_OUTPUT_DIR}/html/LICENSES - COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_SOURCE_DIR}/LICENSES/GPL-2.0-only.txt ${DOXYGEN_OUTPUT_DIR}/html/LICENSES - COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_SOURCE_DIR}/LICENSES/GPL-3.0-only.txt ${DOXYGEN_OUTPUT_DIR}/html/LICENSES - COMMAND ${CMAKE_COMMAND} -E make_directory ${DOXYGEN_OUTPUT_DIR}/html/docs - COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_SOURCE_DIR}/docs/KDDockWidgets-CopyrightAssignmentForm.pdf ${DOXYGEN_OUTPUT_DIR}/html/docs - COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/examples ${DOXYGEN_OUTPUT_DIR}/html/examples - DEPENDS ${_dox_deps} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile - WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + OUTPUT ${DOXYGEN_OUTPUT_DIR}/qch/kddockwidgets-api.qch + COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile + #handle a bug in doxygen where image files referred to in markdown are not copied the output + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/../../screencap.gif + ${DOXYGEN_OUTPUT_DIR}/html + #copy some files by-hand that are referred to by the markdown README + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_SOURCE_DIR}/README-bindings.md ${DOXYGEN_OUTPUT_DIR}/html + COMMAND ${CMAKE_COMMAND} -E make_directory ${DOXYGEN_OUTPUT_DIR}/html/LICENSES + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_SOURCE_DIR}/LICENSES/GPL-2.0-only.txt + ${DOXYGEN_OUTPUT_DIR}/html/LICENSES + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_SOURCE_DIR}/LICENSES/GPL-3.0-only.txt + ${DOXYGEN_OUTPUT_DIR}/html/LICENSES + COMMAND ${CMAKE_COMMAND} -E make_directory ${DOXYGEN_OUTPUT_DIR}/html/docs + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_SOURCE_DIR}/docs/KDDockWidgets-CopyrightAssignmentForm.pdf + ${DOXYGEN_OUTPUT_DIR}/html/docs + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/examples ${DOXYGEN_OUTPUT_DIR}/html/examples + DEPENDS ${_dox_deps} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + COMMENT "Generate the .qch file" +) +add_custom_target( + kddockwidgets-api.qch ALL + DEPENDS ${DOXYGEN_OUTPUT_DIR}/qch/kddockwidgets-api.qch + COMMENT "Target generate the .qch file" +) +add_custom_target( + docs + DEPENDS kddockwidgets-api.qch + COMMENT "Target to generate the documentation" ) -add_custom_target(kddockwidgets-api.qch ALL DEPENDS ${DOXYGEN_OUTPUT_DIR}/qch/kddockwidgets-api.qch) -add_custom_target(docs DEPENDS kddockwidgets-api.qch) -set(QCH_INSTALL_DIR ${INSTALL_DOC_DIR} CACHE STRING "Install location of Qt Assistant help files.") +set(QCH_INSTALL_DIR + ${INSTALL_DOC_DIR} + CACHE STRING "Install location of Qt Assistant help files." +) install(FILES ${DOXYGEN_OUTPUT_DIR}/qch/kddockwidgets-api.qch DESTINATION ${QCH_INSTALL_DIR}) install(FILES ${DOXYGEN_OUTPUT_DIR}/kddockwidgets.tags DESTINATION ${INSTALL_DOC_DIR}) diff --git a/examples/dockwidgets/CMakeLists.txt b/examples/dockwidgets/CMakeLists.txt index 70a161a1..f43cf557 100644 --- a/examples/dockwidgets/CMakeLists.txt +++ b/examples/dockwidgets/CMakeLists.txt @@ -17,23 +17,15 @@ set(CMAKE_AUTORCC ON) set(CMAKE_INCLUDE_CURRENT_DIRS ON) if(NOT TARGET kddockwidgets) - # This will look for Qt, do find_package yourself manually before - # if you want to look for a specific Qt version for instance. - find_package(KDDockWidgets REQUIRED) + # This will look for Qt, do find_package yourself manually before + # if you want to look for a specific Qt version for instance. + find_package(KDDockWidgets REQUIRED) endif() set(RESOURCES_EXAMPLE_SRC ${CMAKE_CURRENT_SOURCE_DIR}/resources_example.qrc) -add_executable(kddockwidgets_example - main.cpp - MyFrameworkWidgetFactory.cpp - MyMainWindow.cpp - MyWidget.cpp - ${RESOURCES_EXAMPLE_SRC} -) - -target_link_libraries(kddockwidgets_example - PRIVATE - KDAB::kddockwidgets +add_executable( + kddockwidgets_example main.cpp MyFrameworkWidgetFactory.cpp MyMainWindow.cpp MyWidget.cpp ${RESOURCES_EXAMPLE_SRC} ) +target_link_libraries(kddockwidgets_example PRIVATE KDAB::kddockwidgets) diff --git a/examples/mdi_with_docking/CMakeLists.txt b/examples/mdi_with_docking/CMakeLists.txt index de2f23e5..2bb87037 100644 --- a/examples/mdi_with_docking/CMakeLists.txt +++ b/examples/mdi_with_docking/CMakeLists.txt @@ -17,9 +17,9 @@ set(CMAKE_AUTORCC ON) set(CMAKE_INCLUDE_CURRENT_DIRS ON) if(NOT TARGET kddockwidgets) - # This will look for Qt, do find_package yourself manually before - # if you want to look for a specific Qt version for instance. - find_package(KDDockWidgets REQUIRED) + # This will look for Qt, do find_package yourself manually before + # if you want to look for a specific Qt version for instance. + find_package(KDDockWidgets REQUIRED) endif() set(RESOURCES_EXAMPLE_SRC ${CMAKE_CURRENT_SOURCE_DIR}/../dockwidgets/resources_example.qrc) @@ -27,14 +27,6 @@ set(RESOURCES_EXAMPLE_SRC ${CMAKE_CURRENT_SOURCE_DIR}/../dockwidgets/resources_e # Just to reuse MyWidget.h include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../dockwidgets/) -add_executable(kddockwidgets_mdi_with_docking_example - main.cpp - ../dockwidgets/MyWidget.cpp - ${RESOURCES_EXAMPLE_SRC} -) - -target_link_libraries(kddockwidgets_mdi_with_docking_example - PRIVATE - KDAB::kddockwidgets -) +add_executable(kddockwidgets_mdi_with_docking_example main.cpp ../dockwidgets/MyWidget.cpp ${RESOURCES_EXAMPLE_SRC}) +target_link_libraries(kddockwidgets_mdi_with_docking_example PRIVATE KDAB::kddockwidgets) diff --git a/examples/minimal-mdi/CMakeLists.txt b/examples/minimal-mdi/CMakeLists.txt index 240fe7d5..955f6698 100644 --- a/examples/minimal-mdi/CMakeLists.txt +++ b/examples/minimal-mdi/CMakeLists.txt @@ -17,9 +17,9 @@ set(CMAKE_AUTORCC ON) set(CMAKE_INCLUDE_CURRENT_DIRS ON) if(NOT TARGET kddockwidgets) - # This will look for Qt, do find_package yourself manually before - # if you want to look for a specific Qt version for instance. - find_package(KDDockWidgets REQUIRED) + # This will look for Qt, do find_package yourself manually before + # if you want to look for a specific Qt version for instance. + find_package(KDDockWidgets REQUIRED) endif() set(RESOURCES_EXAMPLE_SRC ${CMAKE_CURRENT_SOURCE_DIR}/../dockwidgets/resources_example.qrc) @@ -27,14 +27,6 @@ set(RESOURCES_EXAMPLE_SRC ${CMAKE_CURRENT_SOURCE_DIR}/../dockwidgets/resources_e # Just to reuse MyWidget.h include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../dockwidgets/) -add_executable(kddockwidgets_minimal_mdi_example - main.cpp - ../dockwidgets/MyWidget.cpp - ${RESOURCES_EXAMPLE_SRC} -) - -target_link_libraries(kddockwidgets_minimal_mdi_example - PRIVATE - KDAB::kddockwidgets -) +add_executable(kddockwidgets_minimal_mdi_example main.cpp ../dockwidgets/MyWidget.cpp ${RESOURCES_EXAMPLE_SRC}) +target_link_libraries(kddockwidgets_minimal_mdi_example PRIVATE KDAB::kddockwidgets) diff --git a/examples/minimal/CMakeLists.txt b/examples/minimal/CMakeLists.txt index c1ff9c37..28eaffba 100644 --- a/examples/minimal/CMakeLists.txt +++ b/examples/minimal/CMakeLists.txt @@ -17,21 +17,13 @@ set(CMAKE_AUTORCC ON) set(CMAKE_INCLUDE_CURRENT_DIRS ON) if(NOT TARGET kddockwidgets) - # This will look for Qt, do find_package yourself manually before - # if you want to look for a specific Qt version for instance. - find_package(KDDockWidgets REQUIRED) + # This will look for Qt, do find_package yourself manually before + # if you want to look for a specific Qt version for instance. + find_package(KDDockWidgets REQUIRED) endif() set(RESOURCES_EXAMPLE_SRC ${CMAKE_CURRENT_SOURCE_DIR}/../dockwidgets/resources_example.qrc) -add_executable(kddockwidgets_minimal_example - main.cpp - ../dockwidgets/MyWidget.cpp - ${RESOURCES_EXAMPLE_SRC} -) - -target_link_libraries(kddockwidgets_minimal_example - PRIVATE - KDAB::kddockwidgets -) +add_executable(kddockwidgets_minimal_example main.cpp ../dockwidgets/MyWidget.cpp ${RESOURCES_EXAMPLE_SRC}) +target_link_libraries(kddockwidgets_minimal_example PRIVATE KDAB::kddockwidgets) diff --git a/examples/qtquick/customtitlebar/CMakeLists.txt b/examples/qtquick/customtitlebar/CMakeLists.txt index 7ba665f2..96053041 100644 --- a/examples/qtquick/customtitlebar/CMakeLists.txt +++ b/examples/qtquick/customtitlebar/CMakeLists.txt @@ -17,21 +17,15 @@ set(CMAKE_AUTORCC ON) set(CMAKE_INCLUDE_CURRENT_DIRS ON) if(NOT TARGET kddockwidgets) - # This will look for Qt, do find_package yourself manually before - # if you want to look for a specific Qt version for instance. - find_package(KDDockWidgets REQUIRED) + # This will look for Qt, do find_package yourself manually before + # if you want to look for a specific Qt version for instance. + find_package(KDDockWidgets REQUIRED) endif() -set(RESOURCES_EXAMPLE_SRC - ${CMAKE_CURRENT_SOURCE_DIR}/resources_qtquick_example.qrc - ${CMAKE_CURRENT_SOURCE_DIR}/../../dockwidgets/resources_example.qrc) - -add_executable(kddockwidgets_customtitlebar_quick - main.cpp - ${RESOURCES_EXAMPLE_SRC} +set(RESOURCES_EXAMPLE_SRC ${CMAKE_CURRENT_SOURCE_DIR}/resources_qtquick_example.qrc + ${CMAKE_CURRENT_SOURCE_DIR}/../../dockwidgets/resources_example.qrc ) -target_link_libraries(kddockwidgets_customtitlebar_quick - PRIVATE - KDAB::kddockwidgets -) +add_executable(kddockwidgets_customtitlebar_quick main.cpp ${RESOURCES_EXAMPLE_SRC}) + +target_link_libraries(kddockwidgets_customtitlebar_quick PRIVATE KDAB::kddockwidgets) diff --git a/examples/qtquick/dockwidgets/CMakeLists.txt b/examples/qtquick/dockwidgets/CMakeLists.txt index 2d52fbcd..fcefc9f3 100644 --- a/examples/qtquick/dockwidgets/CMakeLists.txt +++ b/examples/qtquick/dockwidgets/CMakeLists.txt @@ -17,21 +17,15 @@ set(CMAKE_AUTORCC ON) set(CMAKE_INCLUDE_CURRENT_DIRS ON) if(NOT TARGET kddockwidgets) - # This will look for Qt, do find_package yourself manually before - # if you want to look for a specific Qt version for instance. - find_package(KDDockWidgets REQUIRED) + # This will look for Qt, do find_package yourself manually before + # if you want to look for a specific Qt version for instance. + find_package(KDDockWidgets REQUIRED) endif() -set(RESOURCES_EXAMPLE_SRC - ${CMAKE_CURRENT_SOURCE_DIR}/resources_qtquick_example.qrc - ${CMAKE_CURRENT_SOURCE_DIR}/../../dockwidgets/resources_example.qrc) - -add_executable(kddockwidgets_example_quick - main.cpp - ${RESOURCES_EXAMPLE_SRC} +set(RESOURCES_EXAMPLE_SRC ${CMAKE_CURRENT_SOURCE_DIR}/resources_qtquick_example.qrc + ${CMAKE_CURRENT_SOURCE_DIR}/../../dockwidgets/resources_example.qrc ) -target_link_libraries(kddockwidgets_example_quick - PRIVATE - KDAB::kddockwidgets -) +add_executable(kddockwidgets_example_quick main.cpp ${RESOURCES_EXAMPLE_SRC}) + +target_link_libraries(kddockwidgets_example_quick PRIVATE KDAB::kddockwidgets) diff --git a/examples/qtquick/mdi/CMakeLists.txt b/examples/qtquick/mdi/CMakeLists.txt index 4380750b..b27ff9de 100644 --- a/examples/qtquick/mdi/CMakeLists.txt +++ b/examples/qtquick/mdi/CMakeLists.txt @@ -17,21 +17,15 @@ set(CMAKE_AUTORCC ON) set(CMAKE_INCLUDE_CURRENT_DIRS ON) if(NOT TARGET kddockwidgets) - # This will look for Qt, do find_package yourself manually before - # if you want to look for a specific Qt version for instance. - find_package(KDDockWidgets REQUIRED) + # This will look for Qt, do find_package yourself manually before + # if you want to look for a specific Qt version for instance. + find_package(KDDockWidgets REQUIRED) endif() -set(RESOURCES_EXAMPLE_SRC - ${CMAKE_CURRENT_SOURCE_DIR}/resources_qtquick_mdi_example.qrc - ${CMAKE_CURRENT_SOURCE_DIR}/../../dockwidgets/resources_example.qrc) - -add_executable(kddockwidgets_example_mdi_quick - main.cpp - ${RESOURCES_EXAMPLE_SRC} +set(RESOURCES_EXAMPLE_SRC ${CMAKE_CURRENT_SOURCE_DIR}/resources_qtquick_mdi_example.qrc + ${CMAKE_CURRENT_SOURCE_DIR}/../../dockwidgets/resources_example.qrc ) -target_link_libraries(kddockwidgets_example_mdi_quick - PRIVATE - KDAB::kddockwidgets -) +add_executable(kddockwidgets_example_mdi_quick main.cpp ${RESOURCES_EXAMPLE_SRC}) + +target_link_libraries(kddockwidgets_example_mdi_quick PRIVATE KDAB::kddockwidgets) diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index 36bf1bc5..b0c41013 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -12,19 +12,19 @@ set(PYTHON_BINDING_NAMESPACE "PyKDDockWidgets") # Just to fix warnings with --warn-uninitialized if(NOT DEFINED SHIBOKEN_CUSTOM_PREFIX) #look for shiboken in a custom location - set(SHIBOKEN_CUSTOM_PREFIX "") + set(SHIBOKEN_CUSTOM_PREFIX "") endif() if(NOT DEFINED PYSIDE_CUSTOM_PREFIX) #look for pyside in a custom location - set(PYSIDE_CUSTOM_PREFIX "") + set(PYSIDE_CUSTOM_PREFIX "") endif() if(${PROJECT_NAME}_QT6) - set(PYSIDE_MAJOR_VERSION "6") - set(PYTHON_BINDING_NAMESPACE "${PYTHON_BINDING_NAMESPACE}Qt${PYSIDE_MAJOR_VERSION}") - set(QtWidgets_VERSION ${Qt6Widgets_VERSION}) + set(PYSIDE_MAJOR_VERSION "6") + set(PYTHON_BINDING_NAMESPACE "${PYTHON_BINDING_NAMESPACE}Qt${PYSIDE_MAJOR_VERSION}") + set(QtWidgets_VERSION ${Qt6Widgets_VERSION}) else() - set(PYSIDE_MAJOR_VERSION "2") - set(QtWidgets_VERSION ${Qt5Widgets_VERSION}) + set(PYSIDE_MAJOR_VERSION "2") + set(QtWidgets_VERSION ${Qt5Widgets_VERSION}) endif() find_package(Python3 3.7 REQUIRED COMPONENTS Interpreter Development) @@ -32,13 +32,14 @@ find_package(Shiboken${PYSIDE_MAJOR_VERSION} REQUIRED) find_package(PySide${PYSIDE_MAJOR_VERSION} ${QtWidgets_VERSION} EXACT REQUIRED) if(NOT ${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX) - set(${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + set(${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") endif() -set(BINDINGS_DIR "${INSTALL_LIBRARY_DIR}/python${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR}/site-packages/${PYTHON_BINDING_NAMESPACE}") +set(Python3_VERSION_MAJORMINOR "${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR}") +set(BINDINGS_DIR "${INSTALL_LIBRARY_DIR}/python${Python3_VERSION_MAJORMINOR}/site-packages/${PYTHON_BINDING_NAMESPACE}") set(${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX "${${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX}/${BINDINGS_DIR}") include(PySide${PYSIDE_MAJOR_VERSION}ModuleBuild) add_subdirectory(PyKDDockWidgets) if(${PROJECT_NAME}_TESTS) - add_subdirectory(tests) + add_subdirectory(tests) endif() diff --git a/python/PyKDDockWidgets/CMakeLists.txt b/python/PyKDDockWidgets/CMakeLists.txt index cd95f949..48e5995b 100644 --- a/python/PyKDDockWidgets/CMakeLists.txt +++ b/python/PyKDDockWidgets/CMakeLists.txt @@ -35,65 +35,47 @@ set(PyKDDockWidgets_include_paths ) # A list of paths where shiboken should look for typesystem -set(PyKDDockWidgets_typesystem_paths - # PySide path, this variable was exposed by FindPySide2.cmake +set(PyKDDockWidgets_typesystem_paths # PySide path, this variable was exposed by FindPySide2.cmake ${PYSIDE_TYPESYSTEMS} ) # Include flags/path that will be set in 'target_include_directories' -set(PyKDDockWidgets_target_include_directories - ${CMAKE_SOURCE_DIR}/src -) +set(PyKDDockWidgets_target_include_directories ${CMAKE_SOURCE_DIR}/src) # Libraries that will be necessary to link the target, this will used in the command 'target_link_libraries' -set(PyKDDockWidgets_target_link_libraries - KDAB::kddockwidgets - Qt${Qt_VERSION_MAJOR}::Core - Qt${Qt_VERSION_MAJOR}::Gui - Qt${Qt_VERSION_MAJOR}::Widgets - ${Python3_LIBRARIES} +set(PyKDDockWidgets_target_link_libraries KDAB::kddockwidgets Qt${Qt_VERSION_MAJOR}::Core Qt${Qt_VERSION_MAJOR}::Gui + Qt${Qt_VERSION_MAJOR}::Widgets ${Python3_LIBRARIES} ) # changes on these files should trigger a new generation set(PyKDDockWidgets_DEPENDS - ${CMAKE_CURRENT_SOURCE_DIR}/kddockwidgets_global.h - ${CMAKE_SOURCE_DIR}/src/DockWidgetBase.h - ${CMAKE_SOURCE_DIR}/src/DockWidget.h - ${CMAKE_SOURCE_DIR}/src/MainWindowBase.h - ${CMAKE_SOURCE_DIR}/src/MainWindow.h + ${CMAKE_CURRENT_SOURCE_DIR}/kddockwidgets_global.h ${CMAKE_SOURCE_DIR}/src/DockWidgetBase.h + ${CMAKE_SOURCE_DIR}/src/DockWidget.h ${CMAKE_SOURCE_DIR}/src/MainWindowBase.h ${CMAKE_SOURCE_DIR}/src/MainWindow.h ${CMAKE_SOURCE_DIR}/src/LayoutSaver.h ) create_python_bindings( - "KDDockWidgets" - "${PyKDDockWidgets_typesystem_paths}" - "${PyKDDockWidgets_include_paths}" - "${PyKDDockWidgets_SRC}" - "${PyKDDockWidgets_target_include_directories}" - "${PyKDDockWidgets_target_link_libraries}" - ${CMAKE_CURRENT_SOURCE_DIR}/kddockwidgets_global.h - ${CMAKE_CURRENT_SOURCE_DIR}/typesystem_kddockwidgets.xml - "${PyKDDockWidgets_DEPENDS}" - ${CMAKE_CURRENT_BINARY_DIR} + "KDDockWidgets" + "${PyKDDockWidgets_typesystem_paths}" + "${PyKDDockWidgets_include_paths}" + "${PyKDDockWidgets_SRC}" + "${PyKDDockWidgets_target_include_directories}" + "${PyKDDockWidgets_target_link_libraries}" + ${CMAKE_CURRENT_SOURCE_DIR}/kddockwidgets_global.h + ${CMAKE_CURRENT_SOURCE_DIR}/typesystem_kddockwidgets.xml + "${PyKDDockWidgets_DEPENDS}" + ${CMAKE_CURRENT_BINARY_DIR} ) # Make module import from build dir work configure_file(${CMAKE_CURRENT_SOURCE_DIR}/__init__.py.cmake ${CMAKE_CURRENT_BINARY_DIR}/__init__.py @ONLY) # install -install( - FILES - ${CMAKE_CURRENT_BINARY_DIR}/__init__.py - $ - DESTINATION - ${${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX} +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/__init__.py $ + DESTINATION ${${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX} ) if(NOT WIN32) - install( - FILES - $ - $ - DESTINATION - ${${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX} - ) + install(FILES $ $ + DESTINATION ${${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX} + ) endif() diff --git a/python/tests/CMakeLists.txt b/python/tests/CMakeLists.txt index e189bb53..65005268 100644 --- a/python/tests/CMakeLists.txt +++ b/python/tests/CMakeLists.txt @@ -11,30 +11,26 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.py.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.py @ONLY) -set(TEST_PYTHONPATH - ${CMAKE_BINARY_DIR}/python - ${CMAKE_CURRENT_BINARY_DIR} -) +set(TEST_PYTHONPATH ${CMAKE_BINARY_DIR}/python ${CMAKE_CURRENT_BINARY_DIR}) set(TEST_LIBRARYPATH ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) if(WIN32) - set(TEST_LIBRARY_VAR "PATH") - string(REPLACE "\\" "/" TEST_PYTHONPATH "${TEST_PYTHONPATH}") - string(REPLACE "\\" "/" TEST_LIBRARYPATH "${TEST_LIBRARYPATH}") - list(JOIN TEST_PYTHONPATH "\\;" TEST_PYTHONPATH) - list(JOIN TEST_LIBRARYPATH "\\;" TEST_LIBRARYPATH) + set(TEST_LIBRARY_VAR "PATH") + string(REPLACE "\\" "/" TEST_PYTHONPATH "${TEST_PYTHONPATH}") + string(REPLACE "\\" "/" TEST_LIBRARYPATH "${TEST_LIBRARYPATH}") + list(JOIN TEST_PYTHONPATH "\\;" TEST_PYTHONPATH) + list(JOIN TEST_LIBRARYPATH "\\;" TEST_LIBRARYPATH) else() - set(TEST_LIBRARY_VAR "LD_LIBRARY_PATH") - list(JOIN TEST_PYTHONPATH ":" TEST_PYTHONPATH) - list(JOIN TEST_LIBRARYPATH ":" TEST_LIBRARYPATH) + set(TEST_LIBRARY_VAR "LD_LIBRARY_PATH") + list(JOIN TEST_PYTHONPATH ":" TEST_PYTHONPATH) + list(JOIN TEST_LIBRARYPATH ":" TEST_LIBRARYPATH) endif() set(PYTHON_ENV_COMMON "PYTHONPATH=${TEST_PYTHONPATH};${TEST_LIBRARY_VAR}=${TEST_LIBRARYPATH}") file(GLOB TEST_FILES ${CMAKE_CURRENT_SOURCE_DIR}/tst_*.py) foreach(test_file ${TEST_FILES}) - get_filename_component(test_name ${test_file} NAME_WE) - add_test(${test_name} ${Python3_EXECUTABLE} ${test_file}) - set_tests_properties(${test_name} PROPERTIES ENVIRONMENT "${PYTHON_ENV_COMMON}") + get_filename_component(test_name ${test_file} NAME_WE) + add_test(${test_name} ${Python3_EXECUTABLE} ${test_file}) + set_tests_properties(${test_name} PROPERTIES ENVIRONMENT "${PYTHON_ENV_COMMON}") endforeach() - diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 3b5d8c6f..c26f8ff7 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -10,15 +10,12 @@ # if(POLICY CMP0043) - cmake_policy(SET CMP0043 NEW) + cmake_policy(SET CMP0043 NEW) endif() -add_definitions(-DQT_NO_SIGNALS_SLOTS_KEYWORDS - -DQT_USE_QSTRINGBUILDER - -DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT - -DQT_STRICT_ITERATORS - -DQT_NO_KEYWORDS - -DQT_NO_FOREACH +add_definitions( + -DQT_NO_SIGNALS_SLOTS_KEYWORDS -DQT_USE_QSTRINGBUILDER -DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT + -DQT_STRICT_ITERATORS -DQT_NO_KEYWORDS -DQT_NO_FOREACH ) set(DOCKSLIBS_SRCS @@ -83,7 +80,6 @@ set(DOCKSLIBS_SRCS private/indicators/ClassicIndicators_p.h private/indicators/ClassicIndicatorsWindow.cpp private/indicators/ClassicIndicatorsWindow_p.h - private/multisplitter/Item.cpp private/multisplitter/Item_p.h private/multisplitter/ItemFreeContainer.cpp @@ -142,97 +138,94 @@ set(DOCKS_INSTALLABLE_PRIVATE_WIDGET_INCLUDES private/widgets/TabWidgetWidget_p.h ) -set(DOCKS_INSTALLABLE_PRIVATE_QUICK_INCLUDES - private/quick/QWidgetAdapter_quick_p.h -) +set(DOCKS_INSTALLABLE_PRIVATE_QUICK_INCLUDES private/quick/QWidgetAdapter_quick_p.h) if(${PROJECT_NAME}_QTQUICK) - set(DOCKSLIBS_SRCS ${DOCKSLIBS_SRCS} - DockWidgetQuick.cpp - DockWidgetQuick.h - private/quick/DockWidgetInstantiator.cpp - private/quick/DockWidgetInstantiator_p.h - private/quick/QWidgetAdapter_quick.cpp - private/quick/QWidgetAdapter_quick_p.h - private/quick/FloatingWindowQuick.cpp - private/quick/FloatingWindowQuick_p.h - private/quick/TabWidgetQuick.cpp - private/quick/TabWidgetQuick_p.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/Widget_quick.cpp - private/multisplitter/Widget_quick.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(DOCKSLIBS_SRCS + ${DOCKSLIBS_SRCS} + DockWidgetQuick.cpp + DockWidgetQuick.h + private/quick/DockWidgetInstantiator.cpp + private/quick/DockWidgetInstantiator_p.h + private/quick/QWidgetAdapter_quick.cpp + private/quick/QWidgetAdapter_quick_p.h + private/quick/FloatingWindowQuick.cpp + private/quick/FloatingWindowQuick_p.h + private/quick/TabWidgetQuick.cpp + private/quick/TabWidgetQuick_p.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/Widget_quick.cpp + private/multisplitter/Widget_quick.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_INCLUDES ${DOCKS_INSTALLABLE_INCLUDES} DockWidgetQuick.h) else() - set(DOCKSLIBS_SRCS ${DOCKSLIBS_SRCS} - private/DebugWindow.cpp - private/DebugWindow_p.h - private/ObjectViewer.cpp - private/ObjectViewer_p.h - MainWindow.cpp - MainWindow.h - DockWidget.h - private/multisplitter/Widget_qwidget.cpp - private/multisplitter/Widget_qwidget.h - private/multisplitter/Separator_qwidget.cpp - private/multisplitter/Separator_qwidget.h - 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/TitleBarWidget.cpp - private/widgets/TitleBarWidget_p.h - private/widgets/DockWidget.cpp - private/widgets/QWidgetAdapter_widgets.cpp - private/widgets/QWidgetAdapter_widgets_p.h - private/indicators/SegmentedIndicators.cpp - private/indicators/SegmentedIndicators_p.h - # private/indicators/AnimatedIndicators.cpp - ) + set(DOCKSLIBS_SRCS + ${DOCKSLIBS_SRCS} + private/DebugWindow.cpp + private/DebugWindow_p.h + private/ObjectViewer.cpp + private/ObjectViewer_p.h + MainWindow.cpp + MainWindow.h + DockWidget.h + private/multisplitter/Widget_qwidget.cpp + private/multisplitter/Widget_qwidget.h + private/multisplitter/Separator_qwidget.cpp + private/multisplitter/Separator_qwidget.h + 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/TitleBarWidget.cpp + private/widgets/TitleBarWidget_p.h + private/widgets/DockWidget.cpp + private/widgets/QWidgetAdapter_widgets.cpp + private/widgets/QWidgetAdapter_widgets_p.h + private/indicators/SegmentedIndicators.cpp + private/indicators/SegmentedIndicators_p.h + # private/indicators/AnimatedIndicators.cpp + ) - set(DOCKS_INSTALLABLE_INCLUDES - ${DOCKS_INSTALLABLE_INCLUDES} - MainWindow.h - DockWidget.h - MDIArea.h - ) + set(DOCKS_INSTALLABLE_INCLUDES ${DOCKS_INSTALLABLE_INCLUDES} MainWindow.h DockWidget.h MDIArea.h) endif() #Generate C/C++ CamelCase forwarding headers (only public includes) include(ECMGenerateHeaders) -ecm_generate_headers(camelcase_HEADERS - ORIGINAL +ecm_generate_headers( + camelcase_HEADERS + ORIGINAL CAMELCASE - HEADER_NAMES + HEADER_NAMES Config DockWidget DockWidgetBase @@ -252,137 +245,178 @@ set_target_properties(kddockwidgets PROPERTIES OUTPUT_NAME "kddockwidgets${KDDoc set_compiler_flags(kddockwidgets) if(${PROJECT_NAME}_QT6) - set(DOCKS_INCLUDES_INSTALL_PATH "include/kddockwidgets-qt6") + set(DOCKS_INCLUDES_INSTALL_PATH "include/kddockwidgets-qt6") else() - set(DOCKS_INCLUDES_INSTALL_PATH "include/") + set(DOCKS_INCLUDES_INSTALL_PATH "include/") endif() - -target_include_directories(kddockwidgets - PUBLIC - $ - $ - PRIVATE - ${CMAKE_CURRENT_SOURCE_DIR} +target_include_directories( + kddockwidgets + PUBLIC $ + $ + PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ) -target_compile_definitions(kddockwidgets - PRIVATE - QT_NO_CAST_TO_ASCII - QT_NO_CAST_FROM_ASCII - QT_NO_URL_CAST_FROM_STRING - QT_NO_CAST_FROM_BYTEARRAY +target_compile_definitions( + kddockwidgets PRIVATE QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII QT_NO_URL_CAST_FROM_STRING + QT_NO_CAST_FROM_BYTEARRAY ) if(${PROJECT_NAME}_STATIC) - target_compile_definitions(kddockwidgets PUBLIC KDDOCKWIDGETS_STATICLIB) + target_compile_definitions(kddockwidgets PUBLIC KDDOCKWIDGETS_STATICLIB) else() - target_compile_definitions(kddockwidgets PRIVATE BUILDING_DOCKS_LIBRARY) + target_compile_definitions(kddockwidgets PRIVATE BUILDING_DOCKS_LIBRARY) endif() if(KDDockWidgets_QTQUICK) - target_compile_definitions(kddockwidgets PUBLIC KDDOCKWIDGETS_QTQUICK) + target_compile_definitions(kddockwidgets PUBLIC KDDOCKWIDGETS_QTQUICK) endif() if(CMAKE_COMPILER_IS_GNUCXX OR IS_CLANG_BUILD) - target_compile_options(kddockwidgets PRIVATE -Wshadow) - if(NOT MSVC) - target_compile_options(kddockwidgets PRIVATE -fvisibility=hidden) - endif() + target_compile_options(kddockwidgets PRIVATE -Wshadow) + if(NOT MSVC) + target_compile_options(kddockwidgets PRIVATE -fvisibility=hidden) + endif() - # Disable -Wconversion for Qt6. The qsizetype to int conversions are harmless - if(NOT ${PROJECT_NAME}_QT6) - target_compile_options(kddockwidgets PRIVATE -Wconversion) - endif() + # Disable -Wconversion for Qt6. The qsizetype to int conversions are harmless + if(NOT ${PROJECT_NAME}_QT6) + target_compile_options(kddockwidgets PRIVATE -Wconversion) + endif() - if(IS_CLANG_BUILD) - target_compile_options(kddockwidgets PRIVATE -Wweak-vtables) - endif() + if(IS_CLANG_BUILD) + target_compile_options(kddockwidgets PRIVATE -Wweak-vtables) + endif() endif() if(${PROJECT_NAME}_QTQUICK) - target_link_libraries(kddockwidgets PUBLIC Qt${Qt_VERSION_MAJOR}::Widgets Qt${Qt_VERSION_MAJOR}::Quick Qt${Qt_VERSION_MAJOR}::QuickControls2 PRIVATE Qt${Qt_VERSION_MAJOR}::GuiPrivate) + target_link_libraries( + kddockwidgets + PUBLIC Qt${Qt_VERSION_MAJOR}::Widgets Qt${Qt_VERSION_MAJOR}::Quick Qt${Qt_VERSION_MAJOR}::QuickControls2 + PRIVATE Qt${Qt_VERSION_MAJOR}::GuiPrivate + ) else() - target_link_libraries(kddockwidgets PUBLIC Qt${Qt_VERSION_MAJOR}::Widgets PRIVATE Qt${Qt_VERSION_MAJOR}::WidgetsPrivate) + target_link_libraries( + kddockwidgets + PUBLIC Qt${Qt_VERSION_MAJOR}::Widgets + PRIVATE Qt${Qt_VERSION_MAJOR}::WidgetsPrivate + ) endif() if(WIN32) - target_link_libraries(kddockwidgets PRIVATE Qt${Qt_VERSION_MAJOR}::GuiPrivate dwmapi) -elseif(NOT APPLE AND NOT EMSCRIPTEN AND NOT ${PROJECT_NAME}_QT6 AND ${PROJECT_NAME}_X11EXTRAS) - find_package(Qt${Qt_VERSION_MAJOR}X11Extras) - target_link_libraries(kddockwidgets PUBLIC Qt${Qt_VERSION_MAJOR}::X11Extras) + target_link_libraries(kddockwidgets PRIVATE Qt${Qt_VERSION_MAJOR}::GuiPrivate dwmapi) +elseif( + NOT APPLE + AND NOT EMSCRIPTEN + AND NOT ${PROJECT_NAME}_QT6 + AND ${PROJECT_NAME}_X11EXTRAS +) + find_package(Qt${Qt_VERSION_MAJOR}X11Extras) + target_link_libraries(kddockwidgets PUBLIC Qt${Qt_VERSION_MAJOR}::X11Extras) endif() if(${PROJECT_NAME}_XLib) - target_link_libraries(kddockwidgets PRIVATE X11) + target_link_libraries(kddockwidgets PRIVATE X11) endif() -set_target_properties(kddockwidgets PROPERTIES - SOVERSION ${${PROJECT_NAME}_SOVERSION} - VERSION ${${PROJECT_NAME}_VERSION} +set_target_properties( + kddockwidgets PROPERTIES SOVERSION ${${PROJECT_NAME}_SOVERSION} VERSION ${${PROJECT_NAME}_VERSION} ) #version libraries on Windows if(WIN32) - if(CMAKE_BUILD_TYPE) - set(postfix ${${PROJECT_NAME}_VERSION_MAJOR}) - string(TOUPPER ${CMAKE_BUILD_TYPE} UPPER_BUILD_TYPE) - if(${UPPER_BUILD_TYPE} MATCHES "^DEBUG") - string(CONCAT postfix ${postfix} "d") - set_target_properties(kddockwidgets PROPERTIES DEBUG_POSTFIX ${postfix}) - else() - set_target_properties(kddockwidgets PROPERTIES ${UPPER_BUILD_TYPE}_POSTFIX ${postfix}) + if(CMAKE_BUILD_TYPE) + set(postfix ${${PROJECT_NAME}_VERSION_MAJOR}) + string(TOUPPER ${CMAKE_BUILD_TYPE} UPPER_BUILD_TYPE) + if(${UPPER_BUILD_TYPE} MATCHES "^DEBUG") + string(CONCAT postfix ${postfix} "d") + set_target_properties(kddockwidgets PROPERTIES DEBUG_POSTFIX ${postfix}) + else() + set_target_properties(kddockwidgets PROPERTIES ${UPPER_BUILD_TYPE}_POSTFIX ${postfix}) + endif() + elseif(CMAKE_CONFIGURATION_TYPES) + # Visual Studio generator + set_target_properties(kddockwidgets PROPERTIES DEBUG_POSTFIX d) endif() - elseif(CMAKE_CONFIGURATION_TYPES) - # Visual Studio generator - set_target_properties(kddockwidgets PROPERTIES DEBUG_POSTFIX d) - endif() endif() -install(TARGETS kddockwidgets - EXPORT kddockwidgetsTargets - RUNTIME DESTINATION ${INSTALL_RUNTIME_DIR} - LIBRARY DESTINATION ${INSTALL_LIBRARY_DIR} - ARCHIVE DESTINATION ${INSTALL_ARCHIVE_DIR} +install( + TARGETS kddockwidgets + EXPORT kddockwidgetsTargets + RUNTIME DESTINATION ${INSTALL_RUNTIME_DIR} + LIBRARY DESTINATION ${INSTALL_LIBRARY_DIR} + ARCHIVE DESTINATION ${INSTALL_ARCHIVE_DIR} ) if(MSVC AND NOT ${PROJECT_NAME}_STATIC) - install(FILES "$/$" DESTINATION ${INSTALL_LIBRARY_DIR} CONFIGURATIONS Debug RelWithDebInfo) + install( + FILES "$/$" + DESTINATION ${INSTALL_LIBRARY_DIR} + CONFIGURATIONS Debug RelWithDebInfo + ) endif() install(FILES ${camelcase_HEADERS} DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets) install(FILES ${DOCKS_INSTALLABLE_INCLUDES} DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets) install(FILES ${DOCKS_INSTALLABLE_PRIVATE_INCLUDES} DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets/private) -install(FILES private/multisplitter/Item_p.h DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets/private/multisplitter) -install(FILES private/multisplitter/Widget.h DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets/private/multisplitter) -install(FILES private/multisplitter/Separator_p.h DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets/private/multisplitter) -install(FILES private/indicators/ClassicIndicators_p.h DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets/private/indicators) -install(FILES private/indicators/SegmentedIndicators_p.h DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets/private/indicators) +install(FILES private/multisplitter/Item_p.h + DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets/private/multisplitter +) +install(FILES private/multisplitter/Widget.h + DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets/private/multisplitter +) +install(FILES private/multisplitter/Separator_p.h + DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets/private/multisplitter +) +install(FILES private/indicators/ClassicIndicators_p.h + DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets/private/indicators +) +install(FILES private/indicators/SegmentedIndicators_p.h + DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets/private/indicators +) if(KDDockWidgets_QTQUICK) - install(FILES ${DOCKS_INSTALLABLE_PRIVATE_QUICK_INCLUDES} DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets/private/quick) - install(FILES private/multisplitter/Separator_quick.h DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets/private/multisplitter) - install(FILES private/multisplitter/Widget_quick.h DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets/private/multisplitter) + install(FILES ${DOCKS_INSTALLABLE_PRIVATE_QUICK_INCLUDES} + DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets/private/quick + ) + install(FILES private/multisplitter/Separator_quick.h + DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets/private/multisplitter + ) + install(FILES private/multisplitter/Widget_quick.h + DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets/private/multisplitter + ) else() - install(FILES ${DOCKS_INSTALLABLE_PRIVATE_WIDGET_INCLUDES} DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets/private/widgets) - install(FILES private/multisplitter/Separator_qwidget.h DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets/private/multisplitter) - install(FILES private/multisplitter/Widget_qwidget.h DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets/private/multisplitter) + install(FILES ${DOCKS_INSTALLABLE_PRIVATE_WIDGET_INCLUDES} + DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets/private/widgets + ) + install(FILES private/multisplitter/Separator_qwidget.h + DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets/private/multisplitter + ) + install(FILES private/multisplitter/Widget_qwidget.h + DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets/private/multisplitter + ) endif() # Generate library version files include(ECMSetupVersion) ecm_setup_version( - ${${PROJECT_NAME}_VERSION} - VARIABLE_PREFIX KDDOCKWIDGETS - VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/kddockwidgets_version.h" - PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KDDockWidgets${KDDockWidgets_LIBRARY_QTID}ConfigVersion.cmake" - SOVERSION ${${PROJECT_NAME}_SOVERSION} - COMPATIBILITY AnyNewerVersion + ${${PROJECT_NAME}_VERSION} + VARIABLE_PREFIX + KDDOCKWIDGETS + VERSION_HEADER + "${CMAKE_CURRENT_BINARY_DIR}/kddockwidgets_version.h" + PACKAGE_VERSION_FILE + "${CMAKE_CURRENT_BINARY_DIR}/KDDockWidgets${KDDockWidgets_LIBRARY_QTID}ConfigVersion.cmake" + SOVERSION + ${${PROJECT_NAME}_SOVERSION} + COMPATIBILITY + AnyNewerVersion ) -install(FILES "${CMAKE_CURRENT_BINARY_DIR}/kddockwidgets_version.h" DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets) - -install(EXPORT kddockwidgetsTargets - FILE KDDockWidgets${KDDockWidgets_LIBRARY_QTID}Targets.cmake - NAMESPACE KDAB:: - DESTINATION ${INSTALL_LIBRARY_DIR}/cmake/KDDockWidgets${KDDockWidgets_LIBRARY_QTID} +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/kddockwidgets_version.h" + DESTINATION ${DOCKS_INCLUDES_INSTALL_PATH}/kddockwidgets +) +install( + EXPORT kddockwidgetsTargets + FILE KDDockWidgets${KDDockWidgets_LIBRARY_QTID}Targets.cmake + NAMESPACE KDAB:: + DESTINATION ${INSTALL_LIBRARY_DIR}/cmake/KDDockWidgets${KDDockWidgets_LIBRARY_QTID} ) configure_file(KDDockWidgetsConfig.cmake.in KDDockWidgets${KDDockWidgets_LIBRARY_QTID}Config.cmake @ONLY) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/KDDockWidgets${KDDockWidgets_LIBRARY_QTID}Config.cmake" @@ -391,14 +425,14 @@ install(FILES "${CMAKE_CURRENT_BINARY_DIR}/KDDockWidgets${KDDockWidgets_LIBRARY_ ) if(${PROJECT_NAME}_DEVELOPER_MODE) - # Under developer mode since kddw might be a sub-folder of a project setting a different value for QT_DISABLE_DEPRECATED_BEFORE - target_compile_definitions(kddockwidgets PRIVATE QT_DISABLE_DEPRECATED_BEFORE=0x060000) + # Under developer mode since kddw might be a sub-folder of a project + # setting a different value for QT_DISABLE_DEPRECATED_BEFORE + target_compile_definitions(kddockwidgets PRIVATE QT_DISABLE_DEPRECATED_BEFORE=0x060000) - option(KDDockWidgets_LINTER "Build the layout linter" ON) - - if(NOT ${PROJECT_NAME}_QTQUICK AND KDDockWidgets_LINTER) # TODO: We can support it - add_executable(kddockwidgets_linter layoutlinter_main.cpp) - target_link_libraries(kddockwidgets_linter kddockwidgets Qt${Qt_VERSION_MAJOR}::Widgets) - endif() + option(KDDockWidgets_LINTER "Build the layout linter" ON) + if(NOT ${PROJECT_NAME}_QTQUICK AND KDDockWidgets_LINTER) # TODO: We can support it + add_executable(kddockwidgets_linter layoutlinter_main.cpp) + target_link_libraries(kddockwidgets_linter kddockwidgets Qt${Qt_VERSION_MAJOR}::Widgets) + endif() endif() diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 9f9c3a4c..df890e9a 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -14,7 +14,7 @@ # 2. tests_launcher - helper executable to paralelize the execution of tests if(POLICY CMP0043) - cmake_policy(SET CMP0043 NEW) + cmake_policy(SET CMP0043 NEW) endif() include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../src) @@ -38,12 +38,12 @@ target_link_libraries(tst_docks kddockwidgets Qt${Qt_VERSION_MAJOR}::Test) set_compiler_flags(tst_docks) if(NOT ${PROJECT_NAME}_QTQUICK) - add_executable(tst_multisplitter tst_multisplitter.cpp) - target_link_libraries(tst_multisplitter kddockwidgets Qt${Qt_VERSION_MAJOR}::Test) - set_compiler_flags(tst_multisplitter) - if(KDDockWidgets_FUZZER) - add_subdirectory(fuzzer) - endif() + add_executable(tst_multisplitter tst_multisplitter.cpp) + target_link_libraries(tst_multisplitter kddockwidgets Qt${Qt_VERSION_MAJOR}::Test) + set_compiler_flags(tst_multisplitter) + if(KDDockWidgets_FUZZER) + add_subdirectory(fuzzer) + endif() endif() # tests_launcher