Skip to content

Commit

Permalink
feat(build): support Qt6
Browse files Browse the repository at this point in the history
Log: 支持Qt6
  • Loading branch information
heyuming authored and ComixHe committed Jun 16, 2023
1 parent 428675e commit 0604500
Show file tree
Hide file tree
Showing 21 changed files with 261 additions and 241 deletions.
147 changes: 12 additions & 135 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,19 +1,17 @@
cmake_minimum_required(VERSION 3.10)
cmake_minimum_required(VERSION 3.13)

set(VERSION
"5.6.8"
set(DTK_VERSION
"5.6.12"
CACHE STRING "define project version"
)

project(DtkWidget
VERSION ${VERSION}
VERSION ${DTK_VERSION}
DESCRIPTION "DTK Widget module"
HOMEPAGE_URL "https://github.com/linuxdeepin/dtkwidget"
LANGUAGES CXX C
)

set(LIB_NAME dtkwidget)

# Set install path
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
set(CMAKE_INSTALL_PREFIX /usr)
Expand All @@ -22,134 +20,13 @@ endif()
include(GNUInstallDirs)
include(CMakePackageConfigHelpers)

set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
if(UNIX AND NOT APPLE)
set(LINUX TRUE)
endif()

# Set build option
set(BUILD_PLUGINS
ON
CACHE BOOL "Build plugin and plugin example"
)

set(INCLUDE_INSTALL_DIR
"${CMAKE_INSTALL_INCLUDEDIR}/dtk${PROJECT_VERSION_MAJOR}/DWidget"
)
set(TOOL_INSTALL_DIR
"${CMAKE_INSTALL_LIBDIR}/dtk${PROJECT_VERSION_MAJOR}/DWidget/bin"
)
set(LIBRARY_INSTALL_DIR
"${CMAKE_INSTALL_LIBDIR}"
)
set(MKSPECS_INSTALL_DIR
"${CMAKE_INSTALL_LIBDIR}/qt5/mkspecs/modules"
CACHE STRING "Install dir for qt pri files"
)
set(CONFIG_INSTALL_DIR
"${CMAKE_INSTALL_LIBDIR}/cmake/DtkWidget"
CACHE STRING "Install directory for cmake files"
)
set(PKGCONFIG_INSTALL_DIR
"${CMAKE_INSTALL_LIBDIR}/pkgconfig"
CACHE STRING "Install directory for pkgconfig files"
)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -Wall -Wextra")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--as-needed")
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
set(BUILD_TESTING ON)
if("${PROJECT_VERSION_MAJOR}" STREQUAL "5")
set(QT_VERSION_MAJOR 5)
include(dtkwidget.cmake)
elseif("${PROJECT_VERSION_MAJOR}" STREQUAL "6")
set(QT_VERSION_MAJOR "6")
set(DTK_VERSION_MAJOR "6")
include(dtkwidget.cmake)
else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Ofast")
endif()
# find_package
find_package(Dtk REQUIRED COMPONENTS Core Gui)
find_package(QT NAMES Qt5 REQUIRED COMPONENTS Core)
find_package(Qt5 REQUIRED COMPONENTS
Core
Network
Concurrent
Widgets
PrintSupport
LinguistTools
X11Extras
DBus
)
find_package(PkgConfig REQUIRED)

file(GLOB D_HEADERS "${PROJECT_SOURCE_DIR}/include/DWidget/*")

set(AUTOCONFIG ${CMAKE_CURRENT_BINARY_DIR}/dtkwidget_config.h)
get_filename_component(CONFIG_INCLUDE ${AUTOCONFIG} DIRECTORY)
set(CONFIG_CONTENT)
string(APPEND CONFIG_CONTENT "// This is an auto-generated config\n")

foreach(header ${D_HEADERS})
get_filename_component(thename ${header} NAME)
string(APPEND CONFIG_CONTENT "#define DTKWIDGET_CLASS_${thename}\n")
endforeach()

file(WRITE ${AUTOCONFIG} ${CONFIG_CONTENT})

file(GLOB_RECURSE PUBLIC_HEADERS "${PROJECT_SOURCE_DIR}/include/*.h")
list(APPEND PUBLIC_HEADERS ${D_HEADERS} ${AUTOCONFIG})

