summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichal Klocek <michal.klocek@qt.io>2017-12-15 17:52:47 +0100
committerMichal Klocek <michal.klocek@qt.io>2018-01-23 17:00:53 +0000
commitd502c6e9d09803dd268100f8c53cf7bc563e3d1d (patch)
treef998c3179401c09e4399015b19e34593f12ef3c5
parent3cec2ccb0ffdd41a41ab55d4c1ba88d4866e71d1 (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.json18
-rw-r--r--configure.pri14
-rw-r--r--mkspecs/features/configure.prf6
-rw-r--r--mkspecs/features/functions.prf15
-rw-r--r--src/core/config/linux.pri9
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\"
}