-
Alexandru Croitor authored
It's not always easy to determine what Xcode / clang version is used when building WebEngine in the CI. Same for the OS version and other toolchain details. Print out the values at QtWebEngine configure time. This will also help us when users provide build logs. Change-Id: I413a6c5b6efb42c4411268ca46d07c2fb9b85cc3 Reviewed-by:
Allan Sandfeld Jensen <allan.jensen@qt.io> Reviewed-by:
Kai Koehne <kai.koehne@qt.io>
c864129a
configure.pri 9.31 KiB
# this must be done outside any function
QTWEBENGINE_SOURCE_TREE = $$PWD
equals(QMAKE_HOST.os, Windows): EXE_SUFFIX = .exe
defineTest(isPythonVersionSupported) {
python = $$system_quote($$system_path($$1))
python_version = $$system('$$python -c "import sys; print(sys.version_info[0:3])"')
python_version ~= s/[()]//g
python_version = $$split(python_version, ',')
python_major_version = $$first(python_version)
greaterThan(python_major_version, 2) {
qtLog("Python version 3 is not supported by Chromium.")
return(false)
}
python_minor_version = $$member(python_version, 1)
python_patch_version = $$member(python_version, 2)
greaterThan(python_major_version, 1): greaterThan(python_minor_version, 6): greaterThan(python_patch_version, 4): return(true)
qtLog("Unsupported python version: $${python_major_version}.$${python_minor_version}.$${python_patch_version}.")
return(false)
}
defineTest(qtConfTest_detectPython2) {
python = $$qtConfFindInPath("python2$$EXE_SUFFIX")
isEmpty(python) {
qtLog("'python2$$EXE_SUFFIX' not found in PATH. Checking for 'python$$EXE_SUFFIX'.")
python = $$qtConfFindInPath("python$$EXE_SUFFIX")
}
isEmpty(python) {
qtLog("'python$$EXE_SUFFIX' not found in PATH. Giving up.")
return(false)
}
!isPythonVersionSupported($$python) {
qtLog("A suitable Python 2 executable could not be located.")
return(false)
}
# Make tests.python2.location available in configure.json.
$${1}.location = $$clean_path($$python)
export($${1}.location)
$${1}.cache += location
export($${1}.cache)
return(true)
}
defineReplace(qtConfFindGnuTool) {
equals(QMAKE_HOST.os, Windows) {
gnuwin32bindir = $$absolute_path($$QTWEBENGINE_SOURCE_TREE/../gnuwin32/bin)
gnuwin32toolpath = "$$gnuwin32bindir/$${1}"
exists($$gnuwin32toolpath): \
return($$gnuwin32toolpath)
}
return($$qtConfFindInPath($$1))
}
defineTest(qtConfTest_detectGperf) {
gperf = $$qtConfFindGnuTool("gperf$$EXE_SUFFIX")
isEmpty(gperf) {
qtLog("Required gperf could not be found.")
return(false)
}
qtLog("Found gperf from path: $$gperf")
return(true)
}
defineTest(qtConfTest_detectBison) {
bison = $$qtConfFindGnuTool("bison$$EXE_SUFFIX")
isEmpty(bison) {
qtLog("Required bison could not be found.")
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
return(false)
}
qtLog("Found bison from path: $$bison")
return(true)
}
defineTest(qtConfTest_detectFlex) {
flex = $$qtConfFindGnuTool("flex$$EXE_SUFFIX")
isEmpty(flex) {
qtLog("Required flex could not be found.")
return(false)
}
qtLog("Found flex from path: $$flex")
return(true)
}
defineTest(qtConfTest_detectGlibc) {
ldd = $$qtConfFindInPath("ldd")
!isEmpty(ldd) {
qtLog("Found ldd from path: $$ldd")
qtRunLoggedCommand("$$ldd --version", version)|return(true)
version ~= 's/^.*[^0-9]\([0-9]*\.[0-9]*\).*$/\1/'
version = $$first(version)
qtLog("Found libc version: $$version")
version = $$split(version,'.')
version = $$member(version, 1)
greaterThan(version, 16) {
return(true)
}
qtLog("Detected too old version of glibc. Required min 2.17.")
return(false)
}
qtLog("No ldd found. Assuming right version of glibc.")
return(true)
}
defineTest(qtConfTest_detectNinja) {
ninja = $$qtConfFindInPath("ninja$$EXE_SUFFIX")
!isEmpty(ninja) {
qtLog("Found ninja from path: $$ninja")
qtRunLoggedCommand("$$ninja --version", version)|return(false)
contains(version, "1.[7-9].*"): return(true)
qtLog("Ninja version too old")
}
qtLog("Building own ninja")
return(false)
}
defineTest(qtConfTest_detectProtoc) {
protoc = $$qtConfFindInPath("protoc")
isEmpty(protoc) {
qtLog("Optional protoc could not be found.")
return(false)
}
qtLog("Found protoc from path: $$protoc")
return(true)
}
defineTest(qtConfTest_detectGn) {
gn = $$qtConfFindInPath("gn$$EXE_SUFFIX")
!isEmpty(gn) {
qtRunLoggedCommand("$$gn --version", version)|return(false)
#accept all for now
contains(version, ".*"): return(true)
qtLog("Gn version too old")
}
qtLog("Building own gn")
return(false)
}
141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
defineTest(qtConfTest_embedded) {
lessThan(QT_MINOR_VERSION, 9) {
cross_compile: return(true)
return(false)
}
$$qtConfEvaluate("features.cross_compile"): return(true)
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
sanitize_address {
asan_supported = false
linux-clang-libc++:isSanitizerSupportedOnLinux() {
asan_supported = true
} else:macos:isSanitizerSupportedOnMacOS() {
asan_supported = true
}
!$$asan_supported {
sanitizer_combo_supported = false
qtLog("An address sanitizer-enabled Qt WebEngine build can only be built on Linux or macOS using Clang and libc++.")
}
}
sanitize_memory {
sanitizer_combo_supported = false
qtLog("A memory sanitizer-enabled Qt WebEngine build is not supported.")
}
sanitize_undefined {
ubsan_supported = false
CONFIG(release, debug|release):!debug_and_release {
linux-clang-libc++:isSanitizerSupportedOnLinux() {
ubsan_supported = true
} else:macos:isSanitizerSupportedOnMacOS() {
ubsan_supported = true
}
}
!$$ubsan_supported {
sanitizer_combo_supported = false
qtLog("An undefined behavior sanitizer-enabled Qt WebEngine build can only be built on Linux or macOS using Clang and libc++ in release mode.")
}
}
sanitize_thread {
tsan_supported = false
linux-clang-libc++:isSanitizerSupportedOnLinux() {
tsan_supported = true
}
!$$tsan_supported {
sanitizer_combo_supported = false
qtLog("A thread sanitizer-enabled Qt WebEngine build can only be built on Linux using Clang and libc++.")
}
}
211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
$$sanitizer_combo_supported: return(true)
return(false)
}
defineTest(isSanitizerSupportedOnLinux) {
isSanitizerLinuxClangVersionSupported(): return(true)
return(false)
}
defineTest(isSanitizerSupportedOnMacOS) {
isEmpty(QMAKE_APPLE_CLANG_MAJOR_VERSION) {
QTWEBENGINE_CLANG_IS_APPLE = false
} else {
QTWEBENGINE_CLANG_IS_APPLE = true
}
$$QTWEBENGINE_CLANG_IS_APPLE:isSanitizerMacOSAppleClangVersionSupported(): return(true)
else:isSanitizerMacOSClangVersionSupported(): return(true)
return(false)
}
defineTest(isSanitizerMacOSAppleClangVersionSupported) {
# Clang sanitizer suppression attributes work from Apple Clang version 7.3.0+.
greaterThan(QMAKE_APPLE_CLANG_MAJOR_VERSION, 7): return(true)
greaterThan(QMAKE_APPLE_CLANG_MINOR_VERSION, 2): return(true)
qtLog("Using Apple Clang version $${QMAKE_APPLE_CLANG_MAJOR_VERSION}.$${QMAKE_APPLE_CLANG_MINOR_VERSION}.$${QMAKE_APPLE_CLANG_PATCH_VERSION}, but at least Apple Clang version 7.3.0 is required to build a sanitizer-enabled Qt WebEngine.")
return(false)
}
defineTest(isSanitizerMacOSClangVersionSupported) {
# Clang sanitizer suppression attributes work from non-apple Clang version 3.7+.
greaterThan(QMAKE_CLANG_MAJOR_VERSION, 3): return(true)
greaterThan(QMAKE_CLANG_MINOR_VERSION, 6): return(true)
qtLog("Using Clang version $${QMAKE_CLANG_MAJOR_VERSION}.$${QMAKE_CLANG_MINOR_VERSION}, but at least Clang version 3.7 is required to build a sanitizer-enabled Qt WebEngine.")
return(false)
}
defineTest(isSanitizerLinuxClangVersionSupported) {
# Clang sanitizer suppression attributes work from Clang version 3.7+.
greaterThan(QMAKE_CLANG_MAJOR_VERSION, 3): return(true)
greaterThan(QMAKE_CLANG_MINOR_VERSION, 6): return(true)
qtLog("Using Clang version $${QMAKE_CLANG_MAJOR_VERSION}.$${QMAKE_CLANG_MINOR_VERSION}, but at least Clang version 3.7 is required to build a sanitizer-enabled Qt WebEngine.")
return(false)
}
defineReplace(qtConfFunc_isTestsInBuildParts) {
contains(QT_BUILD_PARTS, tests): return(true)
return(false)
}
defineReplace(webEngineGetMacOSVersion) {
value = $$system("sw_vers -productVersion 2>/dev/null")
return($$value)
}
defineReplace(webEngineGetMacOSSDKVersion) {
value = $$system("/usr/bin/xcodebuild -sdk $$QMAKE_MAC_SDK -version ProductVersion 2>/dev/null")
return($$value)
}
defineReplace(webEngineGetMacOSClangVerboseVersion) {
output = $$system("$$QMAKE_CXX --version 2>/dev/null", lines)
value = $$first(output)
return($$value)
}
defineTest(qtConfReport_macosToolchainVersion) {
281282283284285286287288289
arg = $$2
contains(arg, "macosVersion"): report_message = $$webEngineGetMacOSVersion()
contains(arg, "xcodeVersion"): report_message = "$$QMAKE_XCODE_VERSION"
contains(arg, "clangVersion"): report_message = $$webEngineGetMacOSClangVerboseVersion()
contains(arg, "sdkVersion"): report_message = $$webEngineGetMacOSSDKVersion()
contains(arg, "deploymentTarget"): report_message = "$$QMAKE_MACOSX_DEPLOYMENT_TARGET"
!isEmpty(report_message): qtConfReportPadded($$1, $$report_message)
}