qtutilities/cmake/modules/QtConfig.cmake

461 lines
21 KiB
CMake
Raw Normal View History

2016-11-08 19:57:57 +01:00
cmake_minimum_required(VERSION 3.3.0 FATAL_ERROR)
2019-02-06 17:32:10 +01:00
# applies Qt specific configuration for GUI applications, QtGuiAppConfig must be included before this module must always be
# included before AppTarget/LibraryTarget
# ensure generated sources are processed by AUTOMOC and AUTOUIC
2019-02-06 17:32:10 +01:00
if (POLICY CMP0071)
cmake_policy(SET CMP0071 NEW)
2019-02-06 17:32:10 +01:00
endif ()
2017-02-11 02:31:43 +01:00
2019-02-06 17:32:10 +01:00
if (NOT BASIC_PROJECT_CONFIG_DONE)
2017-02-11 02:31:43 +01:00
message(FATAL_ERROR "Before including the QtConfig module, the BasicConfig module must be included.")
2019-02-06 17:32:10 +01:00
endif ()
if (QT_CONFIGURED)
2017-02-11 02:31:43 +01:00
message(FATAL_ERROR "The QtConfig module can not be included when Qt usage has already been configured.")
2019-02-06 17:32:10 +01:00
endif ()
if (TARGET_CONFIG_DONE)
2017-02-11 02:31:43 +01:00
message(FATAL_ERROR "Can not include QtConfig module when targets are already configured.")
2019-02-06 17:32:10 +01:00
endif ()
2019-02-06 17:32:10 +01:00
# add the Core module as it is always required also add additional Qt/KF modules which must have been specified before if
# required the Gui/Widgets/Quick modules should be added by including QtGuiAppConfig
set(QT_REPOS base ${ADDITIONAL_QT_REPOS})
set(QT_MODULES ${ADDITIONAL_QT_MODULES} Core)
set(KF_MODULES ${ADDITIONAL_KF_MODULES})
2016-10-08 19:07:28 +02:00
# allow specifying a custom directory for Qt plugins
set(QT_PLUGIN_DIR "" CACHE STRING "specifies the directory to install Qt plugins")
2016-10-08 19:07:28 +02:00
include(QtLinkage)
# check whether D-Bus interfaces need to be processed
2019-02-06 17:32:10 +01:00
if (DBUS_FILES)
message(STATUS "Project has D-Bus interface declarations which will be processed.")
# the D-Bus Qt module is required
list(APPEND QT_MODULES DBus)
2019-02-06 17:32:10 +01:00
endif ()
2016-11-08 19:57:57 +01:00
# remove duplicates
2016-10-08 19:07:28 +02:00
list(REMOVE_DUPLICATES QT_REPOS)
list(REMOVE_DUPLICATES QT_MODULES)
2019-02-06 17:32:10 +01:00
if (IMPORTED_QT_MODULES)
2016-11-08 19:57:57 +01:00
list(REMOVE_DUPLICATES IMPORTED_QT_MODULES)
2019-02-06 17:32:10 +01:00
endif ()
if (KF_MODULES)
2016-10-08 19:07:28 +02:00
list(REMOVE_DUPLICATES KF_MODULES)
2019-02-06 17:32:10 +01:00
endif ()
if (IMPORTED_KF_MODULES)
2016-11-08 19:57:57 +01:00
list(REMOVE_DUPLICATES IMPORTED_KF_MODULES)
2019-02-06 17:32:10 +01:00
endif ()
2016-10-08 19:07:28 +02:00
# actually find the required Qt/KF modules
2019-02-06 17:32:10 +01:00
foreach (QT_MODULE ${QT_MODULES})
# using those helpers allows using static Qt 5 build
find_qt5_module(${QT_MODULE} REQUIRED)
use_qt5_module(${QT_MODULE} REQUIRED)
2019-02-06 17:32:10 +01:00
endforeach ()
foreach (QT_MODULE ${IMPORTED_QT_MODULES})
if (NOT "${QT_MODULE}" IN_LIST QT_MODULES)
2016-11-08 19:57:57 +01:00
find_qt5_module(${QT_MODULE} REQUIRED)
2019-02-06 17:32:10 +01:00
endif ()
endforeach ()
foreach (KF_MODULE ${KF_MODULES})
# only shared KF5 modules supported
find_package(KF5${KF_MODULE} REQUIRED)
set(KF5_${KF_MODULE}_DYNAMIC_LIB KF5::${KF_MODULE})
link_against_library(KF5_${KF_MODULE} "AUTO_LINKAGE" REQUIRED)
2019-02-06 17:32:10 +01:00
endforeach ()
foreach (KF_MODULE ${IMPORTED_KF_MODULES})
if (NOT "${KF_MODULE}" IN_LIST KF_MODULES)
2016-11-08 19:57:57 +01:00
find_package(KF5${KF_MODULE} REQUIRED)
2019-02-06 17:32:10 +01:00
endif ()
endforeach ()
2019-02-06 17:32:10 +01:00
# built-in platform, imageformat and iconengine plugins when linking statically against Qt Gui -> determine whether
# application target links statically against Qt Gui
if (META_PROJECT_TYPE STREQUAL "application")
set(USING_STATIC_QT_GUI_FOR_APPLICATION NO)
2019-02-06 17:32:10 +01:00
foreach (MODULE Gui Widgets Quick)
if (QT5_${MODULE}_STATIC_LIB IN_LIST LIBRARIES OR QT5_${MODULE}_STATIC_LIB IN_LIST PRIVATE_LIBRARIES)
set(USING_STATIC_QT_GUI_FOR_APPLICATION YES)
message(STATUS "Linking application ${META_PROJECT_NAME} against static Qt 5 plugins.")
break()
2019-02-06 17:32:10 +01:00
endif ()
endforeach ()
endif ()
# -> link against plugins according to platform and configuration
2019-02-06 17:32:10 +01:00
if (USING_STATIC_QT_GUI_FOR_APPLICATION)
if (NOT USE_STATIC_QT5_Gui)
2016-11-26 21:58:42 +01:00
find_qt5_module(Gui REQUIRED)
2019-02-06 17:32:10 +01:00
endif ()
# ensure platform integration plugins for corresponding platforms are built-in when creating a GUI application
2019-02-06 17:32:10 +01:00
if (WIN32)
use_static_qt5_plugin(Gui WindowsIntegration ON OFF)
2019-02-06 17:32:10 +01:00
elseif (APPLE)
use_static_qt5_plugin(Gui CocoaIntegration ON OFF)
2019-02-06 17:32:10 +01:00
elseif (TARGET ${QT5_Gui_STATIC_PREFIX}QXcbIntegrationPlugin)
use_static_qt5_plugin(Gui XcbIntegration ON OFF)
2019-02-06 17:32:10 +01:00
else ()
message(WARNING "The required platform plugin for your platform is unknown an can not be linked in statically.")
2019-02-06 17:32:10 +01:00
endif ()
2019-02-06 17:32:10 +01:00
# ensure all available widget style plugins are built-in when creating a Qt Widgets application note: required since Qt
# 5.10 because the styles have been "pluginized" (see commit 4f3249f)
set(KNOWN_WIDGET_STYLE_PLUGINS WindowsVistaStyle MacStyle AndroidStyle)
set(USED_WIDGET_STYLE_PLUGINS)
2019-02-06 17:32:10 +01:00
if (QT5_Widgets_STATIC_LIB IN_LIST LIBRARIES OR QT5_Widgets_STATIC_LIB IN_LIST PRIVATE_LIBRARIES)
foreach (WIDGET_STYLE_PLUGIN ${KNOWN_WIDGET_STYLE_PLUGINS})
if (TARGET "${QT5_Widgets_STATIC_PREFIX}Q${WIDGET_STYLE_PLUGIN}Plugin")
use_static_qt5_plugin(Widgets "${WIDGET_STYLE_PLUGIN}" ON OFF)
list(APPEND USED_WIDGET_STYLE_PLUGINS "${WIDGET_STYLE_PLUGIN}")
2019-02-06 17:32:10 +01:00
endif ()
endforeach ()
# allow importing image format plugins via config.h
include(ListToString)
list_to_string(" " "\\\n Q_IMPORT_PLUGIN(Q" "Plugin)" "${USED_WIDGET_STYLE_PLUGINS}" WIDGET_STYLE_PLUGINS_ARRAY)
2019-02-06 17:32:10 +01:00
endif ()
# ensure image format plugins (beside SVG) are built-in if configured
2019-02-06 17:32:10 +01:00
if (IMAGE_FORMAT_SUPPORT)
foreach (IMAGE_FORMAT ${IMAGE_FORMAT_SUPPORT})
if (IMAGE_FORMAT EQUAL "Svg")
# the image format plugin of the Qt Svg module is handled separately
set(SVG_SUPPORT ON)
list(REMOVE_ITEM IMAGE_FORMAT_SUPPORT Svg)
2019-02-06 17:32:10 +01:00
else ()
use_static_qt5_plugin(Gui "${IMAGE_FORMAT}" ON OFF)
2019-02-06 17:32:10 +01:00
endif ()
endforeach ()
# allow importing image format plugins via config.h
include(ListToString)
list_to_string(" " "\\\n Q_IMPORT_PLUGIN(Q" "Plugin)" "${IMAGE_FORMAT_SUPPORT}" IMAGE_FORMAT_SUPPORT_ARRAY)
2019-02-06 17:32:10 +01:00
endif ()
# ensure SVG plugins are built-in if configured
2019-02-06 17:32:10 +01:00
if ((SVG_SUPPORT OR SVG_ICON_SUPPORT) AND NOT USE_STATIC_QT5_Svg)
find_qt5_module(Svg REQUIRED)
2019-02-06 17:32:10 +01:00
endif ()
if (SVG_SUPPORT)
use_static_qt5_plugin(Svg Svg ON OFF)
2019-02-06 17:32:10 +01:00
endif ()
if (SVG_ICON_SUPPORT)
use_static_qt5_plugin(Svg SvgIcon ON OFF)
2019-02-06 17:32:10 +01:00
endif ()
endif ()
2016-08-19 16:16:10 +02:00
# option for built-in translations
option(BUILTIN_TRANSLATIONS "enables/disables built-in translations when building applications and libraries" OFF)
# determine relevant Qt translation files
set(QT_TRANSLATION_FILES)
set(QT_TRANSLATION_SEARCH_PATHS)
2019-02-06 17:32:10 +01:00
if (CMAKE_FIND_ROOT_PATH)
list(APPEND QT_TRANSLATION_SEARCH_PATHS "${CMAKE_FIND_ROOT_PATH}/share/qt/translations"
"${CMAKE_FIND_ROOT_PATH}/share/qt5/translations")
endif ()
list(APPEND QT_TRANSLATION_SEARCH_PATHS
2019-02-06 17:32:10 +01:00
"${CMAKE_INSTALL_PREFIX}/share/qt/translations"
"${CMAKE_INSTALL_PREFIX}/share/qt5/translations"
"/usr/share/qt/translations"
"/usr/share/qt5/translations")
foreach (QT_TRANSLATION_PATH ${QT_TRANSLATION_SEARCH_PATHS})
if (IS_DIRECTORY "${QT_TRANSLATION_PATH}")
foreach (QT_REPO ${QT_REPOS})
file(GLOB QT_QM_FILES "${QT_TRANSLATION_PATH}/qt${QT_REPO}_*.qm")
2019-02-06 17:32:10 +01:00
if (QT_QM_FILES)
# add files to list of built-in translations but only if that configuration is enabled and if we're building
# the final application
if (BUILTIN_TRANSLATIONS AND "${META_PROJECT_TYPE}" STREQUAL "application")
file(COPY ${QT_QM_FILES} DESTINATION "${CMAKE_CURRENT_BINARY_DIR}")
list(APPEND EXTERNAL_QM_FILES ${QT_QM_FILES})
2019-02-06 17:32:10 +01:00
endif ()
list(APPEND QT_TRANSLATION_FILES "qt${QT_REPO}")
2019-02-06 17:32:10 +01:00
endif ()
endforeach ()
break()
2019-02-06 17:32:10 +01:00
endif ()
endforeach ()
# make relevant Qt translations available as array via config.h
include(ListToString)
list_to_string("," " \\\n QStringLiteral(\"" "\")" "${QT_TRANSLATION_FILES}" QT_TRANSLATION_FILES_ARRAY)
# enable lrelease and add install target for localization
2017-08-06 00:40:11 +02:00
option(ENABLE_QT_TRANSLATIONS "specifies whether Qt translations should be updated/released" ON)
2019-02-06 17:32:10 +01:00
if (ENABLE_QT_TRANSLATIONS AND TS_FILES)
message(STATUS "Project has translations which will be released.")
2017-01-07 16:09:38 +01:00
set(APP_SPECIFIC_QT_TRANSLATIONS_AVAILABLE YES)
2019-02-06 17:32:10 +01:00
# the LinguistTools module is required (but not add it to QT_MODULES because we don't link against it)
find_package(Qt5LinguistTools REQUIRED)
2017-08-01 10:47:27 +02:00
set(LUPDATE_OPTIONS "" CACHE STRING "specifies options passed to lupdate")
# adds the translations and a target for it
2016-04-24 20:53:14 +02:00
qt5_create_translation(QM_FILES
2019-02-06 17:32:10 +01:00
${HEADER_FILES}
${SRC_FILES}
${WIDGETS_HEADER_FILES}
${WIDGETS_SRC_FILES}
${WIDGETS_UI_FILES}
${QML_HEADER_FILES}
${QML_SRC_FILES}
${QML_RES_FILES}
${TS_FILES}
OPTIONS
${LUPDATE_OPTIONS})
add_custom_target(${META_PROJECT_NAME}_translations DEPENDS ${QM_FILES})
2019-02-06 17:32:10 +01:00
if (NOT TARGET translations)
add_custom_target(translations DEPENDS ${META_PROJECT_NAME}_translations)
2019-02-06 17:32:10 +01:00
else ()
add_dependencies(translations ${META_PROJECT_NAME}_translations)
2019-02-06 17:32:10 +01:00
endif ()
# add install target for translations
2019-02-06 17:32:10 +01:00
if (NOT META_NO_INSTALL_TARGETS AND ENABLE_INSTALL_TARGETS)
install(FILES ${QM_FILES} DESTINATION share/${META_PROJECT_NAME}/translations COMPONENT localization)
if (NOT TARGET install-localization)
set(LOCALIZATION_TARGET "install-localization")
add_custom_target(${LOCALIZATION_TARGET}
2019-02-06 17:32:10 +01:00
COMMAND "${CMAKE_COMMAND}" -DCMAKE_INSTALL_COMPONENT=localization -P
"${CMAKE_BINARY_DIR}/cmake_install.cmake")
add_dependencies(${LOCALIZATION_TARGET} ${META_PROJECT_NAME}_translations)
2019-02-06 17:32:10 +01:00
endif ()
endif ()
2017-01-07 16:09:38 +01:00
list(APPEND APP_SPECIFIC_QT_TRANSLATION_FILES "${META_PROJECT_NAME}")
2019-02-06 17:32:10 +01:00
endif ()
# make application specific translation available as array via config.h (even if this project has no translations, there
# might be some from dependencies)
if (APP_SPECIFIC_QT_TRANSLATION_FILES)
list_to_string(","
" \\\n QStringLiteral(\""
"\")"
"${APP_SPECIFIC_QT_TRANSLATION_FILES}"
APP_SPECIFIC_QT_TRANSLATION_FILES_ARRAY)
else ()
2017-01-07 16:09:38 +01:00
set(APP_SPECIFIC_QT_TRANSLATIONS_AVAILABLE NO)
2019-02-06 17:32:10 +01:00
endif ()
# built-in translations
2019-02-06 17:32:10 +01:00
if (BUILTIN_TRANSLATIONS AND (QM_FILES OR EXTERNAL_QM_FILES))
# write a qrc file for the qm files and add it to the resource files
set(TRANSLATIONS_QRC_FILE_NAME "${META_PROJECT_VARNAME_LOWER}_translations.qrc")
set(TRANSLATIONS_QRC_FILE "${CMAKE_CURRENT_BINARY_DIR}/${TRANSLATIONS_QRC_FILE_NAME}")
file(WRITE "${TRANSLATIONS_QRC_FILE}" "<RCC><qresource prefix=\"/translations\">")
2019-02-06 17:32:10 +01:00
foreach (QM_FILE ${QM_FILES} ${EXTERNAL_QM_FILES})
get_filename_component(QM_FILE_NAME "${QM_FILE}" NAME)
file(APPEND "${TRANSLATIONS_QRC_FILE}" "<file>${QM_FILE_NAME}</file>")
2019-02-06 17:32:10 +01:00
endforeach ()
file(APPEND "${TRANSLATIONS_QRC_FILE}" "</qresource></RCC>")
list(APPEND RES_FILES "${TRANSLATIONS_QRC_FILE}")
list(APPEND AUTOGEN_DEPS ${QM_FILES} ${EXTERNAL_QM_FILES})
list(APPEND BUILTIN_TRANSLATION_FILES "${TRANSLATIONS_QRC_FILE_NAME}")
2019-02-06 17:32:10 +01:00
endif ()
# generate DBus interfaces
2019-02-06 17:32:10 +01:00
if (DBUS_FILES)
qt5_add_dbus_interfaces(GENERATED_DBUS_FILES ${DBUS_FILES})
2019-02-06 17:32:10 +01:00
endif ()
# add icons to be built-in
2019-02-06 17:32:10 +01:00
if (REQUIRED_ICONS)
set(BUILTIN_ICON_THEMES "" CACHE STRING "specifies icon themes to be built-in")
2019-02-06 17:32:10 +01:00
option(BUILTIN_ICON_THEMES_IN_LIBRARIES "specifies whether icon themes should also be built-in when building libraries"
OFF)
if (BUILTIN_ICON_THEMES AND (BUILTIN_ICON_THEMES_IN_LIBRARIES OR (NOT "${META_PROJECT_TYPE}" STREQUAL "library")))
set(ICON_THEME_FILES)
set(ICON_SEARCH_PATHS)
2019-02-06 17:32:10 +01:00
if (CMAKE_FIND_ROOT_PATH)
# find icons from the regular prefix when cross-compiling
list(APPEND ICON_SEARCH_PATHS "${CMAKE_FIND_ROOT_PATH}/share/icons")
2019-02-06 17:32:10 +01:00
endif ()
list(APPEND ICON_SEARCH_PATHS "${CMAKE_INSTALL_PREFIX}/share/icons")
list(APPEND ICON_SEARCH_PATHS "/usr/share/icons")
2017-02-11 02:56:28 +01:00
set(BUILTIN_ICONS_DIR "${CMAKE_CURRENT_BINARY_DIR}/icons")
set(DEFAULT_THEME_INDEX_FILE "${BUILTIN_ICONS_DIR}/default/index.theme")
file(REMOVE_RECURSE "${BUILTIN_ICONS_DIR}")
file(MAKE_DIRECTORY "${BUILTIN_ICONS_DIR}")
2019-02-06 17:32:10 +01:00
foreach (ICON_THEME ${BUILTIN_ICON_THEMES})
string(REGEX MATCHALL
"([^:]+|[^:]+$)"
ICON_THEME_PARTS
"${ICON_THEME}")
list(LENGTH ICON_THEME_PARTS ICON_THEME_PARTS_LENGTH)
2019-02-06 17:32:10 +01:00
if ("${ICON_THEME_PARTS_LENGTH}" STREQUAL 2)
list(GET ICON_THEME_PARTS 0 ICON_THEME)
list(GET ICON_THEME_PARTS 1 NEW_ICON_THEME_NAME)
2019-02-06 17:32:10 +01:00
else ()
set(NEW_ICON_THEME_NAME "${ICON_THEME}")
2019-02-06 17:32:10 +01:00
endif ()
foreach (ICON_SEARCH_PATH ${ICON_SEARCH_PATHS})
set(ICON_THEME_PATH "${ICON_SEARCH_PATH}/${ICON_THEME}")
set(NEW_ICON_THEME_PATH "${ICON_SEARCH_PATH}/${ICON_THEME}")
2019-02-06 17:32:10 +01:00
if (IS_DIRECTORY "${ICON_THEME_PATH}")
message(
STATUS
"The specified icon theme \"${ICON_THEME}\" has been located under \"${ICON_THEME_PATH}\" and will be built-in."
)
# find index files
2019-02-06 17:32:10 +01:00
if (NOT ICON_THEME STREQUAL FALLBACK_ICON_THEME)
file(GLOB GLOBBED_ICON_THEME_INDEX_FILES
LIST_DIRECTORIES
false
"${ICON_THEME_PATH}/index.theme"
"${ICON_THEME_PATH}/icon-theme.cache")
else ()
# only index.theme required when icons are provided as fallback anyways
2019-02-06 17:32:10 +01:00
file(GLOB GLOBBED_ICON_THEME_INDEX_FILES
LIST_DIRECTORIES
false
"${ICON_THEME_PATH}/index.theme")
endif ()
# make the first specified built-in the default theme
2019-02-06 17:32:10 +01:00
if (NOT EXISTS "${DEFAULT_THEME_INDEX_FILE}")
2017-02-11 02:56:28 +01:00
file(MAKE_DIRECTORY "${BUILTIN_ICONS_DIR}/default")
file(WRITE "${DEFAULT_THEME_INDEX_FILE}" "[Icon Theme]\nInherits=${NEW_ICON_THEME_NAME}")
list(APPEND ICON_THEME_FILES "<file>default/index.theme</file>")
2019-02-06 17:32:10 +01:00
endif ()
# find required icons, except the icon theme is provided as fallback anyways
2019-02-06 17:32:10 +01:00
if (NOT ICON_THEME STREQUAL FALLBACK_ICON_THEME)
set(GLOB_PATTERNS)
2019-02-06 17:32:10 +01:00
foreach (REQUIRED_ICON ${REQUIRED_ICONS})
list(APPEND GLOB_PATTERNS
2019-02-06 17:32:10 +01:00
"${ICON_THEME_PATH}/${REQUIRED_ICON}"
"${ICON_THEME_PATH}/${REQUIRED_ICON}.*"
"${ICON_THEME_PATH}/*/${REQUIRED_ICON}"
"${ICON_THEME_PATH}/*/${REQUIRED_ICON}.*")
endforeach ()
file(GLOB_RECURSE GLOBBED_ICON_THEME_FILES
LIST_DIRECTORIES
false
${GLOB_PATTERNS})
else ()
message(
STATUS
"Icon files for specified theme \"${ICON_THEME}\" are skipped because these are provided as fallback anyways."
)
set(GLOBBED_ICON_THEME_FILES)
2019-02-06 17:32:10 +01:00
endif ()
# make temporary copy of required icons and create resource list for Qt
2019-02-06 17:32:10 +01:00
foreach (ICON_THEME_FILE ${GLOBBED_ICON_THEME_INDEX_FILES} ${GLOBBED_ICON_THEME_FILES})
# resolve symlinks
2019-02-06 17:32:10 +01:00
if (IS_SYMLINK "${ICON_THEME_FILE}")
string(REGEX
REPLACE "^${ICON_SEARCH_PATH}/"
""
ICON_THEME_FILE_RELATIVE_PATH
"${ICON_THEME_FILE}")
string(REGEX
REPLACE "(^[^/\\]+)"
"${NEW_ICON_THEME_NAME}"
NEW_ICON_THEME_FILE_RELATIVE_PATH
"${ICON_THEME_FILE_RELATIVE_PATH}")
set(ICON_THEME_FILE_ALIAS " alias=\"${NEW_ICON_THEME_FILE_RELATIVE_PATH}\"")
get_filename_component(ICON_THEME_FILE "${ICON_THEME_FILE}" REALPATH)
2019-02-06 17:32:10 +01:00
else ()
unset(ICON_THEME_FILE_ALIAS)
2019-02-06 17:32:10 +01:00
endif ()
string(REGEX
REPLACE "^${ICON_SEARCH_PATH}/"
""
ICON_THEME_FILE_RELATIVE_PATH
"${ICON_THEME_FILE}")
string(REGEX
REPLACE "(^[^/\\]+)"
"${NEW_ICON_THEME_NAME}"
NEW_ICON_THEME_FILE_RELATIVE_PATH
"${ICON_THEME_FILE_RELATIVE_PATH}")
get_filename_component(ICON_THEME_FILE_DIR "${ICON_THEME_FILE_RELATIVE_PATH}" DIRECTORY)
2019-02-06 17:32:10 +01:00
string(REGEX
REPLACE "(^[^/\\]+)"
"${NEW_ICON_THEME_NAME}"
NEW_ICON_THEME_FILE_DIR
"${ICON_THEME_FILE_DIR}")
2017-02-11 02:56:28 +01:00
file(MAKE_DIRECTORY "${BUILTIN_ICONS_DIR}/${NEW_ICON_THEME_FILE_DIR}")
file(COPY "${ICON_THEME_FILE}" DESTINATION "${BUILTIN_ICONS_DIR}/${NEW_ICON_THEME_FILE_DIR}")
2019-02-06 17:32:10 +01:00
list(APPEND ICON_THEME_FILES
"<file${ICON_THEME_FILE_ALIAS}>${NEW_ICON_THEME_FILE_RELATIVE_PATH}</file>")
endforeach ()
break()
2019-02-06 17:32:10 +01:00
endif ()
unset(ICON_THEME_PATH)
2019-02-06 17:32:10 +01:00
endforeach ()
if (NOT ICON_THEME_PATH)
message(FATAL_ERROR "The specified icon theme \"${ICON_THEME}\" coud not be found.")
2019-02-06 17:32:10 +01:00
endif ()
endforeach ()
2017-02-09 23:34:13 +01:00
set(BUILTIN_ICON_THEMES_QRC_FILE "${CMAKE_CURRENT_BINARY_DIR}/icons/${META_PROJECT_NAME}_builtinicons.qrc")
list(REMOVE_DUPLICATES ICON_THEME_FILES)
2019-02-06 17:32:10 +01:00
string(CONCAT BUILTIN_ICON_THEMES_QRC_FILE_CONTENT
"<RCC><qresource prefix=\"/icons\">"
${ICON_THEME_FILES}
"</qresource></RCC>")
file(WRITE "${BUILTIN_ICON_THEMES_QRC_FILE}" "${BUILTIN_ICON_THEMES_QRC_FILE_CONTENT}")
list(APPEND RES_FILES "${BUILTIN_ICON_THEMES_QRC_FILE}")
2019-02-06 17:32:10 +01:00
endif ()
endif ()
2016-07-10 00:22:20 +02:00
# export Qt resources from specified RES_FILES
2019-02-06 17:32:10 +01:00
foreach (RES_FILE ${RES_FILES})
get_filename_component(RES_EXT ${RES_FILE} EXT)
2019-02-06 17:32:10 +01:00
if (RES_EXT STREQUAL ".qrc")
get_filename_component(RES_NAME ${RES_FILE} NAME_WE)
list(APPEND QT_RESOURCES "${RES_NAME}")
2019-02-06 17:32:10 +01:00
endif ()
endforeach ()
# export Qt resources required by static libraries the static library depends on
2019-02-06 17:32:10 +01:00
if (STATIC_LIBRARIES_QT_RESOURCES)
list(REMOVE_DUPLICATES STATIC_LIBRARIES_QT_RESOURCES)
list(APPEND QT_RESOURCES ${STATIC_LIBRARIES_QT_RESOURCES})
2019-02-06 17:32:10 +01:00
endif ()
# enable Qt resources required by static libraries the shared library or application depends on
2019-02-06 17:32:10 +01:00
if (LIBRARIES_QT_RESOURCES)
list(REMOVE_DUPLICATES LIBRARIES_QT_RESOURCES)
# make enabling resources of static dependencies available via config.h
unset(ENABLE_QT_RESOURCES_OF_STATIC_DEPENDENCIES)
2019-02-06 17:32:10 +01:00
foreach (QT_RESOURCE ${LIBRARIES_QT_RESOURCES})
set(
ENABLE_QT_RESOURCES_OF_STATIC_DEPENDENCIES
"${ENABLE_QT_RESOURCES_OF_STATIC_DEPENDENCIES} \\\n struct initializer_${QT_RESOURCE} { \\\n initializer_${QT_RESOURCE}() { Q_INIT_RESOURCE(${QT_RESOURCE}); } \\\n ~initializer_${QT_RESOURCE}() { Q_CLEANUP_RESOURCE(${QT_RESOURCE}); } \\\n } dummy_${QT_RESOURCE};"
2019-02-06 17:32:10 +01:00
)
endforeach ()
endif ()
# prevent duplicated resources
2019-02-06 17:32:10 +01:00
if (QT_RESOURCES)
list(REMOVE_DUPLICATES QT_RESOURCES)
2019-02-06 17:32:10 +01:00
endif ()
# enable moc, uic and rcc by default for all targets
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
2019-02-06 17:32:10 +01:00
if (WIDGETS_UI_FILES AND WIDGETS_GUI)
set(CMAKE_AUTOUIC ON)
2019-02-06 17:32:10 +01:00
if (INSTALL_UI_HEADER)
2016-08-19 16:16:10 +02:00
# also add install for header files generated by uic
2019-02-06 17:32:10 +01:00
foreach (UI_FILE WIDGETS_UI_FILES)
get_filename_component(UI_NAME "${UI_FILE}" NAME_WE)
2019-02-06 17:32:10 +01:00
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/ui_${UI_NAME}.h"
DESTINATION "include/${META_PROJECT_NAME}/ui"
COMPONENT ui-header)
endforeach ()
endif ()
endif ()
2017-02-11 02:31:43 +01:00
# add configuration header for Qt-specific configuration
include(TemplateFinder)
find_template_file("qtconfig.h" QT_UTILITIES QT_CONFIG_H_TEMPLATE_FILE)
2019-02-06 17:32:10 +01:00
configure_file("${QT_CONFIG_H_TEMPLATE_FILE}" "${CMAKE_CURRENT_BINARY_DIR}/resources/qtconfig.h")
2017-02-11 02:31:43 +01:00
set(QT_CONFIGURED YES)