summaryrefslogtreecommitdiffstats
path: root/mkspecs/features/qt.prf
diff options
context:
space:
mode:
Diffstat (limited to 'mkspecs/features/qt.prf')
-rw-r--r--mkspecs/features/qt.prf82
1 files changed, 82 insertions, 0 deletions
diff --git a/mkspecs/features/qt.prf b/mkspecs/features/qt.prf
index dc80f8d9e1..04375d4ce1 100644
--- a/mkspecs/features/qt.prf
+++ b/mkspecs/features/qt.prf
@@ -73,6 +73,88 @@ wince*:static:gui {
QTLIB += qmenu_wce.res
}
+# static builds: link qml import plugins into the app.
+if(contains(QT, qml)|contains(QT_PRIVATE, qml)): \
+ contains(QT_CONFIG, static):contains(TEMPLATE, .*app):!host_build:!no_import_scan {
+ # run qmlimportscanner
+ qtPrepareTool(QMLIMPORTSCANNER, qmlimportscanner)
+ for (MODULE, QT_MODULES) {
+ PATH = $$eval(QT.$${MODULE}.qml)
+ !isEmpty(PATH): QMLPATHS += $$PATH
+ }
+ QMLPATHS = $$unique(QMLPATHS)
+ for (QMLPATH, QMLPATHS): \
+ IMPORTPATHS += -importPath $$QMLPATH
+
+ #message(run $$QMLIMPORTSCANNER $$_PRO_FILE_PWD_ $$IMPORTPATHS)
+ JSON = $$system($$QMLIMPORTSCANNER $$_PRO_FILE_PWD_ $$IMPORTPATHS)
+
+ parseJson(JSON, IMPORTS)| error("Failed to parse qmlimportscanner output.")
+
+ !isEmpty(IMPORTS._KEYS_) {
+ # add import plugins to LIBS line
+ for (key, IMPORTS._KEYS_): {
+ PATH = $$eval(IMPORTS.$${key}.path)
+ PLUGIN = $$eval(IMPORTS.$${key}.plugin)
+ !isEmpty(PATH):!isEmpty(PLUGIN): LIBS *= -L$$PATH -l$$PLUGIN
+ }
+
+ # create qml_plugin_import.cpp
+ IMPORT_FILE_CONT = \
+ "// This file is autogenerated by qmake. It imports static plugin classes for" \
+ "// static plugins used by QML imports." \
+ "$${LITERAL_HASH}include <QtPlugin>"
+ for (key, IMPORTS._KEYS_) {
+ PLUGIN = $$eval(IMPORTS.$${key}.plugin)
+ CLASSNAME = $$eval(IMPORTS.$${key}.classname)
+ !isEmpty(PLUGIN) {
+ !isEmpty(CLASSNAME) {
+ !contains(ADDED_IMPORTS, $$PLUGIN) {
+ ADDED_IMPORTS += $$PLUGIN
+ IMPORT_FILE_CONT += "Q_IMPORT_PLUGIN($$CLASSNAME)"
+ }
+ } else {
+ error("Plugin $$PLUGIN is missing a classname entry, please add one to the qmldir file.")
+ }
+ }
+ }
+ QML_IMPORT_CPP = $$OUT_PWD/$$lower($$basename(TARGET))_qml_plugin_import.cpp
+ write_file($$QML_IMPORT_CPP, IMPORT_FILE_CONT)|error("Aborting.")
+ SOURCES += $$QML_IMPORT_CPP
+ QMAKE_CLEAN += $$QML_IMPORT_CPP
+
+ # copy qml files. this part is platform spesific.
+ macx {
+ # copy to Contents/Resources in the bundle.
+ QmlImports.path = Contents/Resources/
+ QmlImports.files *= $$QMLPATHS
+ QMAKE_BUNDLE_DATA += QmlImports
+
+ # place qt.conf in Contents/Resources in the app bundle
+ QT_CONF_CONTENTS = \
+ "[Paths]" \
+ "Imports = Resources/qml" \
+ "Qml2Imports = Resources/qml"
+ QT_CONF = "$$OUT_PWD/$${TARGET}.app/Contents/Resources/qt.conf"
+ write_file($$QT_CONF, QT_CONF_CONTENTS)|error("Aborting.")
+ } else: ios {
+ # flat bundle layout (no Contents/Resources)
+ QmlImports.files *= $$QMLPATHS
+ QMAKE_BUNDLE_DATA += QmlImports
+
+ # write qt.conf to OUT_PWD and make xcode copy it via QMAKE_BUNDLE_DATA
+ QT_CONF_CONTENTS = \
+ "[Paths]" \
+ "Imports = qml" \
+ "Qml2Imports = qml"
+ QT_CONF = "$$OUT_PWD/qt.conf"
+ write_file($$QT_CONF, QT_CONF_CONTENTS)|error("Aborting.")
+ QtConf.files = $$QT_CONF
+ QMAKE_BUNDLE_DATA += QtConf
+ }
+ }
+}
+
QT_PLUGIN_VERIFY = DEPLOYMENT_PLUGIN
contains(QT_CONFIG, static) {
QT_PLUGIN_VERIFY += QTPLUGIN