add_subdirectory(src)
add_subdirectory(examples)
add_subdirectory(tools)

if(BUILD_TESTING)
message("==================================")
message(" Now Testing is enabled ")
message("==================================")
enable_testing()
add_subdirectory(tests)
message(SEND_ERROR "not support Prject Version ${PROJECT_VERSION}.")
endif()

if(BUILD_PLUGINS)
message("===================================")
message(" You can build and run plugins now ")
message("===================================")
add_subdirectory(plugin)
endif()

set(BUILD_DOCS
OFF
CACHE BOOL "Generate doxygen-based documentation"
)

if(BUILD_DOCS)
message("===================================")
message(" You can build docs now ")
message("===================================")
add_subdirectory(docs)
endif()

configure_package_config_file(
misc/DtkWidgetConfig.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/DtkWidgetConfig.cmake
INSTALL_DESTINATION ${CONFIG_INSTALL_DIR}
PATH_VARS TOOL_INSTALL_DIR
)

write_basic_package_version_file(
${CMAKE_CURRENT_BINARY_DIR}/DtkWidgetConfigVersion.cmake
VERSION ${VERSION}
COMPATIBILITY SameMajorVersion
)
install(FILES
${CMAKE_CURRENT_BINARY_DIR}/DtkWidgetConfig.cmake
${CMAKE_CURRENT_BINARY_DIR}/DtkWidgetConfigVersion.cmake
DESTINATION ${CONFIG_INSTALL_DIR}
)

configure_file(misc/dtkwidget.pc.in dtkwidget.pc @ONLY)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/dtkwidget.pc DESTINATION ${PKGCONFIG_INSTALL_DIR})

