diff options
author | Michal Klocek <michal.klocek@qt.io> | 2017-12-15 17:52:47 +0100 |
---|---|---|
committer | Michal Klocek <michal.klocek@qt.io> | 2018-01-23 17:00:53 +0000 |
commit | d502c6e9d09803dd268100f8c53cf7bc563e3d1d (patch) | |
tree | f998c3179401c09e4399015b19e34593f12ef3c5 | |
parent | 3cec2ccb0ffdd41a41ab55d4c1ba88d4866e71d1 (diff) |
Add pkg-host wrapper script
Currently we need pkg-config host for cross-builds to build
build tools. Unfortunately if build environment exports
PKG_CONFIG_* variables pkg-config will pick them up also for host builds,
which can lead to compile errors. Create pkg-config-host_wrapper
which explicitly unsets PKG_CONFIG_* variables.
This is a temporary workaround till proper solution is implemented
in qtbase.
Task-number: QTBUG-65079
Change-Id: I9aff4a27ba62e096ed4c023cf022a41833260178
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
-rw-r--r-- | configure.json | 18 | ||||
-rw-r--r-- | configure.pri | 14 | ||||
-rw-r--r-- | mkspecs/features/configure.prf | 6 | ||||
-rw-r--r-- | mkspecs/features/functions.prf | 15 | ||||
-rw-r--r-- | src/core/config/linux.pri | 9 |
5 files changed, 61 insertions, 1 deletions
diff --git a/configure.json b/configure.json index 7ef1f5003..fecd83ed4 100644 --- a/configure.json +++ b/configure.json @@ -223,6 +223,11 @@ "type": "detectPython2", "log": "location" }, + "webengine-host-pkg-config": { + "label": "host pkg-config", + "type": "detectHostPkgConfig", + "log": "path" + }, "webengine-gperf": { "label": "gperf", "type": "detectGperf" @@ -355,6 +360,14 @@ { "type": "varAssign", "name": "QMAKE_PYTHON2", "value": "tests.webengine-python2.location" } ] }, + "webengine-host-pkg-config": { + "label": "host-pkg-config", + "condition": "config.unix && tests.webengine-host-pkg-config", + "output": [ + "privateFeature", + { "type": "varAssign", "name": "QMAKE_PKG_CONFIG_HOST", "value": "tests.webengine-host-pkg-config.path" } + ] + }, "webengine-gperf": { "label": "gperf", "condition": "tests.webengine-gperf", @@ -566,6 +579,11 @@ "type": "warning", "condition": "config.sanitizer && !tests.webengine-sanitizer && !features.webengine-sanitizer", "message": "Qt WebEngine cannot be built with the chosen sanitizer configuration. Check config.log for details or use -feature-webengine-sanitizer to force the build." + }, + { + "type": "warning", + "condition": "config.unix && !features.webengine-host-pkg-config", + "message": "host pkg-config not found" } ], diff --git a/configure.pri b/configure.pri index 497557262..ecf2ce4d3 100644 --- a/configure.pri +++ b/configure.pri @@ -157,6 +157,20 @@ defineTest(qtConfTest_detectIcuuc) { return(false) } +defineTest(qtConfTest_detectHostPkgConfig) { + PKG_CONFIG = $$qtConfPkgConfig(true) + isEmpty(PKG_CONFIG) { + qtLog("Could not find host pkg-config") + return(false) + } + qtLog("Found host pkg-config: $$PKG_CONFIG") + $${1}.path = $$PKG_CONFIG + export($${1}.path) + $${1}.cache += path + export($${1}.cache) + return(true) +} + defineTest(qtConfTest_isSanitizerSupported) { sanitizer_combo_supported = true diff --git a/mkspecs/features/configure.prf b/mkspecs/features/configure.prf index 8b8fd3efe..2c0908598 100644 --- a/mkspecs/features/configure.prf +++ b/mkspecs/features/configure.prf @@ -53,6 +53,12 @@ defineTest(runConfigure) { } linux { + + !qtConfig(webengine-host-pkg-config) { + skipBuild("Host pkg-config is required") + return(false) + } + !qtConfig(webengine-system-glibc) { skipBuild("A suitable version of libc could not be found. See: https://sourceware.org/bugzilla/show_bug.cgi?id=14898") return(false) diff --git a/mkspecs/features/functions.prf b/mkspecs/features/functions.prf index 3b9a400b1..8564bad8a 100644 --- a/mkspecs/features/functions.prf +++ b/mkspecs/features/functions.prf @@ -115,3 +115,18 @@ defineTest(skipBuild) { skipBuildReason = "$$skipBuildReason $${EOL}$$1" export(skipBuildReason) } + +defineReplace(pkgConfigHostExecutable) { + wrapper_name = $$OUT_PWD/pkg-config-host_wrapper.sh + wrapper_cmd = $$QMAKE_PKG_CONFIG_HOST + isEmpty(wrapper_cmd): wrapper_cmd = pkg-config + wrapper_content = \ + "$$LITERAL_HASH!/bin/sh" \ + "unset PKG_CONFIG_LIBDIR" \ + "unset PKG_CONFIG_SYSROOT_DIR" \ + "exec $$wrapper_cmd \"$@\"" + !build_pass:!write_file($$wrapper_name, wrapper_content, exe): error() + QMAKE_DISTCLEAN += $$wrapper_name + export(QMAKE_DISTCLEAN) + return($$system_quote($$system_path($$wrapper_name))) +} diff --git a/src/core/config/linux.pri b/src/core/config/linux.pri index 6f7b27f10..d337f686f 100644 --- a/src/core/config/linux.pri +++ b/src/core/config/linux.pri @@ -113,7 +113,14 @@ host_build { PKGCONFIG = $$first($$list($$pkgConfigExecutable())) gn_args += pkg_config=\"$$PKGCONFIG\" PKG_CONFIG_HOST = $$(GN_PKG_CONFIG_HOST) - isEmpty(PKG_CONFIG_HOST): PKG_CONFIG_HOST = pkg-config + pkgConfigLibDir = $$(PKG_CONFIG_LIBDIR) + pkgConfigSysrootDir = $$(PKG_CONFIG_SYSROOT_DIR) + isEmpty(PKG_CONFIG_HOST): PKG_CONFIG_HOST = $$QMAKE_PKG_CONFIG_HOST + cross_compile { + !isEmpty(pkgConfigLibDir)|!isEmpty(pkgConfigSysrootDir) { + PKG_CONFIG_HOST = $$pkgConfigHostExecutable() + } + } gn_args += host_pkg_config=\"$$PKG_CONFIG_HOST\" } |