Provide an imported target for libs

This commit is contained in:
Martchus 2016-11-08 19:57:57 +01:00
parent 5531450c0a
commit e1a8a12670
6 changed files with 58 additions and 35 deletions

View File

@ -123,13 +123,13 @@ set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules" "${CMAKE_MODUL
# configure platform specific capslock detection
if(WIN32)
# WinAPI provides functions required for capslock detection
add_definitions(-DPLATFORM_SPECIFIC_CAPSLOCK_DETECTION)
list(APPEND META_PRIVATE_COMPILE_DEFINITIONS PLATFORM_SPECIFIC_CAPSLOCK_DETECTION)
else()
# X11 can provide functions required for capslock detection under non-Windows environments
find_package(X11)
if(X11_FOUND)
list(APPEND LIBRARIES ${X11_LIBRARIES})
add_definitions(-DPLATFORM_SPECIFIC_CAPSLOCK_DETECTION -DX_AVAILABLE)
list(APPEND META_PRIVATE_COMPILE_DEFINITIONS PLATFORM_SPECIFIC_CAPSLOCK_DETECTION)
endif()
endif()

View File

@ -3,41 +3,42 @@
include(QtLinkage)
set(JS_PROVIDER "auto" CACHE STRING "specifies the JavaScript provider: auto (default), qml, script or none")
if(${JS_PROVIDER} STREQUAL "auto")
if(NOT JS_PROVIDER OR "${JS_PROVIDER}" STREQUAL "auto")
find_qt5_module(Script OPTIONAL)
if(QT5_Script_FOUND)
set(JS_PROVIDER Script)
set(JS_DEFINITION "-D${META_PROJECT_VARNAME_UPPER}_USE_SCRIPT")
set(JS_DEFINITION "${META_PROJECT_VARNAME_UPPER}_USE_SCRIPT")
list(APPEND ADDITIONAL_QT_REPOS "script")
message(STATUS "No JavaScript provider explicitly specified, defaulting to Qt Script.")
else()
find_qt5_module(Qml OPTIONAL)
if(QT5_Qml_FOUND)
set(JS_PROVIDER Qml)
set(JS_DEFINITION "-D${META_PROJECT_VARNAME_UPPER}_USE_JSENGINE")
set(JS_DEFINITION "${META_PROJECT_VARNAME_UPPER}_USE_JSENGINE")
list(APPEND ADDITIONAL_QT_REPOS "declarative")
message(STATUS "No JavaScript provider explicitly specified, defaulting to Qt QML.")
else()
set(JS_PROVIDER "")
set(JS_DEFINITION "-D${META_PROJECT_VARNAME_UPPER}_NO_JSENGINE")
set(JS_DEFINITION "${META_PROJECT_VARNAME_UPPER}_NO_JSENGINE")
message(STATUS "No JavaScript provider available, features requiring JavaScript have been disabled.")
endif()
endif()
else()
if(${JS_PROVIDER} STREQUAL "script")
find_qt5_module(Script REQUIRED)
set(JS_DEFINITION "-D${META_PROJECT_VARNAME_UPPER}_USE_SCRIPT")
set(JS_PROVIDER Script)
set(JS_DEFINITION "${META_PROJECT_VARNAME_UPPER}_USE_SCRIPT")
list(APPEND ADDITIONAL_QT_REPOS "script")
message(STATUS "Using Qt Script as JavaScript provider.")
elseif(${JS_PROVIDER} STREQUAL "qml")
find_qt5_module(Qml REQUIRED)
set(JS_PROVIDER Qml)
set(JS_DEFINITION "-D${META_PROJECT_VARNAME_UPPER}_USE_JSENGINE")
set(JS_DEFINITION "${META_PROJECT_VARNAME_UPPER}_USE_JSENGINE")
list(APPEND ADDITIONAL_QT_REPOS "declarative")
message(STATUS "Using Qt QML as JavaScript provider.")
elseif(${JS_PROVIDER} STREQUAL "none")
set(JS_PROVIDER "")
set(JS_DEFINITION "-D${META_PROJECT_VARNAME_UPPER}_NO_JSENGINE")
set(JS_DEFINITION "${META_PROJECT_VARNAME_UPPER}_NO_JSENGINE")
message(STATUS "JavaScript provider has been disabled.")
else()
message(FATAL_ERROR "The specified JavaScript provider '${JS_PROVIDER}' is unknown.")
@ -45,6 +46,6 @@ else()
endif()
if(JS_PROVIDER)
use_qt5_module(${JS_PROVIDER} OPTIONAL)
use_qt5_module(${JS_PROVIDER} REQUIRED)
endif()
add_definitions(${JS_DEFINITION})
list(APPEND META_PRIVATE_COMPILE_DEFINITIONS ${JS_DEFINITION})

View File

@ -1,3 +1,5 @@
cmake_minimum_required(VERSION 3.3.0 FATAL_ERROR)
# applies Qt specific configuration
# for GUI applications, QtGuiAppConfig must be included before
# after including this module, AppTarget must be included
@ -23,11 +25,18 @@ if(SVG_SUPPORT OR ((USE_STATIC_QT_BUILD AND (WIDGETS_GUI OR QUICK_GUI)) AND SVG_
list(APPEND QT_REPOS svg)
endif()
# remove duplicates
list(REMOVE_DUPLICATES QT_REPOS)
list(REMOVE_DUPLICATES QT_MODULES)
if(IMPORTED_QT_MODULES)
list(REMOVE_DUPLICATES IMPORTED_QT_MODULES)
endif()
if(KF_MODULES)
list(REMOVE_DUPLICATES KF_MODULES)
endif()
if(IMPORTED_KF_MODULES)
list(REMOVE_DUPLICATES IMPORTED_KF_MODULES)
endif()
# actually find the required Qt/KF modules
foreach(QT_MODULE ${QT_MODULES})
@ -35,28 +44,34 @@ foreach(QT_MODULE ${QT_MODULES})
find_qt5_module(${QT_MODULE} REQUIRED)
use_qt5_module(${QT_MODULE} REQUIRED)
endforeach()
foreach(QT_MODULE ${IMPORTED_QT_MODULES})
if(NOT "${QT_MODULE}" IN_LIST QT_MODULES)
find_qt5_module(${QT_MODULE} REQUIRED)
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)
endforeach()
foreach(KF_MODULE ${IMPORTED_KF_MODULES})
if(NOT "${KF_MODULE}" IN_LIST KF_MODULES)
find_package(KF5${KF_MODULE} REQUIRED)
endif()
endforeach()
# tune for static build
if(USE_STATIC_QT5_CORE AND (WIDGETS_GUI OR QUICK_GUI))
# include plugins statically
if(WIN32)
list(APPEND LIBRARIES Qt5::static::QWindowsIntegrationPlugin)
list(APPEND STATIC_LIBRARIES Qt5::static::QWindowsIntegrationPlugin)
list(APPEND PRIVATE_LIBRARIES Qt5::static::QWindowsIntegrationPlugin)
list(APPEND PRIVATE_STATIC_LIBRARIES Qt5::static::QWindowsIntegrationPlugin)
endif()
if(SVG_ICON_SUPPORT)
list(APPEND LIBRARIES Qt5::QSvgPlugin)
list(APPEND STATIC_LIBRARIES Qt5::QSvgPlugin)
list(APPEND PRIVATE_LIBRARIES Qt5::static::QSvgPlugin)
list(APPEND PRIVATE_STATIC_LIBRARIES Qt5::static::QSvgPlugin)
endif()
# workaround for missing compile definition GRAPHITE2_STATIC
#set_property(TARGET Qt5::Gui APPEND PROPERTY INTERFACE_COMPILE_DEFINITIONS GRAPHITE2_STATIC)
endif()
# option for built-in translations

View File

@ -4,10 +4,7 @@ cmake_minimum_required(VERSION 3.3.0 FATAL_ERROR)
# enable Qt Widgets GUI
if(WIDGETS_GUI)
add_definitions(
-DGUI_QTWIDGETS
-DMODEL_UNDO_SUPPORT
)
list(APPEND META_PRIVATE_COMPILE_DEFINITIONS GUI_QTWIDGETS MODEL_UNDO_SUPPORT)
list(APPEND WIDGETS_FILES ${WIDGETS_HEADER_FILES} ${WIDGETS_SRC_FILES} ${WIDGETS_RES_FILES} ${WIDGETS_UI_FILES})
list(APPEND ADDITIONAL_HEADER_FILES ${WIDGETS_HEADER_FILES})
if(WIDGETS_FILES)
@ -22,9 +19,7 @@ endif()
# enable Qt Quick GUI
if(QUICK_GUI)
add_definitions(
-DGUI_QTQUICK
)
list(APPEND META_PRIVATE_COMPILE_DEFINITIONS GUI_QTQUICK)
list(APPEND QML_FILES ${QML_HEADER_FILES} ${QML_SRC_FILES} ${QML_RES_FILES})
list(APPEND ADDITIONAL_HEADER_FILES ${QML_HEADER_FILES})
if(QML_FILES)

View File

@ -1,3 +1,5 @@
cmake_minimum_required(VERSION 3.3.0 FATAL_ERROR)
# determines the Qt linkage
if(NOT DEFINED QT_LINKAGE_DETERMINED)
@ -36,6 +38,8 @@ if(NOT DEFINED QT_LINKAGE_DETERMINED)
set(QT5_${MODULE}_STATIC_LIB Qt5::static::${MODULE})
set(QT5_${MODULE}_ASSUME_STATIC OFF)
set(QT5_${MODULE}_FOUND ON)
# reverse lookup for pkg-config
set(PC_PKG_STATIC_Qt5_static_${MODULE} "StaticQt5${MODULE}")
else()
# consider the regular Qt package (without "Static" prefix) the static version if
# static Qt is required and Qt package with "Static" prefix doesn't exist
@ -46,6 +50,8 @@ if(NOT DEFINED QT_LINKAGE_DETERMINED)
set(QT5_${MODULE}_STATIC_LIB Qt5::${MODULE})
set(QT5_${MODULE}_ASSUME_STATIC ON)
set(QT5_${MODULE}_FOUND ON)
# reverse lookup for pkg-config
set(PC_PKG_STATIC_Qt5_${MODULE} "Qt5${MODULE}")
message(WARNING "Building static libs and/or static Qt linkage has been enabled. Hence assuming provided Qt 5 ${MODULE} library is static.")
endif()
endif()
@ -61,12 +67,18 @@ if(NOT DEFINED QT_LINKAGE_DETERMINED)
if(Qt5${MODULE}_FOUND)
set(QT5_${MODULE}_DYNAMIC_LIB Qt5::${MODULE})
set(QT5_${MODULE}_FOUND ON)
# reverse lookup for pkg-config
set(PC_PKG_SHARED_Qt5_${MODULE} "Qt5${MODULE}")
endif()
endif()
endmacro()
macro(use_qt5_module MODULE REQUIRED)
link_against_library("QT5_${MODULE}" "${QT_LINKAGE}" "${REQUIRED}")
if(${MODULE} IN_LIST META_PUBLIC_QT_MODULES)
list(APPEND META_PUBLIC_SHARED_LIB_DEPENDS ${QT5_${MODULE}_DYNAMIC_LIB})
list(APPEND META_PUBLIC_STATIC_LIB_DEPENDS ${QT5_${MODULE}_STATIC_LIB})
endif()
endmacro()
macro(use_static_qt5_plugin PLUGIN)

View File

@ -3,22 +3,22 @@
include(QtLinkage)
set(WEBVIEW_PROVIDER "auto" CACHE STRING "specifies the web view provider: auto (default), webkit, webengine or none")
if(${WEBVIEW_PROVIDER} STREQUAL "auto")
if(NOT WEBVIEW_PROVIDER OR "${WEBVIEW_PROVIDER}" STREQUAL "auto")
find_qt5_module(WebKitWidgets OPTIONAL)
if(QT5_WebKitWidgets_FOUND)
set(WEBVIEW_PROVIDER WebKitWidgets)
set(WEBVIEW_DEFINITION "-D${META_PROJECT_VARNAME_UPPER}_USE_WEBKIT")
set(WEBVIEW_DEFINITION "${META_PROJECT_VARNAME_UPPER}_USE_WEBKIT")
message(STATUS "No web view provider explicitly specified, defaulting to Qt WebKit.")
else()
find_qt5_module(WebEngineWidgets OPTIONAL)
if(QT5_WebEngineWidgets_FOUND)
set(WEBVIEW_PROVIDER WebEngineWidgets)
set(WEBVIEW_DEFINITION "-D${META_PROJECT_VARNAME_UPPER}_USE_WEBENGINE")
set(WEBVIEW_DEFINITION "${META_PROJECT_VARNAME_UPPER}_USE_WEBENGINE")
list(APPEND ADDITIONAL_QT_REPOS "webengine")
message(STATUS "No web view provider explicitly specified, defaulting to Qt WebEngine.")
else()
set(WEBVIEW_PROVIDER "")
set(WEBVIEW_DEFINITION "-D${META_PROJECT_VARNAME_UPPER}_NO_WEBVIEW")
set(WEBVIEW_DEFINITION "${META_PROJECT_VARNAME_UPPER}_NO_WEBVIEW")
message(STATUS "No web view provider available, web view has been disabled.")
endif()
endif()
@ -26,16 +26,16 @@ else()
if(${WEBVIEW_PROVIDER} STREQUAL "webkit")
find_qt5_module(WebKitWidgets REQUIRED)
set(WEBVIEW_PROVIDER WebKitWidgets)
set(WEBVIEW_DEFINITION "-D${META_PROJECT_VARNAME_UPPER}_USE_WEBKIT")
set(WEBVIEW_DEFINITION "${META_PROJECT_VARNAME_UPPER}_USE_WEBKIT")
message(STATUS "Using Qt WebKit as web view provider.")
elseif(${WEBVIEW_PROVIDER} STREQUAL "webengine")
find_qt5_module(WebEngineWidgets REQUIRED)
set(WEBVIEW_PROVIDER WebEngineWidgets)
set(WEBVIEW_DEFINITION "-D${META_PROJECT_VARNAME_UPPER}_USE_WEBENGINE")
set(WEBVIEW_DEFINITION "${META_PROJECT_VARNAME_UPPER}_USE_WEBENGINE")
list(APPEND ADDITIONAL_QT_REPOS "webengine")
message(STATUS "Using Qt WebEngine as web view provider.")
elseif(${WEBVIEW_PROVIDER} STREQUAL "none")
set(WEBVIEW_DEFINITION "-D${META_PROJECT_VARNAME_UPPER}_NO_WEBVIEW")
set(WEBVIEW_DEFINITION "${META_PROJECT_VARNAME_UPPER}_NO_WEBVIEW")
set(WEBVIEW_PROVIDER "")
message(STATUS "Web view has been disabled.")
else()
@ -44,6 +44,6 @@ else()
endif()
if(WEBVIEW_PROVIDER)
use_qt5_module(${WEBVIEW_PROVIDER} OPTIONAL)
use_qt5_module(${WEBVIEW_PROVIDER} REQUIRED)
endif()
add_definitions(${WEBVIEW_DEFINITION})
list(APPEND META_PRIVATE_COMPILE_DEFINITIONS ${WEBVIEW_DEFINITION})