From c09cf8e9c7a5738c800fd7b84af6b95acc1fe8cb Mon Sep 17 00:00:00 2001 From: Rick Vogel Date: Tue, 1 Nov 2022 16:51:26 +0100 Subject: [PATCH] cmake find package; font config; clang tidy 10 --- .clang-format | 11 ++- CMakeLists.txt | 97 ++++++++++++++----- cmake/QSkinnyConfig.cmake | 2 + .../QSkinnyMacros.cmake | 2 +- examples/qvgviewer/CMakeLists.txt | 18 ++-- features/qskconfig.cmake | 18 ++-- skins/material3/CMakeLists.txt | 2 +- skins/squiek/CMakeLists.txt | 2 +- src/CMakeLists.txt | 24 ++--- support/CMakeLists.txt | 41 +++----- support/fonts.conf.cmake.in | 6 ++ tools/svg2qvg/CMakeLists.txt | 5 +- 12 files changed, 136 insertions(+), 92 deletions(-) create mode 100644 cmake/QSkinnyConfig.cmake rename scripts/cmake/qskinny-macros.cmake => cmake/QSkinnyMacros.cmake (90%) create mode 100644 support/fonts.conf.cmake.in diff --git a/.clang-format b/.clang-format index e33eb0e1..4dfac7ad 100644 --- a/.clang-format +++ b/.clang-format @@ -91,10 +91,12 @@ PenaltyBreakString: 1000 PenaltyExcessCharacter: 1000000 PenaltyReturnTypeOnItsOwnLine: 60 PointerAlignment: Left -RawStringFormats: - - Delimiter: pb - Language: TextProto - BasedOnStyle: google +RawStringFormats: + - Language: TextProto + Delimiters: + - 'pb' + - 'proto' + BasedOnStyle: google ReflowComments: true SortIncludes: true SortUsingDeclarations: true @@ -112,5 +114,6 @@ SpacesInSquareBrackets: true Standard: Cpp11 TabWidth: 4 UseTab: Never +UseCRLF: Always ... diff --git a/CMakeLists.txt b/CMakeLists.txt index 4bcc68b5..1abea989 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.16.3) -project(qskinny VERSION 999.99.9) # TODO get from git branch name or +project(QSkinny VERSION 999.99.9) # TODO get from git branch name or set_property(GLOBAL PROPERTY USE_FOLDERS ON) @@ -36,30 +36,26 @@ else() endif() endif() -if("${Qt5_DIR}" STREQUAL "" AND "${Qt6_DIR}" STREQUAL "") - message(FATAL_ERROR "Neither Qt5_DIR nor Qt6_DIR defined!") -else() - if(NOT "${Qt5_DIR}" STREQUAL "") - find_package(Qt5 REQUIRED COMPONENTS Core Gui OpenGL Quick Svg Widgets) - find_package(Qt5 OPTIONAL_COMPONENTS QuickWidgets WebEngine WebEngineCore) - set(Qt Qt${Qt5_VERSION_MAJOR}) - set(Qt_VERSION ${Qt5_VERSION}) - set(Qt_VERSION_MAJOR ${Qt5_VERSION_MAJOR}) - set(Qt_VERSION_MINOR ${Qt5_VERSION_MINOR}) - set(Qt_VERSION_PATCH ${Qt5_VERSION_PATCH}) - elseif(NOT "${Qt6_DIR}" STREQUAL "") +if(NOT "${Qt5_DIR}" STREQUAL "") + find_package(Qt5 REQUIRED COMPONENTS Core Gui OpenGL Quick Svg Widgets) + find_package(Qt5 OPTIONAL_COMPONENTS QuickWidgets WebEngine WebEngineCore) + set(Qt Qt${Qt5_VERSION_MAJOR}) + set(Qt_VERSION ${Qt5_VERSION}) + set(Qt_VERSION_MAJOR ${Qt5_VERSION_MAJOR}) + set(Qt_VERSION_MINOR ${Qt5_VERSION_MINOR}) + set(Qt_VERSION_PATCH ${Qt5_VERSION_PATCH}) +elseif(NOT "${Qt6_DIR}" STREQUAL "") - string(REPLACE "/lib/cmake/Qt6" "" Qt6_PREFIX_DIR "${Qt6_DIR}") - set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${Qt6_PREFIX_DIR}) + string(REPLACE "/lib/cmake/Qt6" "" Qt6_PREFIX_DIR "${Qt6_DIR}") + set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${Qt6_PREFIX_DIR}) - find_package(Qt6 REQUIRED COMPONENTS Core Gui OpenGL Quick QuickWidgets Svg Widgets) - find_package(Qt6 OPTIONAL_COMPONENTS QuickWidgets WebEngineCore WebEngineQuick) - set(Qt Qt${Qt6_VERSION_MAJOR}) - set(Qt_VERSION ${Qt6_VERSION}) - set(Qt_VERSION_MAJOR ${Qt6_VERSION_MAJOR}) - set(Qt_VERSION_MINOR ${Qt6_VERSION_MINOR}) - set(Qt_VERSION_PATCH ${Qt6_VERSION_PATCH}) - endif() + find_package(Qt6 REQUIRED COMPONENTS Core Gui OpenGL Quick QuickWidgets Svg Widgets) + find_package(Qt6 OPTIONAL_COMPONENTS QuickWidgets WebEngineCore WebEngineQuick) + set(Qt Qt${Qt6_VERSION_MAJOR}) + set(Qt_VERSION ${Qt6_VERSION}) + set(Qt_VERSION_MAJOR ${Qt6_VERSION_MAJOR}) + set(Qt_VERSION_MINOR ${Qt6_VERSION_MINOR}) + set(Qt_VERSION_PATCH ${Qt6_VERSION_PATCH}) endif() if(TRUE) @@ -70,7 +66,6 @@ if(TRUE) endif() # define install directories - set(QSK_INSTALL_DOCS doc) set(QSK_INSTALL_HEADERS include) set(QSK_INSTALL_LIBS lib) @@ -78,6 +73,15 @@ set(QSK_INSTALL_BINS bin) set(QSK_INSTALL_PLUGINS plugins) set(QSK_INSTALL_EXAMPLES examples) +# define debug postfix globally +set(CMAKE_DEBUG_POSTFIX d) +# define binary install directory globally +set(CMAKE_INSTALL_BINDIR ${QSK_INSTALL_BINS}$<$:/debug>) +# define library install directory globally +# set(CMAKE_INSTALL_LIBDIR lib$<$:/debug>) +# define install rpath globally +set(CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_PREFIX}/${QSK_INSTALL_LIBS}) + add_subdirectory(src) add_subdirectory(skins) add_subdirectory(inputcontext) @@ -97,4 +101,47 @@ endif() #doc/*.dox # doc/*.metadox # doc/classes/*.dox -# doc/classes/*.metadox \ No newline at end of file +# doc/classes/*.metadox + +set(PACKAGE_NAME ${PROJECT_NAME}) +set(PACKAGE_VERSION ${CMAKE_PROJECT_VERSION}) +set(PACKAGE_NAMESPACE Qsk) +set(PACKAGE_LOCATION lib/cmake/${PROJECT_NAME}) + +install(TARGETS qskinny EXPORT ${PACKAGE_NAME}Targets + LIBRARY DESTINATION ${QSK_INSTALL_LIBS} + ARCHIVE DESTINATION ${QSK_INSTALL_LIBS} + RUNTIME DESTINATION ${QSK_INSTALL_LIBS} + INCLUDES DESTINATION ${QSK_INSTALL_HEADERS}) + +include(CMakePackageConfigHelpers) +write_basic_package_version_file( + ${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE_NAME}/${PACKAGE_NAME}ConfigVersion.cmake + VERSION ${PACKAGE_VERSION} + COMPATIBILITY AnyNewerVersion) + +export(EXPORT ${PACKAGE_NAME}Targets + FILE ${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE_NAME}/${PACKAGE_NAME}Targets.cmake + NAMESPACE ${PACKAGE_NAMESPACE}::) + +configure_file(cmake/${PACKAGE_NAME}Config.cmake + ${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE_NAME}/${PACKAGE_NAME}Config.cmake + COPYONLY) + +install(EXPORT ${PACKAGE_NAME}Targets + FILE + ${PACKAGE_NAME}Targets.cmake + NAMESPACE + ${PACKAGE_NAMESPACE}:: + DESTINATION + ${PACKAGE_LOCATION}) + +install( + FILES + cmake/${PACKAGE_NAME}Config.cmake + cmake/${PACKAGE_NAME}Macros.cmake + ${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE_NAME}/${PACKAGE_NAME}ConfigVersion.cmake + DESTINATION + ${PACKAGE_LOCATION} + COMPONENT + Devel) \ No newline at end of file diff --git a/cmake/QSkinnyConfig.cmake b/cmake/QSkinnyConfig.cmake new file mode 100644 index 00000000..8bb2b05b --- /dev/null +++ b/cmake/QSkinnyConfig.cmake @@ -0,0 +1,2 @@ +include("${CMAKE_CURRENT_LIST_DIR}/QSkinnyTargets.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/QSkinnyMacros.cmake") \ No newline at end of file diff --git a/scripts/cmake/qskinny-macros.cmake b/cmake/QSkinnyMacros.cmake similarity index 90% rename from scripts/cmake/qskinny-macros.cmake rename to cmake/QSkinnyMacros.cmake index 5ad3c467..d332b82b 100644 --- a/scripts/cmake/qskinny-macros.cmake +++ b/cmake/QSkinnyMacros.cmake @@ -1,7 +1,7 @@ if(TARGET ${Qt}::Svg) ## @param SVG_FILENAME absolute filename to the svg ## @param QVG_FILENAME absolute filename to the qvg - function(svg2qvg SVG_FILENAME QVG_FILENAME) + function(qsk_svg2qvg SVG_FILENAME QVG_FILENAME) get_filename_component(QVG_FILENAME ${QVG_FILENAME} ABSOLUTE) get_filename_component(SVG_FILENAME ${SVG_FILENAME} ABSOLUTE) add_custom_command( diff --git a/examples/qvgviewer/CMakeLists.txt b/examples/qvgviewer/CMakeLists.txt index c51d756b..64b56cf2 100644 --- a/examples/qvgviewer/CMakeLists.txt +++ b/examples/qvgviewer/CMakeLists.txt @@ -39,17 +39,15 @@ target_link_libraries(${TARGET_NAME} qskinny qsktestsupport) -option(ENABLE_AUTOQVG "enable automatic qvg compilation" OFF) - if(ENABLE_AUTOQVG) - svg2qvg(${CMAKE_CURRENT_LIST_DIR}/svg/01.01.10.svg - ${CMAKE_CURRENT_LIST_DIR}/qvg/01.01.10.qvg) - svg2qvg(${CMAKE_CURRENT_LIST_DIR}/svg/01.03.04q.svg - ${CMAKE_CURRENT_LIST_DIR}/qvg/01.03.04q.qvg) - svg2qvg(${CMAKE_CURRENT_LIST_DIR}/svg/01.08.05q.svg - ${CMAKE_CURRENT_LIST_DIR}/qvg/01.08.05q.qvg) - svg2qvg(${CMAKE_CURRENT_LIST_DIR}/svg/01.25.18.svg - ${CMAKE_CURRENT_LIST_DIR}/qvg/01.25.18.qvg) + qsk_svg2qvg(${CMAKE_CURRENT_LIST_DIR}/svg/01.01.10.svg + ${CMAKE_CURRENT_LIST_DIR}/qvg/01.01.10.qvg) + qsk_svg2qvg(${CMAKE_CURRENT_LIST_DIR}/svg/01.03.04q.svg + ${CMAKE_CURRENT_LIST_DIR}/qvg/01.03.04q.qvg) + qsk_svg2qvg(${CMAKE_CURRENT_LIST_DIR}/svg/01.08.05q.svg + ${CMAKE_CURRENT_LIST_DIR}/qvg/01.08.05q.qvg) + qsk_svg2qvg(${CMAKE_CURRENT_LIST_DIR}/svg/01.25.18.svg + ${CMAKE_CURRENT_LIST_DIR}/qvg/01.25.18.qvg) else() # When cross compiling we need to have the svg2qvg tool being # compiled for the build environment - not for the one of the target. diff --git a/features/qskconfig.cmake b/features/qskconfig.cmake index efea946f..6201645e 100644 --- a/features/qskconfig.cmake +++ b/features/qskconfig.cmake @@ -45,15 +45,15 @@ list(APPEND CONFIG hide_symbols) # } # } -set(MOC_DIR moc) -set(OBJECTS_DIR obj) -set(RCC_DIR rcc) - -option(BUILD_QSKDLL "build qskinny as shared library" ON) -option(BUILD_EXAMPLES "build qskinny examples" ON) -option(BUILD_PLAYGROUND "build qskinny playground" ON) -option(ENABLE_PINYIN "enable romanization system for standard mandarin chinese" OFF) # TODO try find pkg-config -option(ENABLE_HUNSPELL "enable spell checker" OFF) # TODO try find pkg-config +option(BUILD_QSKDLL "Build qskinny as shared library" ON) +option(BUILD_EXAMPLES "Build qskinny examples" ON) +option(BUILD_PLAYGROUND "Build qskinny playground" ON) +option(BUILD_SVG2QVG_STANDALONE "If 'ON' application won't be linked against qskinny library" ON) +option(ENABLE_PINYIN "Enable romanization system for standard mandarin chinese" OFF) # TODO try find pkg-config +option(ENABLE_HUNSPELL "Enable spell checker" OFF) # TODO try find pkg-config +option(ENABLE_FONT_CONFIG "Enable font config for font caching" ON) +option(ENABLE_ENSURE_SKINS "Enabling fall back code, that inserts some skin factories manually when not finding skin factories as plugins" ON) +option(ENABLE_AUTOQVG "enable automatic qvg compilation" ON) if(UNIX AND NOT APPLE) set(LINUX TRUE) diff --git a/skins/material3/CMakeLists.txt b/skins/material3/CMakeLists.txt index c117b02e..0fdf9d79 100644 --- a/skins/material3/CMakeLists.txt +++ b/skins/material3/CMakeLists.txt @@ -15,7 +15,7 @@ list(APPEND TARGET_OTHER_FILES metadata.json) if(BUILD_QSKDLL) - add_library(${TARGET_NAME} SHARED ${TARGET_HEADERS} ${TARGET_SOURCES} ${TARGET_OTHER_FILES}) + add_library(${TARGET_NAME} SHARED ${TARGET_HEADERS} ${TARGET_SOURCES} ${TARGET_OTHER_FILES}) # TODO remove lib files during installation? else() add_library(${TARGET_NAME} STATIC ${TARGET_HEADERS} ${TARGET_SOURCES} ${TARGET_OTHER_FILES}) endif() diff --git a/skins/squiek/CMakeLists.txt b/skins/squiek/CMakeLists.txt index 47c120e3..e5695dbc 100644 --- a/skins/squiek/CMakeLists.txt +++ b/skins/squiek/CMakeLists.txt @@ -15,7 +15,7 @@ list(APPEND TARGET_OTHER_FILES metadata.json) if(BUILD_QSKDLL) - add_library(${TARGET_NAME} SHARED ${TARGET_HEADERS} ${TARGET_SOURCES} ${TARGET_OTHER_FILES}) + add_library(${TARGET_NAME} SHARED ${TARGET_HEADERS} ${TARGET_SOURCES} ${TARGET_OTHER_FILES}) # TODO remove lib files during installation? else() add_library(${TARGET_NAME} STATIC ${TARGET_HEADERS} ${TARGET_SOURCES} ${TARGET_OTHER_FILES}) endif() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 58e41082..100bbf1a 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,5 +1,5 @@ include(${CMAKE_SOURCE_DIR}/features/qskconfig.cmake) -include(${CMAKE_SOURCE_DIR}/scripts/cmake/qskinny-macros.cmake) +include(${CMAKE_SOURCE_DIR}/cmake/QSkinnyMacros.cmake) list(APPEND TARGET_HEADERS common/QskArcMetrics.h @@ -406,13 +406,18 @@ endif() target_include_directories(${TARGET_NAME} PUBLIC - common - graphic - nodes - controls - layouts - dialogs - inputpanel) + $ + $ + $ + $ + $ + $ + $ + $) + +target_include_directories(${TARGET_NAME} + INTERFACE + $) target_link_libraries(${TARGET_NAME} PUBLIC @@ -438,6 +443,3 @@ set_target_properties(${TARGET_NAME} set_target_properties(${TARGET_NAME} PROPERTIES AUTOGEN_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/qskinny_autogen) - -install(TARGETS ${TARGET_NAME} DESTINATION ${QSK_INSTALL_LIBS}) -install(FILES ${TARGET_HEADERS} DESTINATION ${QSK_INSTALL_HEADERS}) \ No newline at end of file diff --git a/support/CMakeLists.txt b/support/CMakeLists.txt index 31d853fb..11b43ce0 100644 --- a/support/CMakeLists.txt +++ b/support/CMakeLists.txt @@ -1,8 +1,3 @@ -# TODO -# CONFIG += ensure_skins -# CONFIG += fontconfig -# CONFIG += qskinny - list(APPEND TARGET_HEADERS SkinnyGlobal.h SkinnyNamespace.h @@ -16,24 +11,6 @@ list(APPEND TARGET_SOURCES SkinnyShapeProvider.cpp SkinnyShortcut.cpp) -# TODO -#fontconfig{ -# -# QSK_FONTDIR = $${PWD} / fonts QSK_FONTCACHEDIR = -# $${OUT_PWD} / fontconfig QSK_FONTCONF_FILE = -# $${QSK_FONTCACHEDIR} / fonts.conf -# -# QSK_FONTCONF_DATA = -# "$$cat($${PWD}/fonts.conf.in, false)" QSK_FONTCONF_DATA = $$replace( -# QSK_FONTCONF_DATA, FONTCACHEDIR, $${QSK_FONTCACHEDIR}) -# QSK_FONTCONF_DATA = $$replace( -# QSK_FONTCONF_DATA, FONTDIR, $${QSK_FONTDIR}) -# write_file($${QSK_FONTCONF_FILE}, QSK_FONTCONF_DATA) -# -# DEFINES += -# FONTCONFIG_FILE = $$clean_path($$QSK_FONTCONF_FILE) -#} - set(TARGET_NAME qsktestsupport) if (BUILD_QSKDLL) @@ -42,6 +19,20 @@ else() add_library(${TARGET_NAME} STATIC ${TARGET_SOURCES} ${TARGET_HEADERS}) endif() +if(ENABLE_FONT_CONFIG) + set(QSK_FONTDIR ${CMAKE_CURRENT_LIST_DIR}/fonts) + set(QSK_FONTCACHEDIR ${CMAKE_CURRENT_BINARY_DIR}/fontconfig) + set(QSK_FONTCONF_FILE ${QSK_FONTCACHEDIR}/fonts.conf) + + configure_file(fonts.conf.cmake.in ${QSK_FONTCONF_FILE} + @ONLY + NEWLINE_STYLE LF) + + target_compile_definitions(${TARGET_NAME} + PRIVATE + FONTCONFIG_FILE=${QSK_FONTCONF_FILE}) +endif() + set_target_properties(${TARGET_NAME} PROPERTIES AUTOMOC ON) @@ -57,14 +48,12 @@ endif() target_compile_definitions(${TARGET_NAME} PRIVATE - PLUGIN_PATH=${CMAKE_INSTALL_PREFIX}/skins) + PLUGIN_PATH=${CMAKE_INSTALL_PREFIX}/skins) # TODO this'll work only locally since CMAKE_INSTALL_PREFIX is an absolute path target_include_directories(${TARGET_NAME} PUBLIC ${CMAKE_CURRENT_LIST_DIR}) -option(ENABLE_ENSURE_SKINS "Enabling fall back code, that inserts some skin factories manually when not finding skin factories as plugins" ON) - if(ENABLE_ENSURE_SKINS) target_include_directories(${TARGET_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/skins) target_compile_definitions(${TARGET_NAME} PRIVATE ENSURE_SKINS) diff --git a/support/fonts.conf.cmake.in b/support/fonts.conf.cmake.in new file mode 100644 index 00000000..501a1fa0 --- /dev/null +++ b/support/fonts.conf.cmake.in @@ -0,0 +1,6 @@ + + + + @QSK_FONTDIR@ + @QSK_FONTCACHEDIR@/cache + diff --git a/tools/svg2qvg/CMakeLists.txt b/tools/svg2qvg/CMakeLists.txt index 132b1594..cd2f559d 100644 --- a/tools/svg2qvg/CMakeLists.txt +++ b/tools/svg2qvg/CMakeLists.txt @@ -1,9 +1,6 @@ set(TARGET_NAME svg2qvg) -set(TARGET_INSTALL_SUFFIX bin/tools) set(TARGET_SOURCES main.cpp) -option(BUILD_SVG2QVG_STANDALONE "If 'ON' application won't be linked against qskinny library" ON) - add_executable(${TARGET_NAME} ${TARGET_SOURCES}) if(BUILD_SVG2QVG_STANDALONE) @@ -53,4 +50,4 @@ set_target_properties(${TARGET_NAME} PROPERTIES FOLDER tools) -install(TARGETS ${TARGET_NAME} DESTINATION ${TARGET_INSTALL_SUFFIX}) +install(TARGETS ${TARGET_NAME})