diff options
author | Liang Qi <liang.qi@theqtcompany.com> | 2016-01-21 08:17:21 +0100 |
---|---|---|
committer | Liang Qi <liang.qi@theqtcompany.com> | 2016-01-21 08:17:21 +0100 |
commit | 158a3a4159bdc5a49caecd63e021dacbc06cf23c (patch) | |
tree | c3ed9aee6cabd46e5e8615b3815b92d32857c4da /mkspecs/features | |
parent | 26ece94a68fb5ae680c5639716b06c4e1ae979a8 (diff) | |
parent | 7b2fb038ae4b8b9231ae989ad309b6eca107a858 (diff) |
Merge remote-tracking branch 'origin/5.6' into dev
Conflicts:
src/corelib/io/qiodevice_p.h
src/corelib/kernel/qvariant_p.h
src/corelib/tools/qsimd.cpp
src/gui/kernel/qguiapplication.cpp
tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp
Change-Id: I742a093cbb231b282b43e463ec67173e0d29f57a
Diffstat (limited to 'mkspecs/features')
-rw-r--r-- | mkspecs/features/ctest_testcase_common.prf | 1 | ||||
-rw-r--r-- | mkspecs/features/qt.prf | 78 | ||||
-rw-r--r-- | mkspecs/features/qt_build_config.prf | 6 | ||||
-rw-r--r-- | mkspecs/features/qt_clear_installs.prf | 12 | ||||
-rw-r--r-- | mkspecs/features/qt_functions.prf | 3 | ||||
-rw-r--r-- | mkspecs/features/qt_module.prf | 6 | ||||
-rw-r--r-- | mkspecs/features/qt_module_headers.prf | 62 | ||||
-rw-r--r-- | mkspecs/features/qt_module_pris.prf | 78 |
8 files changed, 163 insertions, 83 deletions
diff --git a/mkspecs/features/ctest_testcase_common.prf b/mkspecs/features/ctest_testcase_common.prf index bdf40541ec..7183ade4df 100644 --- a/mkspecs/features/ctest_testcase_common.prf +++ b/mkspecs/features/ctest_testcase_common.prf @@ -56,6 +56,7 @@ mingw:isEmpty(CROSS_COMPILE):CMAKE_GENERATOR = -G \"MinGW Makefiles\" BUILD_DIR = $$replace($$list($$OUT_PWD/build), /, $$QMAKE_DIR_SEP) +!qtHaveModule(gui): CMAKE_MODULE_DEFINES += -DNO_GUI=True !qtHaveModule(widgets): CMAKE_MODULE_DEFINES += -DNO_WIDGETS=True !qtHaveModule(dbus): CMAKE_MODULE_DEFINES += -DNO_DBUS=True diff --git a/mkspecs/features/qt.prf b/mkspecs/features/qt.prf index 3c9ab79b27..4b40451c96 100644 --- a/mkspecs/features/qt.prf +++ b/mkspecs/features/qt.prf @@ -67,8 +67,10 @@ for(ever) { unset(BAD_QT) for(QTLIB, FULL_QT$$var_sfx) { MODULE_NAME = $$eval(QT.$${QTLIB}.name) + MODULE_MODULE = $$eval(QT.$${QTLIB}.module) MODULE_INCLUDES = $$eval(QT.$${QTLIB}.includes) MODULE_LIBS = $$eval(QT.$${QTLIB}.libs) + MODULE_FRAMEWORKS = $$eval(QT.$${QTLIB}.frameworks) MODULE_CONFIG = $$eval(QT.$${QTLIB}.module_config) isEmpty(MODULE_NAME) { @@ -88,49 +90,55 @@ for(ever) { MODULE_LIBS_ADD = $$MODULE_LIBS MODULE_LIBS_ADD -= $$QMAKE_DEFAULT_LIBDIRS - LINKAGE = - contains(MODULE_CONFIG, lib_bundle) { - FRAMEWORK_INCLUDE = $${MODULE_LIBS}/$${MODULE_NAME}.framework/Headers - !qt_no_framework_direct_includes { - INCLUDEPATH *= $$FRAMEWORK_INCLUDE + !contains(MODULE_CONFIG, v2) { + # Backwards compatibility with pre-5.6 module .pri files + + contains(MODULE_CONFIG, lib_bundle) { + MODULE_FRAMEWORKS = $$MODULE_LIBS + inc = $$MODULE_LIBS/$${MODULE_NAME}.framework/Headers + MODULE_INCLUDES = $$inc + contains(MODULE_CONFIG, internal_module): \ + MODULE_INCLUDES += \ + $$inc/$$eval(QT.$${QTLIB}.VERSION) \ + $$inc/$$eval(QT.$${QTLIB}.VERSION)/$$MODULE_NAME + } else { + # Re-insert the major version in the library name (cf qt5LibraryTarget above) + MODULE_NAME ~= s,^Qt,Qt$$QT_MAJOR_VERSION, } - contains(MODULE_CONFIG, internal_module): \ - INCLUDEPATH += \ - $$FRAMEWORK_INCLUDE/$$eval(QT.$${QTLIB}.VERSION) \ - $$FRAMEWORK_INCLUDE/$$eval(QT.$${QTLIB}.VERSION)/$$MODULE_NAME - QMAKE_FRAMEWORKPATH *= $${MODULE_LIBS} - !contains(MODULE_CONFIG, no_link): \ - LINKAGE += -framework $${MODULE_NAME}$${QT_LIBINFIX} - } else { - INCLUDEPATH *= $$MODULE_INCLUDES - } - - # Only link to this module if a libs directory is set, else this is just a module - # to give access to sources or include files, and not for linking. - !isEmpty(MODULE_LIBS):!contains(MODULE_CONFIG, no_link) { - # Re-insert the major version in the library name (cf qt5LibraryTarget above) - # unless it's a framework build - !contains(MODULE_CONFIG, lib_bundle): \ - MODULE_NAME ~= s,^Qt,Qt$$QT_MAJOR_VERSION, + # Only link to this module if a libs directory is set, else this is just a module + # to give access to sources or include files, and not for linking. + !isEmpty(MODULE_LIBS):!contains(MODULE_CONFIG, no_link): \ + MODULE_MODULE = $${MODULE_NAME}$${QT_LIBINFIX} + } - isEmpty(LINKAGE) { + # Frameworks shouldn't need include paths, but much code does not use + # module-qualified #includes, so by default we add paths which point + # directly into the frameworks. Private modules have somewhat convoluted + # header paths, so adding them is necessary in every case. + !if(contains(MODULE_CONFIG, lib_bundle):qt_no_framework_direct_includes) \ + |contains(MODULE_CONFIG, internal_module): \ + INCLUDEPATH *= $$MODULE_INCLUDES + QMAKE_FRAMEWORKPATH *= $$MODULE_FRAMEWORKS + !isEmpty(MODULE_MODULE) { + contains(MODULE_CONFIG, lib_bundle) { + LIBS$$var_sfx += -framework $$MODULE_MODULE + } else { !isEmpty(MODULE_LIBS_ADD): \ - LINKAGE = -L$$MODULE_LIBS_ADD - lib = $${MODULE_NAME}$${QT_LIBINFIX}$$qtPlatformTargetSuffix() - LINKAGE += -l$$lib + LIBS$$var_sfx += -L$$MODULE_LIBS_ADD + + lib = $$MODULE_MODULE$$qtPlatformTargetSuffix() + LIBS$$var_sfx += -l$$lib contains(MODULE_CONFIG, staticlib): \ PRE_TARGETDEPS *= $$MODULE_LIBS/$${QMAKE_PREFIX_STATICLIB}$${lib}.$${QMAKE_EXTENSION_STATICLIB} - } - LIBS$$var_sfx += $$LINKAGE - - !isEmpty(QMAKE_LSB) { - !isEmpty(MODULE_LIBS_ADD): \ - QMAKE_LFLAGS *= --lsb-libpath=$$MODULE_LIBS_ADD - QMAKE_LFLAGS *= --lsb-shared-libs=$${MODULE_NAME}$${QT_LIBINFIX} - QMAKE_LIBDIR *= /opt/lsb/lib + !isEmpty(QMAKE_LSB) { + !isEmpty(MODULE_LIBS_ADD): \ + QMAKE_LFLAGS *= --lsb-libpath=$$MODULE_LIBS_ADD + QMAKE_LFLAGS *= --lsb-shared-libs=$$lib + QMAKE_LIBDIR *= /opt/lsb/lib + } } } } diff --git a/mkspecs/features/qt_build_config.prf b/mkspecs/features/qt_build_config.prf index eaf23cf63a..518fd93f04 100644 --- a/mkspecs/features/qt_build_config.prf +++ b/mkspecs/features/qt_build_config.prf @@ -52,6 +52,12 @@ QMAKE_DIR_REPLACE_SANE = PRECOMPILED_DIR OBJECTS_DIR MOC_DIR RCC_DIR UI_DIR unset(modpath) } +# Don't actually try to install anything in non-prefix builds. +# This is much easier and safer than making every single INSTALLS +# assignment conditional. +!prefix_build: \ + CONFIG += qt_clear_installs + cross_compile: \ CONFIG += force_bootstrap diff --git a/mkspecs/features/qt_clear_installs.prf b/mkspecs/features/qt_clear_installs.prf new file mode 100644 index 0000000000..66d12f9d6d --- /dev/null +++ b/mkspecs/features/qt_clear_installs.prf @@ -0,0 +1,12 @@ +# +# 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. +# + +INSTALLS = diff --git a/mkspecs/features/qt_functions.prf b/mkspecs/features/qt_functions.prf index c23d006d82..f1982d6e4e 100644 --- a/mkspecs/features/qt_functions.prf +++ b/mkspecs/features/qt_functions.prf @@ -196,7 +196,7 @@ defineTest(qtAddTargetEnv) { pluginpath.value = ppaths = $$[QT_INSTALL_PLUGINS/get] for(qplug, QT_PLUGINS): \ - contains(ptypes, QT_PLUGIN.$${qplug}.TYPE): \ + contains(ptypes, $$eval(QT_PLUGIN.$${qplug}.TYPE)): \ ppaths += $$eval(QT_PLUGIN.$${qplug}.PATH) ppaths = $$unique(ppaths) for(qplug, ppaths) { @@ -206,6 +206,7 @@ defineTest(qtAddTargetEnv) { pluginpath.value += $$system_path($$qplug) } pluginpath.name = QT_PLUGIN_PATH + pluginpath.CONFIG = prepend QT_TOOL_ENV += deppath pluginpath } diff --git a/mkspecs/features/qt_module.prf b/mkspecs/features/qt_module.prf index 6ed75a4416..e543ea65e6 100644 --- a/mkspecs/features/qt_module.prf +++ b/mkspecs/features/qt_module.prf @@ -80,10 +80,10 @@ CONFIG += qmake_cache target_qt QMAKE_DOCS_TARGETDIR = qt$${MODULE} -load(qt_module_pris) load(qt_common) - !no_module_headers: load(qt_module_headers) +load(qt_module_pris) + INCLUDEPATH *= $$eval(QT.$${MODULE}.includes) $$eval(QT.$${MODULE}_private.includes) # If Qt was configured with -debug-and-release then build the module the same way @@ -139,6 +139,8 @@ mac { contains(QT_CONFIG, rpath): \ QMAKE_SONAME_PREFIX = @rpath + else: \ + CONFIG += absolute_library_soname } DEFINES += QT_BUILDING_QT diff --git a/mkspecs/features/qt_module_headers.prf b/mkspecs/features/qt_module_headers.prf index a2adc19c4c..777b4ffab3 100644 --- a/mkspecs/features/qt_module_headers.prf +++ b/mkspecs/features/qt_module_headers.prf @@ -18,10 +18,11 @@ load(qt_build_paths) } else { contains(QT_CONFIG, private_tests): \ # -developer-build QMAKE_SYNCQT += -check-includes - QMAKE_SYNCQT += -module $$MODULE_INCNAME -version $$VERSION } + for(mod, MODULE_INCNAME): \ + QMAKE_SYNCQT += -module $$mod QMAKE_SYNCQT += \ - -outdir $$system_quote($$MODULE_BASE_OUTDIR) $$MODULE_SYNCQT_DIR + -version $$VERSION -outdir $$system_quote($$MODULE_BASE_OUTDIR) $$MODULE_SYNCQT_DIR !silent: message($$QMAKE_SYNCQT) system($$QMAKE_SYNCQT)|error("Failed to run: $$QMAKE_SYNCQT") @@ -33,6 +34,63 @@ load(qt_build_paths) } } +# Pre-generated headers in the source tree (tar-ball) and +# - shadow build or +# - non-shadow non-prefix build of a module which is not qtbase +# (because the build-time generated headers all end up in qtbase). +!git_build: \ + if(!equals(_PRO_FILE_PWD_, $$OUT_PWD) \ + |if(!prefix_build:!equals(MODULE_BASE_INDIR, $$[QT_HOST_PREFIX]))): \ + CONFIG += split_incpath + +# To avoid stuffing the code with repetetive conditionals, +# we parametrize the names of the variables we assign to. + +# Internal modules have no private part - they *are* private. +!internal_module: \ + prv = _PRIVATE + +# When doing a framework build with a prefix, the module needs to point +# into the frameworks' Headers dirs directly, as no shared include/ dir +# is installed. +# However, during the build, it needs to point into the shared include/ +# dir, as the framework doesn't even exist yet. For bootstrapped modules +# which borrow headers from "proper" modules, this situation persists +# even beyond the module's own build. The implication of this is that +# qmake might never use a framework's headers in a non-prefix build, +# as there is no separate set of .pri files for users outside Qt. +prefix_build:lib_bundle: \ + fwd = _FWD +# When using a split include path during the build, the installed module's +# include path is also structurally different from that in the build dir. +prefix_build:split_incpath: \ + sfwd = _FWD + +ibase = \$\$QT_MODULE_INCLUDE_BASE +MODULE$${fwd}_INCLUDES = $$ibase +split_incpath { + bibase = $$val_escape(MODULE_BASE_OUTDIR)/include + MODULE$${sfwd}_INCLUDES += $$bibase +} +for(mod, MODULE_INCNAME) { + mibase = $$ibase/$$mod + MODULE$${fwd}_INCLUDES += $$mibase + MODULE$${fwd}$${prv}_INCLUDES += $$mibase/$$VERSION $$mibase/$$VERSION/$$mod + split_incpath { + mbibase = $$bibase/$$mod + MODULE$${sfwd}_INCLUDES += $$mbibase + generated_privates: \ + MODULE$${sfwd}$${prv}_INCLUDES += $$mbibase/$$VERSION $$mbibase/$$VERSION/$$mod + } + prefix_build:lib_bundle { + mfbase = \$\$QT_MODULE_LIB_BASE/$${mod}.framework/Headers + MODULE_INCLUDES += $$mfbase + MODULE$${prv}_INCLUDES += $$mfbase/$$VERSION $$mfbase/$$VERSION/$$mod + } +} +MODULE_INCLUDES += $$MODULE_AUX_INCLUDES +MODULE_PRIVATE_INCLUDES += $$MODULE_PRIVATE_AUX_INCLUDES + minimal_syncqt: return() #load up the headers info diff --git a/mkspecs/features/qt_module_pris.prf b/mkspecs/features/qt_module_pris.prf index 3f21a0f7d5..5f5639a1cf 100644 --- a/mkspecs/features/qt_module_pris.prf +++ b/mkspecs/features/qt_module_pris.prf @@ -10,14 +10,7 @@ # load(qt_build_paths) -# Pre-generated headers in the source tree and -# - shadow build or -# - non-shadow non-prefix build of a module which is not qtbase (because the build-time -# generated headers all end up in qtbase). -!git_build:if(!equals(_PRO_FILE_PWD_, $$OUT_PWD) \ - |if(!prefix_build:!equals(MODULE_BASE_INDIR, $$[QT_HOST_PREFIX]))): \ - CONFIG += split_incpath -force_independent|split_incpath: \ +force_independent|!isEmpty(MODULE_FWD_INCLUDES): \ CONFIG += need_fwd_pri mod_work_pfx = $$MODULE_QMAKE_OUTDIR/mkspecs/modules need_fwd_pri: \ @@ -53,18 +46,22 @@ MODULE_FWD_PRI = $$mod_work_pfx/qt_lib_$${MODULE_ID}.pri module_rundep = "QT.$${MODULE_ID}.run_depends = $$replace(QT_PRIVATE, -private$, _private)" else: \ module_rundep = + module_build_type = v2 static: \ - module_build_type = staticlib - else: lib_bundle: \ - module_build_type = lib_bundle - else: \ - module_build_type = - equals(TEMPLATE, aux): \ - module_build_type += no_link + module_build_type += staticlib + lib_bundle { + module_build_type += lib_bundle + MODULE_FRAMEWORKS = " \$\$QT_MODULE_LIB_BASE" + } internal_module: \ module_build_type += internal_module ltcg: \ module_build_type += ltcg + module_module = + !equals(TEMPLATE, aux) { + module_module = $$TARGET$$QT_LIBINFIX + !lib_bundle: module_module ~= s,^Qt,Qt$$QT_MAJOR_VERSION, + } !isEmpty(MODULE_CONFIG): \ module_config = "QT.$${MODULE_ID}.CONFIG = $$MODULE_CONFIG" else: \ @@ -77,27 +74,6 @@ MODULE_FWD_PRI = $$mod_work_pfx/qt_lib_$${MODULE_ID}.pri module_master = "QT.$${MODULE_ID}.master_header = $$MODULE_MASTER_HEADER" else: \ module_master = - !no_module_headers:!minimal_syncqt { - 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 - } - split_incpath { - MODULE_SHADOW_INCLUDES = $$replace(MODULE_INCLUDES, ^\\\$\\\$QT_MODULE_INCLUDE_BASE, \ - $$MODULE_BASE_OUTDIR/include) - generated_privates: \ - MODULE_SHADOW_PRIVATE_INCLUDES = $$replace(MODULE_PRIVATE_INCLUDES, ^\\\$\\\$QT_MODULE_INCLUDE_BASE, \ - $$MODULE_BASE_OUTDIR/include) - } - MODULE_INCLUDES += $$MODULE_AUX_INCLUDES - MODULE_PRIVATE_INCLUDES += $$MODULE_PRIVATE_AUX_INCLUDES - internal_module: \ - MODULE_INCLUDES += $$MODULE_PRIVATE_INCLUDES - split_incpath { - MODULE_FWD_PRI_CONT_SUFFIX += "QT.$${MODULE_ID}.includes += $$val_escape(MODULE_SHADOW_INCLUDES)" - generated_privates: \ - MODULE_FWD_PRI_CONT_SUFFIX += "QT.$${MODULE}_private.includes += $$val_escape(MODULE_SHADOW_PRIVATE_INCLUDES)" - } MODULE_PRI_CONT = \ "QT.$${MODULE_ID}.VERSION = $${VERSION}" \ "QT.$${MODULE_ID}.MAJOR_VERSION = $$section(VERSION, ., 0, 0)" \ @@ -105,9 +81,11 @@ MODULE_FWD_PRI = $$mod_work_pfx/qt_lib_$${MODULE_ID}.pri "QT.$${MODULE_ID}.PATCH_VERSION = $$section(VERSION, ., 2, 2)" \ "" \ "QT.$${MODULE_ID}.name = $$TARGET" \ + "QT.$${MODULE_ID}.module = $$module_module" \ "QT.$${MODULE_ID}.libs = $$module_libs" \ $$module_master \ - "QT.$${MODULE_ID}.includes = $$MODULE_INCLUDES" + "QT.$${MODULE_ID}.includes = $$MODULE_INCLUDES" \ + "QT.$${MODULE_ID}.frameworks =$$MODULE_FRAMEWORKS" !host_build: MODULE_PRI_CONT += \ "QT.$${MODULE_ID}.bins = \$\$QT_MODULE_BIN_BASE" \ "QT.$${MODULE_ID}.libexecs = \$\$QT_MODULE_LIBEXEC_BASE" \ @@ -125,7 +103,11 @@ MODULE_FWD_PRI = $$mod_work_pfx/qt_lib_$${MODULE_ID}.pri "QT_MODULES += $$MODULE" write_file($$MODULE_PRI, MODULE_PRI_CONT)|error("Aborting.") !internal_module:!no_private_module { - module_build_type += internal_module no_link + module_build_type += internal_module + private_deps = $$QT + private_deps -= $$MODULE_DEPENDS + private_deps += $$MODULE $$QT_FOR_PRIVATE + private_deps ~= s,-private$,_private,g MODULE_PRIVATE_PRI_CONT = \ "QT.$${MODULE}_private.VERSION = $${VERSION}" \ "QT.$${MODULE}_private.MAJOR_VERSION = $$section(VERSION, ., 0, 0)" \ @@ -133,9 +115,11 @@ MODULE_FWD_PRI = $$mod_work_pfx/qt_lib_$${MODULE_ID}.pri "QT.$${MODULE}_private.PATCH_VERSION = $$section(VERSION, ., 2, 2)" \ "" \ "QT.$${MODULE}_private.name = $${TARGET}" \ # Same name as base module + "QT.$${MODULE}_private.module =" \ "QT.$${MODULE}_private.libs = $$module_libs" \ "QT.$${MODULE}_private.includes = $$MODULE_PRIVATE_INCLUDES" \ - "QT.$${MODULE}_private.depends = $$replace($$list($$MODULE $$QT_FOR_PRIVATE), -private$, _private)" \ + "QT.$${MODULE}_private.frameworks =" \ + "QT.$${MODULE}_private.depends = $$private_deps" \ "QT.$${MODULE}_private.module_config =$$join(module_build_type, " ", " ")" write_file($$MODULE_PRIVATE_PRI, MODULE_PRIVATE_PRI_CONT)|error("Aborting.") } @@ -143,7 +127,7 @@ MODULE_FWD_PRI = $$mod_work_pfx/qt_lib_$${MODULE_ID}.pri need_fwd_pri { - split_incpath: \ + !git_build: \ MODULE_BASE_INCDIR = $$MODULE_BASE_INDIR else: \ MODULE_BASE_INCDIR = $$MODULE_BASE_OUTDIR @@ -163,7 +147,15 @@ MODULE_FWD_PRI = $$mod_work_pfx/qt_lib_$${MODULE_ID}.pri !internal_module:!no_private_module: MODULE_FWD_PRI_CONT += \ "include($$val_escape(MODULE_PRIVATE_PRI))" \ "QT.$${MODULE}_private.priority = 1" - MODULE_FWD_PRI_CONT += $$MODULE_FWD_PRI_CONT_SUFFIX + !isEmpty(MODULE_FWD_INCLUDES) { + !lib_bundle: \ + pls = + + MODULE_FWD_PRI_CONT += \ + "QT.$${MODULE_ID}.includes $$pls= $$MODULE_FWD_INCLUDES" + !internal_module: \ + MODULE_FWD_PRI_CONT += \ + "QT.$${MODULE}_private.includes $$pls= $$MODULE_FWD_PRIVATE_INCLUDES" + } write_file($$MODULE_FWD_PRI, MODULE_FWD_PRI_CONT)|error("Aborting.") touch($$MODULE_FWD_PRI, $$MODULE_PRI) MODULE_PRI_FILES += $$MODULE_FWD_PRI @@ -189,8 +181,8 @@ MODULE_FWD_PRI = $$mod_work_pfx/qt_lib_$${MODULE_ID}.pri include($$mod_work_pfx/qt_lib_$${pri}.pri) for(mod, mods_to_load) { for(var, $$list(VERSION MAJOR_VERSION MINOR_VERSION PATCH_VERSION \ - name depends run_depends plugin_types module_config CONFIG DEFINES \ - priority includes bins libs libexecs plugins imports qml \ + name module depends run_depends plugin_types module_config CONFIG DEFINES \ + priority includes bins libs frameworks libexecs plugins imports qml \ )):defined(QT.$${mod}.$$var, var):cache(QT.$${mod}.$$var, transient) } cache(QT_MODULES, transient) |