43a36a682a
Change-Id: Ie76b25b605ab4271eff161ee9bfc4f54df640f4a Reviewed-by: Joerg Bornemann <joerg.bornemann@nokia.com> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
96 lines
4.1 KiB
Plaintext
96 lines
4.1 KiB
Plaintext
!build_pass {
|
|
|
|
QTDIR = $$[QT_HOST_PREFIX]
|
|
exists($$QTDIR/.qmake.cache) {
|
|
mod_component_base = $$QTDIR
|
|
mod_qmake_base = $$QTDIR
|
|
} else {
|
|
mod_component_base = $$MODULE_BASE_OUTDIR
|
|
mod_qmake_base = $$MODULE_QMAKE_OUTDIR
|
|
}
|
|
# Permit modules to enforce being built outside QTDIR.
|
|
force_independent: mod_component_base = $$MODULE_BASE_OUTDIR
|
|
|
|
isEmpty(MODULE_INSTALL_LIBS): MODULE_INSTALL_LIBS = $$[QT_INSTALL_LIBS]
|
|
|
|
MODULE_FWD_PRI = $$mod_qmake_base/mkspecs/modules/qt_$${MODULE}.pri
|
|
|
|
# -rpath-link is used by the linker to find depedencies of dynamic
|
|
# libraries which were NOT specified on the command line.
|
|
# This means that .libs of each module's regular .depends (QT) don't
|
|
# need to be put there, as they appear on the linker line anyway.
|
|
# A module's QT_PRIVATE's .libs OTOH need to be put there.
|
|
# .depends_private (QT_FOR_PRIVATE) is somewhat special: if the privates
|
|
# are used, the libraries are explicitly linked. If not, their locations
|
|
# need to be put into -rpath-link. As QT_FOR_PRIVATE cannot in turn
|
|
# contain privates, they always end up in -rpath-link of dependant
|
|
# modules.
|
|
# For simplicity of use, each module's rpath list has all dependencies
|
|
# transitively resolved already.
|
|
pubqt = $$MODULE_DEPENDS $$QT_FOR_PRIVATE
|
|
pubdep = $$resolve_depends(pubqt, "QT.")
|
|
privqt = $$replace(QT_PRIVATE, -private$, )
|
|
privdep = $$resolve_depends(privqt, "QT.")
|
|
rpaths =
|
|
pluginpath =
|
|
alldep = $$pubdep $$privdep
|
|
for(dep, alldep) { # Inherit link-rpaths from all our dependencies
|
|
rpaths += $$eval(QT.$${dep}.rpath_link) $$eval(QT.$${dep}.rpath_link_private)
|
|
pluginpath += $$eval(QT.$${dep}.plugin_path) $$eval(QT.$${dep}.plugins)
|
|
}
|
|
privdep -= $$pubdep
|
|
for(dep, privdep): \ # Add our private dependencies' lib paths as new link-rpaths
|
|
rpaths += $$eval(QT.$${dep}.libs)
|
|
!isEmpty(rpaths) {
|
|
rpaths = $$unique(rpaths)
|
|
module_rpathlink = "QT.$${MODULE}.rpath_link = $$val_escape(rpaths)"
|
|
} else {
|
|
module_rpathlink =
|
|
}
|
|
rpaths_priv =
|
|
xtradep = $$resolve_depends(QT_FOR_PRIVATE, "QT.")
|
|
for(dep, xtradep): \ # Add our private API's dependencies' lib paths as new link-rpaths
|
|
rpaths_priv += $$eval(QT.$${dep}.libs)
|
|
rpaths_priv = $$unique(rpaths_priv)
|
|
rpaths_priv -= $$rpaths
|
|
!isEmpty(rpaths_priv) {
|
|
module_rpathlink_priv = "QT.$${MODULE}.rpath_link_private = $$val_escape(rpaths_priv)"
|
|
} else {
|
|
module_rpathlink_priv =
|
|
}
|
|
pluginpath = $$unique(pluginpath)
|
|
|
|
# Create a forwarding module .pri file
|
|
MODULE_FWD_PRI_CONT = \
|
|
"QT_MODULE_BASE = $$MODULE_BASE_DIR" \
|
|
"QT_MODULE_BIN_BASE = $$mod_component_base/bin" \
|
|
"QT_MODULE_INCLUDE_BASE = $$mod_component_base/include" \
|
|
"QT_MODULE_IMPORT_BASE = $$mod_component_base/imports" \
|
|
"QT_MODULE_LIB_BASE = $$mod_component_base/lib" \
|
|
"QT_MODULE_PLUGIN_BASE = $$mod_component_base/plugins" \
|
|
$$module_rpathlink \
|
|
$$module_rpathlink_priv \
|
|
"QT.$${MODULE}.rpath = $$MODULE_INSTALL_LIBS" \
|
|
"QT.$${MODULE}.plugin_path = $$val_escape(pluginpath)" \
|
|
"include($$MODULE_PRI)"
|
|
write_file($$MODULE_FWD_PRI, MODULE_FWD_PRI_CONT)|error("Aborting.")
|
|
touch($$MODULE_FWD_PRI, $$MODULE_PRI)
|
|
|
|
# Then, inject the new module into the current cache state
|
|
!contains(QMAKE_INTERNAL_INCLUDED_FILES, $$MODULE_PRI) { # before the actual include()!
|
|
added = $$MODULE_PRI $$MODULE_FWD_PRI
|
|
cache(QMAKE_INTERNAL_INCLUDED_FILES, add transient, added)
|
|
unset(added)
|
|
}
|
|
include($$MODULE_FWD_PRI)
|
|
for(var, $$list(VERSION MAJOR_VERSION MINOR_VERSION PATCH_VERSION \
|
|
name depends private_depends module_config CONFIG DEFINES sources \
|
|
includes private_includes bins libs plugins imports \
|
|
)):defined(QT.$${MODULE}.$$var, var):cache(QT.$${MODULE}.$$var, transient)
|
|
cache(QT_CONFIG, transient)
|
|
|
|
} # !build_pass
|
|
|
|
# Schedule the regular .pri file for installation
|
|
CONFIG += qt_install_module
|