summaryrefslogtreecommitdiffstats
path: root/mkspecs
diff options
context:
space:
mode:
authorQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2018-12-09 01:00:42 +0100
committerQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2018-12-09 01:00:43 +0100
commitfc116049649a6aef06f07dec3d89cc5d44c41723 (patch)
tree9c545c77faa4385d50e016970dbf70c0c199f4c9 /mkspecs
parentf8c5c1356465f503e1a8357ceff01bb956d51c9e (diff)
parentd36a4fc19709e6047fe846b36731b59909218b6d (diff)
Merge remote-tracking branch 'origin/5.12' into dev
Diffstat (limited to 'mkspecs')
-rw-r--r--mkspecs/features/qmake_use.prf32
-rw-r--r--mkspecs/features/qt_configure.prf62
-rw-r--r--mkspecs/features/qt_helper_lib.prf13
-rw-r--r--mkspecs/features/qt_module_pris.prf1
-rw-r--r--mkspecs/features/toolchain.prf2
5 files changed, 92 insertions, 18 deletions
diff --git a/mkspecs/features/qmake_use.prf b/mkspecs/features/qmake_use.prf
index dba45de92a..8159e471a2 100644
--- a/mkspecs/features/qmake_use.prf
+++ b/mkspecs/features/qmake_use.prf
@@ -1,23 +1,31 @@
suffix =
for(ever) {
- QMAKE_USE$${suffix} = $$unique(QMAKE_USE$${suffix})
+ CC_USES =
+ LD_USES =
for (use, QMAKE_USE$${suffix}) {
use = $$split(use, /)
name = $$take_first(use)
nu = $$upper($$name)
+ !contains(use, linkonly): CC_USES += $$nu
+ !contains(use, nolink): LD_USES += $$nu
+ }
+ CC_USES = $$resolve_depends(CC_USES, QMAKE_DEPENDS_, _CC)
+ for (nu, CC_USES) {
+ !defined(QMAKE_LIBS_$$nu, var): \
+ error("Library '$$lower($$nu)' is not defined.")
+
+ DEFINES += $$eval(QMAKE_DEFINES_$${nu})
+ INCLUDEPATH += $$eval(QMAKE_INCDIR_$${nu})
+ }
+ LD_USES = $$resolve_depends(LD_USES, QMAKE_DEPENDS_, _LD)
+ for (nu, LD_USES) {
!defined(QMAKE_LIBS_$$nu, var): \
- error("Library '$$name' is not defined.")
+ error("Library '$$lower($$nu)' is not defined.")
- !contains(use, nolink) {
- debug: \
- LIBS$${suffix} += $$eval(QMAKE_LIBS_$${nu}_DEBUG) $$eval(QMAKE_LIBS_$$nu)
- else: \
- LIBS$${suffix} += $$eval(QMAKE_LIBS_$${nu}_RELEASE) $$eval(QMAKE_LIBS_$$nu)
- }
- !contains(use, linkonly) {
- DEFINES += $$eval(QMAKE_DEFINES_$${nu})
- INCLUDEPATH += $$eval(QMAKE_INCDIR_$${nu})
- }
+ debug: \
+ LIBS$${suffix} += $$eval(QMAKE_LIBS_$${nu}_DEBUG) $$eval(QMAKE_LIBS_$$nu)
+ else: \
+ LIBS$${suffix} += $$eval(QMAKE_LIBS_$${nu}_RELEASE) $$eval(QMAKE_LIBS_$$nu)
}
!isEmpty(suffix): break()
suffix = "_PRIVATE"
diff --git a/mkspecs/features/qt_configure.prf b/mkspecs/features/qt_configure.prf
index d75365cd0a..d8f5af5404 100644
--- a/mkspecs/features/qt_configure.prf
+++ b/mkspecs/features/qt_configure.prf
@@ -743,6 +743,21 @@ defineTest(qtConfLibrary_pkgConfig) {
!qtConfResolvePathIncs($${1}.includedir, $$includes): \
return(false)
$${1}.defines = $$defines
+
+ # now remove the content of the transitive deps we know about.
+ largs = $$qtConfAllLibraryArgs($$eval($${2}.dependencies))
+ for (la, largs): \
+ eval("$$la")
+ USES = $$eval($$list($$upper($$QMAKE_USE)))
+ # _CC == _LD for configure's library sources, so pick first arbitrarily.
+ DEPS = $$resolve_depends(USES, QMAKE_DEPENDS_, _CC)
+ for (DEP, DEPS) {
+ $${1}.libs -= $$eval(QMAKE_LIBS_$${DEP})
+ $${1}.includedir -= $$eval(QMAKE_INCDIR_$${DEP})
+ $${1}.defines -= $$eval(QMAKE_DEFINES_$${DEP})
+ }
+ export($${1}.libs)
+ export($${1}.includedir)
export($${1}.defines)
return(true)
@@ -776,20 +791,36 @@ defineReplace(qtConfLibraryArgs) {
defines = $$eval($${1}.defines)
!isEmpty(defines): \
qmake_args += "QMAKE_DEFINES_$${NAME} = $$val_escape(defines)"
+ depends = $$eval($${2}.dependencies)
+ !isEmpty(depends) {
+ dep_uses =
+ for (use, depends): \
+ dep_uses += $$section(use, :, 1, 1)
+ qmake_args += \
+ "QMAKE_DEPENDS_$${NAME}_CC = $$upper($$dep_uses)" \
+ "QMAKE_DEPENDS_$${NAME}_LD = $$upper($$dep_uses)"
+ }
return($$qmake_args)
}
defineReplace(qtConfAllLibraryArgs) {
isEmpty(1): return()
dep_uses =
+ for (use, 1): \
+ dep_uses += $$section(use, :, 1, 1)
dep_args =
- for (use, 1) {
+ seen =
+ for(ever) {
+ isEmpty(1): break()
+ use = $$take_last(1)
+ contains(seen, $$use): next()
+ seen += $$use
use_cfg = $$section(use, :, 0, 0)
- use_lib = $$section(use, :, 1, 1)
- dep_uses += $$use_lib
!isEmpty(use_cfg) {
+ use_lib = $$section(use, :, 1, 1)
lpfx = $${use_cfg}.libraries.$$use_lib
- dep_args += $$qtConfLibraryArgs($${lpfx}.sources.$$eval($${lpfx}.source))
+ dep_args += $$qtConfLibraryArgs($${lpfx}.sources.$$eval($${lpfx}.source), $$lpfx)
+ 1 += $$eval($${lpfx}.dependencies)
}
}
return("QMAKE_USE += $$dep_uses" $$dep_args)
@@ -818,6 +849,24 @@ defineTest(qtConfExportLibrary) {
!isEmpty(defines): qtConfOutputVar(assign, $$output, QMAKE_DEFINES_$$NAME, $$defines)
includes = $$eval($${spfx}.includedir)
!isEmpty(includes): qtConfOutputVar(assign, $$output, QMAKE_INCDIR_$$NAME, $$includes)
+ uses = $$eval($${lpfx}.dependencies)
+ !isEmpty(uses) {
+ # FIXME: ideally, we would export transitive deps only for static
+ # libs, to not extend the link interface unduly. however, the system
+ # does currently not differentiate between public and private deps.
+ depends =
+ for (use, uses) {
+ use_cfg = $$section(use, :, 0, 0)
+ use_lib = $$section(use, :, 1, 1)
+ !isEmpty(use_cfg): \
+ depends += $$upper($$eval($${use_cfg}.libraries.$${use_lib}.export))
+ else: \
+ depends += $$upper($$use_lib)
+ }
+ # we use suffixes instead of infixes, because $$resolve_depends() demands it.
+ qtConfOutputVar(assign, $$output, QMAKE_DEPENDS_$${NAME}_CC, $$depends)
+ qtConfOutputVar(assign, $$output, QMAKE_DEPENDS_$${NAME}_LD, $$depends)
+ }
!isEmpty($${currentConfig}.module): \
qtConfExtendVar($$output, "QT.$${currentModule}_private.libraries", $$name)
}
@@ -843,7 +892,8 @@ defineTest(qtConfHandleLibrary) {
export($${lpfx}.result)
return()
}
- resolved_uses = $$eval($${lpfx}.resolved_uses)
+ $${lpfx}.dependencies = $$eval($${lpfx}.resolved_uses)
+ export($${lpfx}.dependencies)
qtConfLoadResult($${lpfx}, $$1, "library") {
$$eval($${lpfx}.result): \
@@ -881,7 +931,7 @@ defineTest(qtConfHandleLibrary) {
# if the library defines a test, use it to verify the source.
!isEmpty($${lpfx}.test)|!isEmpty($${lpfx}.test._KEYS_) {
- $${lpfx}.resolved_uses = $$currentConfig:$$1 $$resolved_uses
+ $${lpfx}.resolved_uses = $$currentConfig:$$1
$${lpfx}.host = $$eval($${spfx}.host)
!qtConfTest_compile($$lpfx) {
qtLog(" => source failed verification.")
diff --git a/mkspecs/features/qt_helper_lib.prf b/mkspecs/features/qt_helper_lib.prf
index 1a8446acb4..05d3b941bd 100644
--- a/mkspecs/features/qt_helper_lib.prf
+++ b/mkspecs/features/qt_helper_lib.prf
@@ -41,7 +41,20 @@ THE_TARGET = $$qt5LibraryTarget($$TARGET)
prefix = $$QMAKE_PREFIX_SHLIB
suffix = $$QMAKE_EXTENSION_SHLIB
}
+ CC_USES =
+ LD_USES =
+ for (use, QMAKE_USE) {
+ use = $$split(use, /)
+ name = $$take_first(use)
+ nu = $$upper($$name)
+ !contains(use, linkonly): CC_USES += $$nu
+ !contains(use, nolink): LD_USES += $$nu
+ }
+ CC_USES = $$unique(CC_USES)
+ LD_USES = $$unique(LD_USES)
MODULE_PRI_CONT = \
+ "QMAKE_DEPENDS_$${ucmodule}_CC =$$join(CC_USES, " ", " ")" \
+ "QMAKE_DEPENDS_$${ucmodule}_LD =$$join(LD_USES, " ", " ")" \
"QMAKE_INCDIR_$${ucmodule} = $$val_escape(MODULE_INCLUDEPATH)" \
"QMAKE_DEFINES_$${ucmodule} = $$val_escape(MODULE_DEFINES)"
debug_and_release {
diff --git a/mkspecs/features/qt_module_pris.prf b/mkspecs/features/qt_module_pris.prf
index 163f52f23f..e0556ce960 100644
--- a/mkspecs/features/qt_module_pris.prf
+++ b/mkspecs/features/qt_module_pris.prf
@@ -56,6 +56,7 @@ defineReplace(qtExportLibsForModule) {
for (lib, QT.$${1}.libraries) {
NAME = $$upper($$lib)
vars = \
+ QMAKE_DEPENDS_$${NAME}_CC QMAKE_DEPENDS_$${NAME}_LD \
QMAKE_LIBS_$$NAME QMAKE_LIBS_$${NAME}_DEBUG QMAKE_LIBS_$${NAME}_RELEASE \
QMAKE_DEFINES_$$NAME QMAKE_INCDIR_$$NAME
for (var, vars) {
diff --git a/mkspecs/features/toolchain.prf b/mkspecs/features/toolchain.prf
index 6039c52bd0..55295f271f 100644
--- a/mkspecs/features/toolchain.prf
+++ b/mkspecs/features/toolchain.prf
@@ -134,6 +134,8 @@ isEmpty($${target_prefix}.INCDIRS) {
for (line, output) {
contains(line, "^libraries: .*") {
line ~= s,^libraries: ,,
+ # clang (7.x) on Windows uses the wrong path list separator ...
+ equals(QMAKE_HOST.os, Windows): line ~= s,:(?![/\\\\]),;,
paths = $$split(line, $$QMAKE_DIRLIST_SEP)
for (path, paths): \
QMAKE_DEFAULT_LIBDIRS += $$clean_path($$replace(path, ^=, $$[SYSROOT]))