configure_file(misc/qt_lib_dtkwidget.pri.in qt_lib_dtkwidget.pri @ONLY)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/qt_lib_dtkwidget.pri DESTINATION ${MKSPECS_INSTALL_DIR})
1 change: 0 additions & 1 deletion debian/dtkwidget5-examples.install
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@
usr/lib/*/*/*/examples/*
usr/share/dsg/configs/overrides/dtk-example/*
1 change: 0 additions & 1 deletion debian/libdtkwidget5.install
Original file line number Diff line number Diff line change
@@ -1,3 +1,2 @@
usr/lib/*/lib*.so.*
usr/share/*/*/translations/*
usr/share/dsg/configs/org.deepin.dtkwidget.feature-display.json
1 change: 0 additions & 1 deletion debian/libdtkwidget5.install.amd64
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
usr/lib/*/lib*.so.*
#usr/lib/*/libmsc.so
usr/share/*/*/translations/*
usr/share/dsg/configs/org.deepin.dtkwidget.feature-display.json
1 change: 0 additions & 1 deletion debian/libdtkwidget5.install.i386
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
usr/lib/*/lib*.so.*
#usr/lib/*/libmsc.so
usr/share/*/*/translations/*
usr/share/dsg/configs/org.deepin.dtkwidget.feature-display.json
2 changes: 1 addition & 1 deletion debian/rules
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ endif
dh $@

override_dh_auto_configure:
dh_auto_configure -- -DBUILD_PLUGINS=OFF -DBUILD_DOCS=ON -DVERSION=$(_PACK_VER)
dh_auto_configure -- -DBUILD_PLUGINS=OFF -DBUILD_DOCS=ON -DDTK_VERSION=$(_PACK_VER)
#override_dh_auto_configure:
# dh_auto_configure -- LIB_INSTALL_DIR=/usr/lib/$(DEB_HOST_MULTIARCH)
#override_dh_makeshlibs:
Expand Down
6 changes: 2 additions & 4 deletions docs/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
cmake_minimum_required (VERSION 3.10)

find_package (Doxygen REQUIRED)

set (QCH_INSTALL_DESTINATION ${CMAKE_INSTALLL_PREFIX}/share/qt5/doc CACHE STRING "QCH install location")
set (QCH_INSTALL_DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/qt${QT_VERSION_MAJOR}/doc CACHE STRING "QCH install location")

set (DOXYGEN_GENERATE_HTML "YES" CACHE STRING "Doxygen HTML output")
set (DOXYGEN_GENERATE_XML "YES" CACHE STRING "Doxygen XML output")
Expand All @@ -12,7 +10,7 @@ set (DOXYGEN_PROJECT_NUMBER ${CMAKE_PROJECT_VERSION} CACHE STRING "") # Should b
set (DOXYGEN_EXTRACT_STATIC YES)
set (DOXYGEN_OUTPUT_LANGUAGE "Chinese" CACHE STRING "Doxygen Output Language")
set (DOXYGEN_IMAGE_PATH ${CMAKE_CURRENT_LIST_DIR}/images/)
set (DOXYGEN_QHG_LOCATION "qhelpgenerator")
set (DOXYGEN_QHG_LOCATION "qhelpgenerator" CACHE STRING "Doxygen QHG path")
set (DOXYGEN_QHP_NAMESPACE "org.deepin.dtk.widget")
set (DOXYGEN_QCH_FILE "dtkwidget.qch")
set (DOXYGEN_QHP_VIRTUAL_FOLDER "dtkwidget")
Expand Down
132 changes: 132 additions & 0 deletions dtkwidget.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
set(LIBNAME dtk${DTK_VERSION_MAJOR}widget)
set(DtkWidget Dtk${DTK_VERSION_MAJOR}Widget)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)

message(STATUS "Current Qt Version: ${QT_VERSION_MAJOR}")
message(STATUS "Current Dtk Version: ${DTK_VERSION_MAJOR}")

set(BUILD_EXAMPLES ON CACHE BOOL "Build examples")
set(BUILD_VERSION "0" CACHE STRING "buildversion")
set(BUILD_PLUGINS ON CACHE BOOL "Build plugin and plugin example")

set(INCLUDE_INSTALL_DIR
"${CMAKE_INSTALL_INCLUDEDIR}/dtk${PROJECT_VERSION_MAJOR}/DWidget"
)
set(TOOL_INSTALL_DIR
"${CMAKE_INSTALL_LIBDIR}/dtk${PROJECT_VERSION_MAJOR}/DWidget/bin"
)
set(LIBRARY_INSTALL_DIR
"${CMAKE_INSTALL_LIBDIR}"
)
set(MKSPECS_INSTALL_DIR
"${CMAKE_INSTALL_LIBDIR}/qt${QT_VERSION_MAJOR}/mkspecs/modules"
CACHE STRING "Install dir for qt pri files"
)
set(CONFIG_CMAKE_INSTALL_DIR
"${CMAKE_INSTALL_LIBDIR}/cmake/${DtkWidget}"
CACHE STRING "Install directory for cmake files"
)
set(PKGCONFIG_INSTALL_DIR
"${CMAKE_INSTALL_LIBDIR}/pkgconfig"
CACHE STRING "Install directory for pkgconfig files"
)

find_package(Dtk${DTK_VERSION_MAJOR} REQUIRED COMPONENTS Core Gui)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core
Network
Concurrent
Widgets
PrintSupport
LinguistTools
DBus)
find_package(PkgConfig REQUIRED)

if("${QT_VERSION_MAJOR}" STREQUAL "5")
find_package(Qt5 REQUIRED COMPONENTS X11Extras)
endif()

file(GLOB D_HEADERS "${PROJECT_SOURCE_DIR}/include/DWidget/*")

set(AUTOCONFIG ${CMAKE_CURRENT_BINARY_DIR}/dtkwidget_config.h)
get_filename_component(CONFIG_INCLUDE ${AUTOCONFIG} DIRECTORY)
set(CONFIG_CONTENT)
string(APPEND CONFIG_CONTENT "// This is an auto-generated config\n")

foreach(header ${D_HEADERS})
get_filename_component(thename ${header} NAME)
string(APPEND CONFIG_CONTENT "#define DTKWIDGET_CLASS_${thename}\n")
endforeach()

file(WRITE ${AUTOCONFIG} ${CONFIG_CONTENT})

file(GLOB_RECURSE PUBLIC_HEADERS "${PROJECT_SOURCE_DIR}/include/*.h")

list(APPEND PUBLIC_HEADERS ${D_HEADERS})
list(APPEND PUBLIC_HEADERS ${AUTOCONFIG})

set (BUILD_DOCS ON CACHE BOOL "Generate doxygen-based documentation")

if (NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release)
endif()

if(NOT MSVC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -Wall -Wextra")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--as-needed")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--as-needed -pie")
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
set(BUILD_TESTING ON)
endif ()
string(REPLACE "-O3" "-Ofast" CMAKE_CXX_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE})
endif()

if (BUILD_DOCS)
add_subdirectory(docs)
endif ()

add_subdirectory(src)
if(BUILD_TESTING)
message(STATUS "==================================")
message(STATUS " Now Testing is enabled ")
message(STATUS "==================================")
enable_testing()
add_subdirectory(tests)
endif()
if(BUILD_EXAMPLES)
message(STATUS "===================================")
message(STATUS "You can build and run examples now ")
message(STATUS "===================================")
add_subdirectory(examples)
endif()
add_subdirectory(tools)

if(BUILD_PLUGINS)
message(STATUS "===================================")
message(STATUS "Plugins will be built later")
message(STATUS "===================================")
add_subdirectory(plugin)
endif()

configure_package_config_file(misc/DtkWidgetConfig.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/${DtkWidget}Config.cmake
INSTALL_DESTINATION ${CONFIG_CMAKE_INSTALL_DIR}
PATH_VARS TOOL_INSTALL_DIR)
write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/${DtkWidget}ConfigVersion.cmake"
VERSION ${DTK_VERSION}
COMPATIBILITY SameMajorVersion
)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${DtkWidget}Config.cmake DESTINATION ${CONFIG_CMAKE_INSTALL_DIR})
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${DtkWidget}ConfigVersion.cmake DESTINATION ${CONFIG_CMAKE_INSTALL_DIR})

configure_file(misc/DtkWidget.pc.in ${LIBNAME}.pc @ONLY)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${LIBNAME}.pc DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")

configure_file(misc/qt_lib_DtkWidget.pri.in qt_lib_DtkWidget.pri @ONLY)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/qt_lib_DtkWidget.pri DESTINATION "${MKSPECS_INSTALL_DIR}")
4 changes: 2 additions & 2 deletions examples/PrintPreviewSettingsPlugin/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
set(PLUGIN_NAME PrintPreviewSettingsPlugin)

find_package(Qt5 REQUIRED COMPONENTS Core)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core)

add_library(${PLUGIN_NAME} SHARED
settingsplugin.h
settingsplugin.cpp
)

target_link_libraries(${PLUGIN_NAME} PRIVATE
${LIB_NAME}
${LIBNAME}
)
11 changes: 5 additions & 6 deletions examples/collections/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
set(BIN_NAME collections)
set(CMAKE_AUTOUIC ON)

find_package(Qt5 REQUIRED COMPONENTS Gui Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Gui Widgets)

add_executable(${BIN_NAME}
images.qrc
Expand Down Expand Up @@ -50,13 +50,12 @@ add_executable(${BIN_NAME}
)

target_link_libraries(${BIN_NAME} PRIVATE
Qt5::Widgets
Qt5::GuiPrivate
${LIB_NAME}
Qt${QT_VERSION_MAJOR}::Widgets
Qt${QT_VERSION_MAJOR}::Gui
Qt${QT_VERSION_MAJOR}::GuiPrivate
${LIBNAME}
)
install(
TARGETS ${BIN_NAME}
DESTINATION "${CMAKE_INSTALL_LIBDIR}/dtk${PROJECT_VERSION_MAJOR}/DWidget/examples/"
)

dconfig_override_files(APPID dtk-example META_NAME org.deepin.dtkwidget.feature-display FILES ${CMAKE_CURRENT_LIST_DIR}/org.deepin.dtkwidget.feature-display.json)
2 changes: 1 addition & 1 deletion linglong.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ variables:
extra_args: |
-DBUILD_EXAMPLES=OFF \
-DBUILD_DOCS=OFF \
-DVERSION=${VERSION}
-DDTK_VERSION=${VERSION}
build:
kind: cmake
Expand Down
Loading

0 comments on commit 0604500

Please sign in to comment.