From d502c6e9d09803dd268100f8c53cf7bc563e3d1d Mon Sep 17 00:00:00 2001 From: Michal Klocek <michal.klocek@qt.io> Date: Fri, 15 Dec 2017 17:52:47 +0100 Subject: [PATCH] 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> --- configure.json | 18 ++++++++++++++++++ configure.pri | 14 ++++++++++++++ mkspecs/features/configure.prf | 6 ++++++ mkspecs/features/functions.prf | 15 +++++++++++++++ src/core/config/linux.pri | 9 ++++++++- 5 files changed, 61 insertions(+), 1 deletion(-) 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\" } -- GitLab