diff options
Diffstat (limited to 'mkspecs/features')
-rw-r--r-- | mkspecs/features/create_cmake.prf | 48 | ||||
-rw-r--r-- | mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in | 22 | ||||
-rw-r--r-- | mkspecs/features/data/cmake/Qt5PluginTarget.cmake.in | 11 | ||||
-rw-r--r-- | mkspecs/features/qt_plugin.prf | 2 |
4 files changed, 83 insertions, 0 deletions
diff --git a/mkspecs/features/create_cmake.prf b/mkspecs/features/create_cmake.prf index 9e76dd7d3a..5bc7cc81b1 100644 --- a/mkspecs/features/create_cmake.prf +++ b/mkspecs/features/create_cmake.prf @@ -62,6 +62,12 @@ contains(CMAKE_BIN_DIR, "^\\.\\./.*") { CMAKE_BIN_DIR_IS_ABSOLUTE = True } +CMAKE_PLUGIN_DIR = $$cmakeRelativePath($$[QT_INSTALL_PLUGINS], $$[QT_INSTALL_PREFIX]) +contains(CMAKE_PLUGIN_DIR, "^\\.\\./.*") { + CMAKE_PLUGIN_DIR = $$[QT_INSTALL_PLUGINS]/ + CMAKE_PLUGIN_DIR_IS_ABSOLUTE = True +} + !isEmpty(DLLDESTDIR):!static:!staticlib { CMAKE_DLL_DIR = $$cmakeRelativePath($$[QT_INSTALL_BINS], $$[QT_INSTALL_PREFIX]) contains(CMAKE_DLL_DIR, "^\\.\\./.*") { @@ -96,6 +102,48 @@ equals(QMAKE_HOST.os, Windows): CMAKE_BIN_SUFFIX = ".exe" if(build_all|CONFIG(debug, debug|release)): CMAKE_DEBUG_TYPE = debug if(build_all|CONFIG(release, debug|release)): CMAKE_RELEASE_TYPE = release +contains(CONFIG, plugin) { + equals(PLUGIN_TYPE, bearer): PLUGIN_MODULE_NAME = network + else:equals(PLUGIN_TYPE, sqldrivers): PLUGIN_MODULE_NAME = sql + else:equals(PLUGIN_TYPE, accessible): PLUGIN_MODULE_NAME = widgets + else:equals(PLUGIN_TYPE, imageformats): PLUGIN_MODULE_NAME = gui + else:equals(PLUGIN_TYPE, platforminputcontexts): PLUGIN_MODULE_NAME = gui + else:equals(PLUGIN_TYPE, platformthemes): PLUGIN_MODULE_NAME = gui + else:equals(PLUGIN_TYPE, generic): PLUGIN_MODULE_NAME = gui + else:equals(PLUGIN_TYPE, platforms): PLUGIN_MODULE_NAME = gui + else: return() + + CMAKE_MODULE_NAME = $$cmakeModuleName($$PLUGIN_MODULE_NAME) + + CMAKE_PLUGIN_NAME = $$PLUGIN_CLASS_NAME + + win32 { + CMAKE_PLUGIN_LOCATION_RELEASE = $$PLUGIN_TYPE/$${TARGET}.dll + CMAKE_PLUGIN_LOCATION_DEBUG = $$PLUGIN_TYPE/$${TARGET}d.dll + } else { + mac { + CMAKE_PLUGIN_LOCATION_RELEASE = $$PLUGIN_TYPE/lib$${TARGET}.dylib + CMAKE_PLUGIN_LOCATION_DEBUG = $$PLUGIN_TYPE/lib$${TARGET}.dylib + } else { + CMAKE_PLUGIN_LOCATION_RELEASE = $$PLUGIN_TYPE/lib$${TARGET}.so + CMAKE_PLUGIN_LOCATION_DEBUG = $$PLUGIN_TYPE/lib$${TARGET}.so + } + } + cmake_target_file.input = $$PWD/data/cmake/Qt5PluginTarget.cmake.in + cmake_target_file.output = $$DESTDIR/../../$${CMAKE_LIB_DIR}cmake/Qt5$${CMAKE_MODULE_NAME}/Qt5$${CMAKE_MODULE_NAME}_$${PLUGIN_CLASS_NAME}.cmake + + !build_pass:QMAKE_SUBSTITUTES += \ + cmake_target_file + + cmake_qt5_plugin_file.files = $$cmake_target_file.output + cmake_qt5_plugin_file.path = $$[QT_INSTALL_LIBS]/cmake/Qt5$${CMAKE_MODULE_NAME} + INSTALLS += cmake_qt5_plugin_file + + return() +} + +contains($$list(network sql widgets gui), $$MODULE): CMAKE_LOAD_PLUGINS = true + unix:contains(QT_CONFIG, reduce_relocations):CMAKE_ADD_FPIE_FLAGS = "true" CMAKE_MKSPEC = $$[QMAKE_XSPEC] diff --git a/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in b/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in index 657c7c642d..245c0ae768 100644 --- a/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in +++ b/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in @@ -288,6 +288,28 @@ if (NOT TARGET Qt5::$${CMAKE_MODULE_NAME}) !!ENDIF // CMAKE_DEBUG_TYPE +!!IF !isEmpty(CMAKE_LOAD_PLUGINS) + + macro(_populate_$${CMAKE_MODULE_NAME}_plugin_properties Plugin Configuration PLUGIN_LOCATION) + set_property(TARGET Qt5::${Plugin} APPEND PROPERTY IMPORTED_CONFIGURATIONS ${Configuration}) + +!!IF isEmpty(CMAKE_PLUGIN_DIR_IS_ABSOLUTE) + set(imported_location \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_PLUGIN_DIR}${PLUGIN_LOCATION}\") +!!ELSE + set(imported_location \"$${CMAKE_PLUGIN_DIR}${PLUGIN_LOCATION}\") +!!ENDIF + _qt5_$${CMAKE_MODULE_NAME}_check_file_exists(${imported_location}) + set_target_properties(Qt5::${Plugin} PROPERTIES + \"IMPORTED_LOCATION_${Configuration}\" ${imported_location} + ) + endmacro() + + file(GLOB pluginTargets \"${CMAKE_CURRENT_LIST_DIR}/Qt5$${CMAKE_MODULE_NAME}_*Plugin.cmake\") + foreach(pluginTarget ${pluginTargets}) + include(${pluginTarget}) + endforeach() +!!ENDIF + !!IF !isEmpty(CMAKE_MODULE_EXTRAS) include(\"${CMAKE_CURRENT_LIST_DIR}/Qt5$${CMAKE_MODULE_NAME}ConfigExtras.cmake\") !!ENDIF diff --git a/mkspecs/features/data/cmake/Qt5PluginTarget.cmake.in b/mkspecs/features/data/cmake/Qt5PluginTarget.cmake.in new file mode 100644 index 0000000000..5baf0fdb10 --- /dev/null +++ b/mkspecs/features/data/cmake/Qt5PluginTarget.cmake.in @@ -0,0 +1,11 @@ + +add_library(Qt5::$$CMAKE_PLUGIN_NAME MODULE IMPORTED) + +!!IF !isEmpty(CMAKE_RELEASE_TYPE) +_populate_$${CMAKE_MODULE_NAME}_plugin_properties($$CMAKE_PLUGIN_NAME RELEASE \"$${CMAKE_PLUGIN_LOCATION_RELEASE}\") +!!ENDIF +!!IF !isEmpty(CMAKE_DEBUG_TYPE) +_populate_$${CMAKE_MODULE_NAME}_plugin_properties($$CMAKE_PLUGIN_NAME DEBUG \"$${CMAKE_PLUGIN_LOCATION_DEBUG}\") +!!ENDIF + +list(APPEND Qt5$${CMAKE_MODULE_NAME}_PLUGINS Qt5::$$CMAKE_PLUGIN_NAME) diff --git a/mkspecs/features/qt_plugin.prf b/mkspecs/features/qt_plugin.prf index 9f4882c5db..c9fe22688b 100644 --- a/mkspecs/features/qt_plugin.prf +++ b/mkspecs/features/qt_plugin.prf @@ -47,6 +47,8 @@ INSTALLS += target TARGET = $$qtLibraryTarget($$TARGET) +CONFIG += create_cmake + load(qt_targets) load(qt_common) |