summaryrefslogtreecommitdiffstats
path: root/mkspecs
diff options
context:
space:
mode:
authorSergio Ahumada <sergio.ahumada@digia.com>2013-01-31 18:55:53 +0100
committerSergio Ahumada <sergio.ahumada@digia.com>2013-01-31 18:55:53 +0100
commit6239af6f0f15871e02a516c97c5f1775743d352b (patch)
tree904e3e5df8c6f3e4aa820db4f2d9e73e3026dfd4 /mkspecs
parent3dc47622a469ded1c99397fdedc2053b73d57189 (diff)
parent6654a05fcad565a302e205e7f7deaa0b2757082d (diff)
Merge branch 'release' into stable
Diffstat (limited to 'mkspecs')
-rw-r--r--mkspecs/features/qml_module.prf2
-rw-r--r--mkspecs/features/qt_build_config.prf5
-rw-r--r--mkspecs/features/qt_build_paths.prf4
-rw-r--r--mkspecs/features/qt_example_installs.prf50
-rw-r--r--mkspecs/features/qt_module.prf66
-rw-r--r--mkspecs/features/qt_module_fwdpri.prf92
-rw-r--r--mkspecs/features/qt_module_pris.prf160
-rw-r--r--mkspecs/features/qt_tool.prf2
8 files changed, 206 insertions, 175 deletions
diff --git a/mkspecs/features/qml_module.prf b/mkspecs/features/qml_module.prf
index e7d0b386b1..db5f6787b3 100644
--- a/mkspecs/features/qml_module.prf
+++ b/mkspecs/features/qml_module.prf
@@ -25,7 +25,7 @@ qml1_target: \
else: \
instbase = $$[QT_INSTALL_QML]
-exists($$[QT_HOST_PREFIX]/.qmake.cache) {
+!prefix_build {
# These bizarre rules copy the files to the qtbase build directory
defineReplace(qmlModStripSrcDir) {
diff --git a/mkspecs/features/qt_build_config.prf b/mkspecs/features/qt_build_config.prf
index 48d6001aa9..4f5b62e1e5 100644
--- a/mkspecs/features/qt_build_config.prf
+++ b/mkspecs/features/qt_build_config.prf
@@ -20,7 +20,10 @@
debug(1, "Not loading qmodule.pri twice")
}
-!build_pass:!isEmpty(_QMAKE_SUPER_CACHE_):!exists($$[QT_HOST_DATA]/.qmake.cache) {
+!exists($$[QT_HOST_DATA]/.qmake.cache): \
+ CONFIG += prefix_build
+
+!build_pass:!isEmpty(_QMAKE_SUPER_CACHE_):prefix_build {
# When doing a -prefix build of top-level qt5/qt.pro, we need to announce
# this repo's module pris' location to the other repos.
isEmpty(MODULE_QMAKE_OUTDIR): MODULE_QMAKE_OUTDIR = $$shadowed($$dirname(_QMAKE_CONF_))
diff --git a/mkspecs/features/qt_build_paths.prf b/mkspecs/features/qt_build_paths.prf
index 123c87de3b..03b43e3153 100644
--- a/mkspecs/features/qt_build_paths.prf
+++ b/mkspecs/features/qt_build_paths.prf
@@ -16,8 +16,8 @@ isEmpty(MODULE_BASE_DIR): MODULE_BASE_DIR = $$MODULE_PROFILE_DIR
isEmpty(MODULE_BASE_OUTDIR): MODULE_BASE_OUTDIR = $$shadowed($$MODULE_BASE_DIR)
isEmpty(MODULE_QMAKE_OUTDIR): MODULE_QMAKE_OUTDIR = $$MODULE_BASE_OUTDIR
-QTDIR = $$[QT_HOST_PREFIX]
-exists($$QTDIR/.qmake.cache) {
+!prefix_build {
+ QTDIR = $$[QT_HOST_PREFIX]
# Permit modules to enforce being built outside QTDIR ...
!force_independent: MODULE_BASE_OUTDIR = $$QTDIR
# ... though this sort of breaks the idea.
diff --git a/mkspecs/features/qt_example_installs.prf b/mkspecs/features/qt_example_installs.prf
index 5417469909..ccb19fcbd4 100644
--- a/mkspecs/features/qt_example_installs.prf
+++ b/mkspecs/features/qt_example_installs.prf
@@ -9,6 +9,22 @@
# We mean it.
#
+defineTest(addInstallFiles) {
+ for(sf, 2) {
+ sf = $$relative_path($$sf, $$_PRO_FILE_PWD_)
+ contains(sf, \\..*) {
+ check_examples: message("Notice: $$_PRO_FILE_ refers to $$sf")
+ } else {
+ sfp = $$replace(sf, /.*, )
+ !equals(sfp, $$sf): \
+ $$1 *= $$sfp
+ else: \
+ $$1 += $$sf
+ }
+ }
+ export($$1)
+}
+
probase = $$relative_path($$_PRO_FILE_PWD_, $$dirname(_QMAKE_CONF_)/examples)
!isEmpty(probase):!contains(probase, ^\\..*) {
for(ex, EXAMPLE_FILES): \
@@ -42,34 +58,26 @@ probase = $$relative_path($$_PRO_FILE_PWD_, $$dirname(_QMAKE_CONF_)/examples)
# Just for Qt Creator
OTHER_FILES += $$sourcefiles
- for(inst, INSTALLS): \
- !equals(inst, target):!contains($${inst}.CONFIG, no_check_exist): \
- for(file, $${inst}.files): \
- sourcefiles += $$files($$absolute_path($$file, $$_PRO_FILE_PWD_))
sourcefiles += \
$$_PRO_FILE_ $$RC_FILE $$DEF_FILE \
$$SOURCES $$HEADERS $$FORMS $$RESOURCES $$TRANSLATIONS \
$$DBUS_ADAPTORS $$DBUS_INTERFACES
- for(sf, sourcefiles) {
- sf = $$relative_path($$sf, $$_PRO_FILE_PWD_)
- contains(sf, \\..*) {
- check_examples: message("Notice: $$_PRO_FILE_ refers to $$sf")
- } else {
- sfp = $$replace(sf, /.*, )
- !equals(sfp, $$sf): \
- sources.files *= $$sfp
- else: \
- sources.files += $$sf
- }
- }
+ addInstallFiles(sources.files, $$sourcefiles)
sources.path = $$[QT_INSTALL_EXAMPLES]/$$probase
INSTALLS += sources
check_examples {
+ srcfiles = $$sources.files
+ for(inst, INSTALLS): \
+ !equals(inst, target):!contains($${inst}.CONFIG, no_check_exist): \
+ for(file, $${inst}.files): \
+ instfiles += $$files($$absolute_path($$file, $$_PRO_FILE_PWD_))
+ addInstallFiles(srcfiles, $$instfiles)
+
thefiles = $$files($$_PRO_FILE_PWD_/*)
for(i, thefiles): \
allfiles += $$relative_path($$i, $$_PRO_FILE_PWD_)
- for(i, sources.files): \
+ for(i, srcfiles): \
allfiles -= $$relative_path($$i, $$_PRO_FILE_PWD_)
for(i, SUBDIRS) {
sd = $$eval($${i}.file)
@@ -84,4 +92,12 @@ probase = $$relative_path($$_PRO_FILE_PWD_, $$dirname(_QMAKE_CONF_)/examples)
allfiles -= doc
!isEmpty(allfiles): warning("remaining files in $$_PRO_FILE_PWD_: $$allfiles")
}
+
+ # Do not actually build the examples in production builds
+ !equals(TEMPLATE, subdirs):!contains(QT_CONFIG, private_tests) {
+ TEMPLATE = aux
+ CONFIG -= have_target qt staticlib dll
+ SOURCES =
+ INSTALLS -= target
+ }
}
diff --git a/mkspecs/features/qt_module.prf b/mkspecs/features/qt_module.prf
index 8d436e63c5..8dce2634ca 100644
--- a/mkspecs/features/qt_module.prf
+++ b/mkspecs/features/qt_module.prf
@@ -45,65 +45,7 @@ else: \
MODULE_DEFINE = QT_$${ucmodule}_LIB
MODULE_DEFINES = $$MODULE_DEFINE $$MODULE_DEFINES
-load(qt_build_paths)
-MODULE_PRI = $$MODULE_QMAKE_OUTDIR/mkspecs/modules-inst/qt_lib_$${MODULE}.pri
-
-!build_pass {
-
- # Create a module .pri file
- unix:!static: \
- module_rpath = "QT.$${MODULE}.rpath = $$[QT_INSTALL_LIBS/raw]"
- else: \
- module_rpath =
- !isEmpty(QT_FOR_PRIVATE) {
- contains(QT_FOR_PRIVATE, .*-private$):error("QT_FOR_PRIVATE may not contain *-private.")
- module_privdep = "QT.$${MODULE}.private_depends = $$QT_FOR_PRIVATE"
- } else {
- module_privdep =
- }
- static: \
- module_build_type = "QT.$${MODULE}.module_config = staticlib"
- else:mac:contains(QT_CONFIG, qt_framework): \
- module_build_type = "QT.$${MODULE}.module_config = lib_bundle"
- else: \
- module_build_type =
- !isEmpty(MODULE_CONFIG): \
- module_config = "QT.$${MODULE}.CONFIG = $$MODULE_CONFIG"
- else: \
- module_config =
- !no_module_headers {
- MODULE_INCLUDES = "\$\$QT_MODULE_INCLUDE_BASE \$\$QT_MODULE_INCLUDE_BASE/$$MODULE_INCNAME"
- MODULE_PRIVATE_INCLUDES = "\$\$QT_MODULE_INCLUDE_BASE/$$MODULE_INCNAME/$$VERSION \
- \$\$QT_MODULE_INCLUDE_BASE/$$MODULE_INCNAME/$$VERSION/$$MODULE_INCNAME"
- }
- MODULE_PRI_CONT = \
- "QT.$${MODULE}.VERSION = $${VERSION}" \
- "QT.$${MODULE}.MAJOR_VERSION = $$section(VERSION, ., 0, 0)" \
- "QT.$${MODULE}.MINOR_VERSION = $$section(VERSION, ., 1, 1)" \
- "QT.$${MODULE}.PATCH_VERSION = $$section(VERSION, ., 2, 2)" \
- "" \
- "QT.$${MODULE}.name = $$TARGET" \
- "QT.$${MODULE}.bins = \$\$QT_MODULE_BIN_BASE" \
- "QT.$${MODULE}.includes = $$MODULE_INCLUDES" \
- "QT.$${MODULE}.private_includes = $$MODULE_PRIVATE_INCLUDES" \
- "QT.$${MODULE}.libs = \$\$QT_MODULE_LIB_BASE" \
- "QT.$${MODULE}.libexecs = \$\$QT_MODULE_LIBEXEC_BASE" \
- $$module_rpath \
- "QT.$${MODULE}.plugins = \$\$QT_MODULE_PLUGIN_BASE" \
- "QT.$${MODULE}.imports = \$\$QT_MODULE_IMPORT_BASE" \
- "QT.$${MODULE}.qml = \$\$QT_MODULE_QML_BASE" \
- "QT.$${MODULE}.depends =$$join(MODULE_DEPENDS, " ", " ")" \
- $$module_privdep \
- $$module_build_type \
- $$module_config \
- "QT.$${MODULE}.DEFINES = $$MODULE_DEFINES" \ # assume sufficient quoting
- "" \
- "QT_CONFIG += $$MODULE" # this is obsolete, but some code still depends on it
- write_file($$MODULE_PRI, MODULE_PRI_CONT)|error("Aborting.")
-
-} # !build_pass
-
-load(qt_module_fwdpri)
+load(qt_module_pris)
INCLUDEPATH *= $$eval(QT.$${MODULE}.includes) $$eval(QT.$${MODULE}.private_includes)
@@ -112,7 +54,7 @@ INCLUDEPATH *= $$eval(QT.$${MODULE}.includes) $$eval(QT.$${MODULE}.private_inclu
#other
TEMPLATE = lib
DESTDIR = $$eval(QT.$${MODULE}.libs)
-win32:!wince*:exists($$[QT_INSTALL_PREFIX]/.qmake.cache): DLLDESTDIR = $$eval(QT.$${MODULE}.bins)
+win32:!wince*:!prefix_build: DLLDESTDIR = $$eval(QT.$${MODULE}.bins)
CONFIG += qmake_cache target_qt
@@ -206,7 +148,9 @@ unix {
}
unix|win32-g++* {
- for(i, QT):QMAKE_PKGCONFIG_REQUIRES += $$eval(QT.$${i}.name)
+ QMAKE_PKGCONFIG_NAME = $$replace(TARGET, ^Qt, Qt$$section(VERSION, ., 0, 0))
+ for(i, MODULE_DEPENDS): \
+ QMAKE_PKGCONFIG_REQUIRES += $$replace(QT.$${i}.name, ^Qt, Qt$$eval(QT.$${i}.MAJOR_VERSION))
isEmpty(QMAKE_PKGCONFIG_DESCRIPTION): \
QMAKE_PKGCONFIG_DESCRIPTION = $$replace(TARGET, ^Qt, "Qt ") module
}
diff --git a/mkspecs/features/qt_module_fwdpri.prf b/mkspecs/features/qt_module_fwdpri.prf
deleted file mode 100644
index 58b016803e..0000000000
--- a/mkspecs/features/qt_module_fwdpri.prf
+++ /dev/null
@@ -1,92 +0,0 @@
-#
-# W A R N I N G
-# -------------
-#
-# This file is not part of the Qt API. It exists purely as an
-# implementation detail. It may change from version to version
-# without notice, or even be removed.
-#
-# We mean it.
-#
-
-!build_pass {
-
- load(qt_build_paths)
-
- MODULE_FWD_PRI = $$MODULE_QMAKE_OUTDIR/mkspecs/modules/qt_lib_$${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 =
- 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)
- }
- 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 =
- }
-
- # Create a forwarding module .pri file
- MODULE_FWD_PRI_CONT = \
- "QT_MODULE_BIN_BASE = $$MODULE_BASE_OUTDIR/bin" \
- "QT_MODULE_INCLUDE_BASE = $$MODULE_BASE_OUTDIR/include" \
- "QT_MODULE_IMPORT_BASE = $$MODULE_BASE_OUTDIR/imports" \
- "QT_MODULE_QML_BASE = $$MODULE_BASE_OUTDIR/qml" \
- "QT_MODULE_LIB_BASE = $$MODULE_BASE_OUTDIR/lib" \
- "QT_MODULE_LIBEXEC_BASE = $$MODULE_BASE_OUTDIR/libexec" \
- "QT_MODULE_PLUGIN_BASE = $$MODULE_BASE_OUTDIR/plugins" \
- $$module_rpathlink \
- $$module_rpathlink_priv \
- "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 libexecs plugins imports qml \
- rpath_link rpath_link_private \
- )):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
diff --git a/mkspecs/features/qt_module_pris.prf b/mkspecs/features/qt_module_pris.prf
new file mode 100644
index 0000000000..7b5ccc0983
--- /dev/null
+++ b/mkspecs/features/qt_module_pris.prf
@@ -0,0 +1,160 @@
+#
+# W A R N I N G
+# -------------
+#
+# This file is not part of the Qt API. It exists purely as an
+# implementation detail. It may change from version to version
+# without notice, or even be removed.
+#
+# We mean it.
+#
+
+load(qt_build_paths)
+MODULE_FWD_PRI = $$MODULE_QMAKE_OUTDIR/mkspecs/modules/qt_lib_$${MODULE}.pri
+prefix_build: \
+ MODULE_PRI = $$MODULE_QMAKE_OUTDIR/mkspecs/modules-inst/qt_lib_$${MODULE}.pri
+else: \
+ MODULE_PRI = $$MODULE_FWD_PRI
+
+!build_pass {
+
+ # Create a module .pri file
+ unix:!static: \
+ module_rpath = "QT.$${MODULE}.rpath = $$[QT_INSTALL_LIBS/raw]"
+ else: \
+ module_rpath =
+ !isEmpty(QT_FOR_PRIVATE) {
+ contains(QT_FOR_PRIVATE, .*-private$):error("QT_FOR_PRIVATE may not contain *-private.")
+ module_privdep = "QT.$${MODULE}.private_depends = $$QT_FOR_PRIVATE"
+ } else {
+ module_privdep =
+ }
+ static: \
+ module_build_type = "QT.$${MODULE}.module_config = staticlib"
+ else:mac:contains(QT_CONFIG, qt_framework): \
+ module_build_type = "QT.$${MODULE}.module_config = lib_bundle"
+ else: \
+ module_build_type =
+ !isEmpty(MODULE_CONFIG): \
+ module_config = "QT.$${MODULE}.CONFIG = $$MODULE_CONFIG"
+ else: \
+ module_config =
+ !no_module_headers {
+ MODULE_INCLUDES = "\$\$QT_MODULE_INCLUDE_BASE \$\$QT_MODULE_INCLUDE_BASE/$$MODULE_INCNAME"
+ MODULE_PRIVATE_INCLUDES = "\$\$QT_MODULE_INCLUDE_BASE/$$MODULE_INCNAME/$$VERSION \
+ \$\$QT_MODULE_INCLUDE_BASE/$$MODULE_INCNAME/$$VERSION/$$MODULE_INCNAME"
+ }
+ MODULE_PRI_CONT = \
+ "QT.$${MODULE}.VERSION = $${VERSION}" \
+ "QT.$${MODULE}.MAJOR_VERSION = $$section(VERSION, ., 0, 0)" \
+ "QT.$${MODULE}.MINOR_VERSION = $$section(VERSION, ., 1, 1)" \
+ "QT.$${MODULE}.PATCH_VERSION = $$section(VERSION, ., 2, 2)" \
+ "" \
+ "QT.$${MODULE}.name = $$TARGET" \
+ "QT.$${MODULE}.bins = \$\$QT_MODULE_BIN_BASE" \
+ "QT.$${MODULE}.includes = $$MODULE_INCLUDES" \
+ "QT.$${MODULE}.private_includes = $$MODULE_PRIVATE_INCLUDES" \
+ "QT.$${MODULE}.libs = \$\$QT_MODULE_LIB_BASE" \
+ "QT.$${MODULE}.libexecs = \$\$QT_MODULE_LIBEXEC_BASE" \
+ $$module_rpath \
+ "QT.$${MODULE}.plugins = \$\$QT_MODULE_PLUGIN_BASE" \
+ "QT.$${MODULE}.imports = \$\$QT_MODULE_IMPORT_BASE" \
+ "QT.$${MODULE}.qml = \$\$QT_MODULE_QML_BASE" \
+ "QT.$${MODULE}.depends =$$join(MODULE_DEPENDS, " ", " ")" \
+ $$module_privdep \
+ $$module_build_type \
+ $$module_config \
+ "QT.$${MODULE}.DEFINES = $$MODULE_DEFINES" \ # assume sufficient quoting
+ "" \
+ "QT_CONFIG += $$MODULE" # this is obsolete, but some code still depends on it
+ write_file($$MODULE_PRI, MODULE_PRI_CONT)|error("Aborting.")
+ MODULE_PRI_FILES = $$MODULE_PRI
+
+ prefix_build {
+
+ # -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 =
+ 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)
+ }
+ 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 =
+ }
+
+ # Create a forwarding module .pri file
+ MODULE_FWD_PRI_CONT = \
+ "QT_MODULE_BIN_BASE = $$MODULE_BASE_OUTDIR/bin" \
+ "QT_MODULE_INCLUDE_BASE = $$MODULE_BASE_OUTDIR/include" \
+ "QT_MODULE_IMPORT_BASE = $$MODULE_BASE_OUTDIR/imports" \
+ "QT_MODULE_QML_BASE = $$MODULE_BASE_OUTDIR/qml" \
+ "QT_MODULE_LIB_BASE = $$MODULE_BASE_OUTDIR/lib" \
+ "QT_MODULE_LIBEXEC_BASE = $$MODULE_BASE_OUTDIR/libexec" \
+ "QT_MODULE_PLUGIN_BASE = $$MODULE_BASE_OUTDIR/plugins" \
+ $$module_rpathlink \
+ $$module_rpathlink_priv \
+ "include($$MODULE_PRI)"
+ write_file($$MODULE_FWD_PRI, MODULE_FWD_PRI_CONT)|error("Aborting.")
+ touch($$MODULE_FWD_PRI, $$MODULE_PRI)
+ MODULE_PRI_FILES += $$MODULE_FWD_PRI
+
+ } else { # prefix_build
+
+ # This is needed for the direct include() below.
+ QT_MODULE_BIN_BASE = $$[QT_INSTALL_BINS]
+ QT_MODULE_INCLUDE_BASE = $$[QT_INSTALL_HEADERS]
+ QT_MODULE_IMPORT_BASE = $$[QT_INSTALL_IMPORTS]
+ QT_MODULE_QML_BASE = $$[QT_INSTALL_QML]
+ QT_MODULE_LIB_BASE = $$[QT_INSTALL_LIBS]
+ QT_MODULE_LIBEXEC_BASE = $$[QT_INSTALL_LIBEXECS]
+ QT_MODULE_PLUGIN_BASE = $$[QT_INSTALL_PLUGINS]
+
+ }
+
+ # Then, inject the new module into the current cache state
+ !contains(QMAKE_INTERNAL_INCLUDED_FILES, $$MODULE_PRI): \ # before the actual include()!
+ cache(QMAKE_INTERNAL_INCLUDED_FILES, add transient, MODULE_PRI_FILES)
+ 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 libexecs plugins imports qml \
+ rpath_link rpath_link_private \
+ )):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
diff --git a/mkspecs/features/qt_tool.prf b/mkspecs/features/qt_tool.prf
index 16db6c7972..b449e4074d 100644
--- a/mkspecs/features/qt_tool.prf
+++ b/mkspecs/features/qt_tool.prf
@@ -31,7 +31,7 @@ load(qt_targets)
# If we are doing a prefix build, create a "module" pri which enables
# qtPrepareTool() to work with the non-installed build.
-!build_pass:!exists($$[QT_INSTALL_PREFIX]/.qmake.cache) {
+!build_pass:prefix_build {
isEmpty(MODULE):MODULE = $$TARGET