configure.pri 8.61 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_detectIcuuc) { pkgConfig = $$qtConfPkgConfig() !isEmpty(pkgConfig) { qtRunLoggedCommand("$$pkgConfig --libs --static libxml-2.0", xmllibs) contains(xmllibs,".*-licuuc.*"):return(true) qtLog("System libxml2 is not configured with ICU") } 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 {
211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
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++.") } } $$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) }