ab17a3c3c4
the variable may contain a complex command, so an exists() check is doomed to failure if the tool is built dynamically. also, the check is not really necessary: it failing indicates a bug in the qt build system, and we don't really need to complicate the code to deal with such corner cases. Change-Id: I2e6087dcc6dd4a4f70bdf739550276f364c880dd Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
220 lines
8.6 KiB
Plaintext
220 lines
8.6 KiB
Plaintext
CONFIG *= thread
|
|
|
|
#handle defines
|
|
win32 {
|
|
contains(QT_CONFIG, shared) {
|
|
# this variable is read by qmake in qmake/generators/win32/msvc_vcproj.cpp
|
|
# function VcprojGenerator::initDeploymentTool(), which contains some hardcoded
|
|
# library names (the ones that were static in Qt 4)
|
|
# it probably doesn't work anymore and should not be in this file
|
|
QMAKE_QT_DLL = 1
|
|
}
|
|
}
|
|
CONFIG(release, debug|release):DEFINES += QT_NO_DEBUG
|
|
contains(QT_CONFIG, force_asserts):DEFINES += QT_FORCE_ASSERTS
|
|
no_keywords:DEFINES += QT_NO_KEYWORDS
|
|
plugin { #Qt plugins
|
|
static:DEFINES += QT_STATICPLUGIN
|
|
DEFINES += QT_PLUGIN
|
|
|
|
# Triggers both on Qt being configured with -arch boundschecker,
|
|
# and if you qmake CONFIG+=boundchecker on your plugin project
|
|
boundschecker|contains(QT_CONFIG,boundschecker) {
|
|
# This option is added for plugins when Qt is configured for Boundschecker,
|
|
# since we want Boundschecker to not instrument the qt_plugin_query_verification_data
|
|
# function, as we call that function without the plugin's dependent DLLs, thus
|
|
# Boundscheckers instrumentation will fail. The function only returns a const char *,
|
|
# so no instrumentation is really needed on that function anyways.
|
|
QMAKE_CFLAGS += /nmignore:*:qt_plugin_query_verification_data
|
|
QMAKE_CXXFLAGS += /nmignore:*:qt_plugin_query_verification_data
|
|
}
|
|
}
|
|
|
|
qtestlib {
|
|
warning("CONFIG+=qtestlib is deprecated. Use QT+=testlib instead.")
|
|
QT += testlib
|
|
}
|
|
qdbus {
|
|
warning("CONFIG+=qdbus is deprecated. Use QT+=dbus instead.")
|
|
QT += dbus
|
|
}
|
|
help {
|
|
warning("CONFIG+=help is deprecated. Use QT+=help instead.")
|
|
QT += help-private # sic!
|
|
}
|
|
designer {
|
|
warning("CONFIG+=designer is deprecated. Use QT+=designer instead.")
|
|
QT += designer
|
|
}
|
|
uitools {
|
|
warning("CONFIG+=uitools is deprecated. Use QT+=uitools instead.")
|
|
QT += uitools
|
|
}
|
|
qaxcontainer {
|
|
warning("CONFIG+=qaxcontainer is deprecated. Use QT+=axcontainer instead.")
|
|
QT += axcontainer
|
|
}
|
|
qaxserver {
|
|
warning("CONFIG+=qaxserver is deprecated. Use QT+=axserver instead.")
|
|
QT += axserver
|
|
}
|
|
|
|
unset(using_privates)
|
|
qtAddModules(QT, LIBS)
|
|
qtAddModules(QT_PRIVATE, LIBS_PRIVATE)
|
|
!isEmpty(using_privates):!auto_use_privates:!no_private_qt_headers_warning:if(!debug_and_release|!build_pass) {
|
|
message("This project is using private headers and will therefore be tied to this specific Qt module build version.")
|
|
message("Running this project against other versions of the Qt modules may crash at any arbitrary point.")
|
|
message("This is not a bug, but a result of using Qt internals. You have been warned!")
|
|
}
|
|
qtAddRpathLink($$QT $$QT_PRIVATE)
|
|
|
|
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
|
|
force_import_plugins|contains(TEMPLATE, .*app) {
|
|
needs_qpa_plugin:import_qpa_plugin {
|
|
qpa_minimal_plugin: \
|
|
QTPLUGIN += qminimal
|
|
else: \
|
|
QTPLUGIN += $$QT_DEFAULT_QPA_PLUGIN
|
|
}
|
|
import_plugins:!isEmpty(QTPLUGIN) {
|
|
IMPORT_FILE_CONT = \
|
|
"// This file is autogenerated by qmake. It imports static plugin classes for" \
|
|
"// static plugins specified using QTPLUGIN and QT_PLUGIN_CLASS.<plugin> variables." \
|
|
"$${LITERAL_HASH}include <QtPlugin>"
|
|
for(IMPORT_PLUG, $$list($$unique(QTPLUGIN))) {
|
|
PLUG_CLASS = $$eval(QT_PLUGIN.$${IMPORT_PLUG}.CLASS_NAME)
|
|
!isEmpty(PLUG_CLASS): \
|
|
IMPORT_FILE_CONT += "Q_IMPORT_PLUGIN($$PLUG_CLASS)"
|
|
else: \
|
|
warning("Plugin class name could not be determined for $$IMPORT_PLUG plugin.")
|
|
}
|
|
IMPORT_CPP = $$OUT_PWD/$$lower($$basename(TARGET))_plugin_import.cpp
|
|
write_file($$IMPORT_CPP, IMPORT_FILE_CONT)|error("Aborting.")
|
|
SOURCES += $$IMPORT_CPP
|
|
QMAKE_DISTCLEAN += $$IMPORT_CPP
|
|
}
|
|
}
|
|
}
|
|
|
|
for(QT_CURRENT_VERIFY, $$list($$QT_PLUGIN_VERIFY)) {
|
|
for(QTPLUG, $$list($$lower($$unique($$QT_CURRENT_VERIFY)))) {
|
|
# Check if the plugin is known to Qt. We can use this to determine
|
|
# the plugin path. Unknown plugins must rely on the default link path.
|
|
QT_PLUGINPATH = $$eval(QT_PLUGIN.$${QTPLUG}.TYPE)
|
|
|
|
# Generate the plugin linker line
|
|
target_qt:isEqual(TARGET, QTPLUG) {
|
|
warning($$TARGET cannot have a QTPLUGIN of $$QTPLUG)
|
|
} else {
|
|
QT_LINKAGE = -l$${QTPLUG}$$qtPlatformTargetSuffix()
|
|
}
|
|
|
|
# Only link against plugin in static builds
|
|
isEqual(QT_CURRENT_VERIFY, QTPLUGIN): {
|
|
!isEmpty(QT_PLUGINPATH): LIBS *= -L$$[QT_INSTALL_PLUGINS/get]/$$QT_PLUGINPATH
|
|
LIBS += $$QT_LINKAGE
|
|
# if the plugin is linked statically there is no need to deploy it
|
|
DEPLOYMENT_PLUGIN -= $$QT_CURRENT_VERIFY
|
|
}
|
|
isEqual(QT_CURRENT_VERIFY, DEPLOYMENT_PLUGIN):shared:if(wince*|winrt): {
|
|
QT_ITEM =
|
|
debug: QT_ITEM = $${QTPLUG}d4.dll
|
|
else: QT_ITEM = $${QTPLUG}4.dll
|
|
|
|
eval(qt_additional_plugin_$${QTPLUG}.files = $$[QT_INSTALL_PLUGINS/get]/$${QT_PLUGINPATH}/$${QT_ITEM})
|
|
eval(qt_additional_plugin_$${QTPLUG}.path = $${QT_PLUGINPATH})
|
|
|
|
DEPLOYMENT *= qt_additional_plugin_$${QTPLUG}
|
|
}
|
|
}
|
|
}
|