diff --git a/configure.json b/configure.json index 82c41a88210c488ca5bbc020b8c3583320de7399..900fbf854f42d09403b6bf80b53471822390932b 100644 --- a/configure.json +++ b/configure.json @@ -17,20 +17,111 @@ "proprietary-codecs": "boolean", "pulseaudio": "boolean", "spellchecker": "boolean", - "webrtc": "boolean" + "native-spellchecker": "boolean", + "webrtc": "boolean", + "geolocation" : "boolean" } }, "libraries": { - "alsa": { - "label": "ALSA", - "test": "alsa", + "dbus": { + "label": "d-bus", + "sources": [ + { "type": "pkgConfig", "args": "dbus-1" } + ] + }, + "fontconfig": { + "label": "fontconfig", + "sources": [ + { "type": "pkgConfig", "args": "fontconfig" } + ] + }, + "libdrm": { + "label": "libdrm", + "sources": [ + { "type": "pkgConfig", "args": "libdrm" } + ] + }, + "xcomposite": { + "label": "xcomposite", + "sources": [ + { "type": "pkgConfig", "args": "xcomposite" } + ] + }, + "xcursor": { + "label": "xcursor", + "sources": [ + { "type": "pkgConfig", "args": "xcursor" } + ] + }, + "xi": { + "label": "xi", + "sources": [ + { "type": "pkgConfig", "args": "xi" } + ] + }, + "xrandr": { + "label": "xrandr", + "sources": [ + { "type": "pkgConfig", "args": "xrandr" } + ] + }, + "xtst": { + "label": "xtst", + "sources": [ + { "type": "pkgConfig", "args": "xtst" } + ] + }, + "harfbuzz": { + "label": "harfbuzz >= 1.4.2", + "sources": [ + { "type": "pkgConfig", "args": "harfbuzz >= 1.4.2" } + ] + }, + "glib": { + "label": "glib-2.0 >= 2.32.0", + "sources": [ + { "type": "pkgConfig", "args": "glib-2.0 >= 2.32.0" } + ] + }, + "zlib": { + "label": "zlib", "sources": [ - "-lasound" + { "type": "pkgConfig", "args": "zlib" } + ] + }, + "minizip": { + "label": "minizip", + "sources": [ + { "type": "pkgConfig", "args": "minizip" } + ] + }, + "libevent": { + "label": "libevent", + "sources": [ + { "type": "pkgConfig", "args": "libevent" } + ] + }, + "libxml2": { + "label": "libxml2 and libxslt", + "sources": [ + { "type": "pkgConfig", "args": "libxml-2.0 libxslt" } + ] + }, + "jsoncpp": { + "label": "jsoncpp", + "sources": [ + { "type": "pkgConfig", "args": "jsoncpp" } + ] + }, + "protobuf": { + "label": "protobuf", + "sources": [ + { "type": "pkgConfig", "args": "protobuf" } ] }, "pulseaudio": { - "label": "PulseAudio >= 0.9.10", + "label": "pulseaudio >= 0.9.10", "sources": [ { "type": "pkgConfig", "args": "libpulse >= 0.9.10 libpulse-mainloop-glib" } ] @@ -64,12 +155,52 @@ "sources": [ { "type": "pkgConfig", "args": "nss" } ] + }, + "png": { + "label": "libpng >= 1.6.0", + "sources": [ + { "type": "pkgConfig", "args": "libpng >= 1.6.0" } + ] } }, "tests" : { + "alsa": { + "label": "alsa", + "test": "alsa", + "type": "compile" + }, + "khr": { + "label": "khr", + "test": "khr", + "type": "compile" + }, + "libvpx": { + "label": "libvpx", + "test": "libvpx", + "type": "compile" + }, + "snappy": { + "label": "snappy", + "test": "snappy", + "type": "compile" + }, + "srtp": { + "label": "srtp", + "test": "srtp", + "type": "compile" + }, + "winversion": { + "label": "winversion", + "test": "winversion", + "type": "compile" + }, + "protoc": { + "label": "protoc", + "type": "detectProtoc" + }, "python2": { - "label": "Python 2", + "label": "python2", "type": "detectPython2", "log": "location" }, @@ -105,12 +236,96 @@ "glibc": { "label": "glibc > 2.16", "type": "detectGlibc" + }, + "icuuc": { + "label" : "libxml2 configured with icuuc", + "type": "detectIcuuc" } }, "features": { + "system-fontconfig": { + "label": "fontconfig", + "condition": "libs.fontconfig", + "output": [ "privateFeature" ] + }, + "system-dbus": { + "label": "dbus", + "condition": "libs.dbus", + "output": [ "privateFeature" ] + }, + "system-libdrm": { + "label": "libdrm", + "condition": "libs.libdrm", + "output": [ "privateFeature" ] + }, + "system-xcomposite": { + "label": "xcomposite", + "condition": "libs.xcomposite", + "output": [ "privateFeature" ] + }, + "system-xcursor": { + "label": "xcursor", + "condition": "libs.xcursor", + "output": [ "privateFeature" ] + }, + "system-xi": { + "label": "xi", + "condition": "libs.xi", + "output": [ "privateFeature" ] + }, + "system-xrandr": { + "label": "xrandr", + "condition": "libs.xrandr", + "output": [ "privateFeature" ] + }, + "system-xtst": { + "label": "xtst", + "condition": "libs.xtst", + "output": [ "privateFeature" ] + }, + "webengine-system-harfbuzz": { + "label": "harfbuzz", + "condition": "libs.harfbuzz", + "output": [ "privateFeature" ] + }, + "system-glib" : { + "label": "glib", + "condition": "config.unix && libs.glib", + "output": [ "privateFeature" ] + }, + "system-minizip" : { + "label": "minizip", + "condition": "config.unix && libs.minizip", + "output": [ "privateFeature" ] + }, + "system-zlib" : { + "label": "zlib", + "condition": "config.unix && libs.zlib", + "output": [ "privateFeature" ] + }, + "system-libevent" : { + "label": "libevent", + "condition": "config.unix && libs.libevent", + "output": [ "privateFeature" ] + }, + "system-jsoncpp" : { + "label": "jsoncpp", + "condition": "config.unix && libs.jsoncpp", + "output": [ "privateFeature" ] + }, + "system-protobuf" : { + "label": "protobuf", + "condition": "config.unix && libs.protobuf && tests.protoc", + "output": [ "privateFeature" ] + }, + "webengine-system-png" : { + "label": "png", + "condition": "config.unix && libs.png", + "output": [ "privateFeature" ] + }, "python2": { - "label": "Python 2", + "label": "python2", "condition": "tests.python2", "output": [ "privateFeature", @@ -141,12 +356,47 @@ "output": [ "privateFeature" ] }, "alsa": { - "label": "ALSA", - "condition": "config.unix && libs.alsa", + "label": "Use ALSA", + "condition": "config.unix && tests.alsa", + "output": [ "privateFeature" ] + }, + "system-khr" : { + "label": "khr", + "condition": "config.unix && tests.khr", + "output": [ "privateFeature" ] + }, + "system-libvpx" : { + "label": "libvpx", + "condition": "config.unix && tests.libvpx", + "output": [ "privateFeature" ] + }, + "system-snappy" : { + "label": "snappy", + "condition": "config.unix && tests.snappy", + "output": [ "privateFeature" ] + }, + "system-libsrtp" : { + "label": "libsrtp", + "condition": "config.unix && tests.srtp", + "output": [ "privateFeature" ] + }, + "system-libxml2" : { + "label": "libxml2", + "condition": "config.unix && tests.srtp", + "output": [ "privateFeature" ] + }, + "winversion" : { + "label": "winversion", + "condition": "config.win32 && tests.winversion", + "output": [ "privateFeature" ] + }, + "geolocation": { + "label": "Geolocation", + "condition": "module.positioning", "output": [ "privateFeature" ] }, "pulseaudio": { - "label": "PulseAudio", + "label": "Use PulseAudio", "autoDetect": "config.unix", "condition": "libs.pulseaudio", "output": [ "privateFeature" ] @@ -179,6 +429,13 @@ "section": "WebEngine", "output": [ "privateFeature" ] }, + "native-spellchecker": { + "label": "Native Spellchecker", + "purpose": "Provides a native spellchecker.", + "condition": "config.macos", + "section": "WebEngine", + "output": [ "privateFeature" ] + }, "webrtc": { "label": "WebRTC", "purpose": "Provides WebRTC support.", @@ -198,7 +455,7 @@ "output": [ "privateFeature" ] }, "system-opus": { - "label": "Opus", + "label": "opus", "autoDetect": "config.unix", "condition": "libs.opus", "output": [ "privateFeature" ] @@ -210,7 +467,7 @@ "output": [ "privateFeature" ] }, "system-icu": { - "label": "ICU", + "label": "icu", "autoDetect": false, "condition": "libs.icu", "output": [ "privateFeature" ] @@ -222,12 +479,12 @@ "output": [ "privateFeature" ] }, "system-ninja": { - "label": "Using system ninja", + "label": "Use System Ninja", "condition": "tests.ninja", "output": [ "privateFeature" ] }, "system-gn": { - "label": "Using system gn", + "label": "Use System Gn", "autoDetect": false, "condition": "tests.gn", "output": [ "privateFeature" ] @@ -236,6 +493,11 @@ "label": "glibc", "condition": "config.linux && tests.glibc", "output": [ "privateFeature" ] + }, + "system-libxml2": { + "label": "libxml2 and libxslt", + "condition": "config.unix && libs.libxml2 && tests.icuuc", + "output": [ "privateFeature" ] } }, @@ -271,8 +533,10 @@ "printing-and-pdf", "proprietary-codecs", "spellchecker", + "native-spellchecker", "webrtc", "system-ninja", + "geolocation", { "type": "feature", "args": "alsa", @@ -284,14 +548,49 @@ "condition": "config.unix" }, { - "section": "System libraries", + "section": "Optional system libraries used", "condition": "config.unix", "entries": [ "system-re2", "system-icu", "system-webp", "system-opus", - "system-ffmpeg" + "system-ffmpeg", + "system-libvpx", + "system-snappy", + "system-libsrtp", + "system-glib", + "system-zlib", + "system-minizip", + "system-libevent", + "system-jsoncpp", + "system-protobuf", + "system-libxml2", + "webengine-system-png", + "webengine-system-harfbuzz" + ] + }, + { + "section": "Required system libraries", + "condition": "config.unix && !config.macos", + "entries": [ + "system-fontconfig", + "system-dbus", + "system-nss", + "system-khr", + "system-glibc" + ] + }, + { + "section": "Required system libraries for qpa-xcb", + "condition": "config.unix && !config.macos", + "entries": [ + "system-libdrm", + "system-xcomposite", + "system-xcursor", + "system-xi", + "system-xrandr", + "system-xtst" ] } ] diff --git a/configure.pri b/configure.pri index c7ce83bb3ff4d62f3835252e11eddceee2348034..549b1efd00cfa1f08f1b0bf795d311fe28d7314b 100644 --- a/configure.pri +++ b/configure.pri @@ -116,6 +116,16 @@ defineTest(qtConfTest_detectNinja) { 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) { @@ -136,3 +146,13 @@ defineTest(qtConfTest_embedded) { $$qtConfEvaluate("features.cross_compile"): return(true) return(false) } + +defineTest(qtConfTest_detectIcuuc) { + pkgConfig = $$first($$list($$pkgConfigExecutable())) + !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) +} diff --git a/mkspecs/features/configure.prf b/mkspecs/features/configure.prf index b270c71f4497198ee0385c77738739ecb428e5f4..79b54dabafd17bbc121a07f2d865a6fb5aa3b23b 100644 --- a/mkspecs/features/configure.prf +++ b/mkspecs/features/configure.prf @@ -8,17 +8,6 @@ defineTest(runConfigure) { skipBuild("pkg-config is required") return(false) } - # Ignore the cached config tests results in case they were not successful - CONFIG += recheck - #Override the config.tests path - QMAKE_CONFIG_TESTS_DIR = $$QTWEBENGINE_ROOT/config.tests - CONFIG_TESTS = $$files($$QMAKE_CONFIG_TESTS_DIR/*.pro, true) - log("Running configure tests$${EOL}") - for(test, CONFIG_TESTS) { - test = $$basename(test) - test ~= s/\\.pro$// - qtCompileTest($$test) - } include($$QTWEBENGINE_OUT_ROOT/qtwebengine-config.pri) QT_FOR_CONFIG += webengine-private @@ -69,75 +58,67 @@ defineTest(runConfigure) { skipBuild("A suitable version of libc could not be found. See: https://sourceware.org/bugzilla/show_bug.cgi?id=14898") return(false) } - !qtConfig(system-nss) { - skipBuild("A suitable version of NSS could not be found.") + + QT_FOR_CONFIG += gui-private + + !qtConfig(system-khr) { + skipBuild("khronos development headers appear to be missing (mesa/libegl1-mesa-dev)") return(false) } + + for(package, $$list("nss dbus fontconfig")) { + !qtConfig(system-$$package) { + skipBuild("A suitable version of $$package could not be found.") + return(false) + } + } + WEBENGINE_CONFIG += use_nss - QT_FOR_CONFIG += gui-private - !config_khr:skipBuild("khronos development headers appear to be missing (mesa/libegl1-mesa-dev)") - - REQUIRED_PACKAGES = dbus-1 fontconfig - !contains(WEBENGINE_CONFIG, embedded_build): qtConfig(xcb): REQUIRED_PACKAGES += libdrm xcomposite xcursor xi xrandr xtst - qtConfig(pulseaudio): REQUIRED_PACKAGES += libpulse - qtConfig(system-png) { - packagesExist("\'libpng >= 1.6.0\'"): WEBENGINE_CONFIG += use_system_libpng - else: log("System libpng is too old (min. version 1.6). Using Chromium's copy.$${EOL}") - } - qtConfig(system-harfbuzz) { - packagesExist("\'harfbuzz >= 1.2.0\'"): WEBENGINE_CONFIG += use_system_harfbuzz - else: log("System harfbuzz is too old (min. version 1.2). Using Chromium's copy.$${EOL}") - } - qtConfig(glib) { - packagesExist("\'glib-2.0 >= 2.32.0\'"): WEBENGINE_CONFIG += use_glib + !contains(WEBENGINE_CONFIG, embedded_build): qtConfig(xcb) { + for(package, $$list("libdrm xcomposite xcursor xi xrandr xtst")) { + !qtConfig(system-$$package) { + skipBuild("A suitable version of $$package could not be found.") + return(false) + } + } } - for(package, $$list($$REQUIRED_PACKAGES)) { - !packagesExist($$package):skipBuild("Unmet dependency: $$package") + # Fix me: mamke system-png a public feature in gui + qtConfig(system-png): qtConfig(webengine-system-png) { + WEBENGINE_CONFIG += use_system_libpng } - packagesExist(minizip, zlib): WEBENGINE_CONFIG += use_system_minizip use_system_zlib - else: log("System zlib or minizip not found. Using Chromium's copies.$${EOL}") - packagesExist(libxml-2.0,libxslt) { - PKGCONFIG_LIBS_STATIC = $$system($$PKG_CONFIG --libs --static libxml-2.0) - contains(PKGCONFIG_LIBS_STATIC, -licuuc) { - WEBENGINE_CONFIG += use_system_libxslt use_system_libxml2 - } else { - log("System libxml2 is not configured with ICU. Using Chromium's copy.$${EOL}") - } + # Fix me: make system-harfbuzz a public feautre in gui + qtConfig(system-harfbuzz): qtConfig(webengine-system-harfbuzz) { + WEBENGINE_CONFIG += use_system_harfbuzz } - else: log("System libxml2 or libxslt not found. Using Chromium's copies.$${EOL}") - for(package, $$list("libevent jsoncpp protobuf")) { - packagesExist($$package): WEBENGINE_CONFIG += use_system_$$package - else { - log("System $$package not found. Using Chromium's copy.$${EOL}") - WEBENGINE_CONFIG += use_bundled_$$package - } + qtConfig(system-glib) { + WEBENGINE_CONFIG += use_glib } - use?(system_protobuf) { - !system("which protoc > /dev/null") { - log("Protobuf compiler not found. Using Chromium's copy of protobuf.$${EOL}") - WEBENGINE_CONFIG -= use_system_protobuf - WEBENGINE_CONFIG += use_bundled_protobuf - } + qtConfig(system-minizip) { + WEBENGINE_CONFIG += use_system_minizip } - config_libvpx: WEBENGINE_CONFIG += use_system_vpx - else { - log("Compatible system libvpx not found. Using Chromium's copy.$${EOL}") - WEBENGINE_CONFIG += use_bundled_libvpx + qtConfig(system-zlib) { + WEBENGINE_CONFIG += use_system_zlib } - config_snappy: WEBENGINE_CONFIG += use_system_snappy - else { - log("System snappy not found. Using Chromium's copy.$${EOL}") - WEBENGINE_CONFIG += use_bundled_snappy + qtConfig(system-libxml2) { + WEBENGINE_CONFIG += use_system_libxslt use_system_libxml2 + } + + for(package, $$list("libevent jsoncpp protobuf libvpx libsrtp snappy")) { + qtConfig(system-$$package) { + WEBENGINE_CONFIG += use_system_$$package + } else { + WEBENGINE_CONFIG += use_bundled_$$package + } } } - win32 { - !config_winversion: skipBuild("Needs VS 2015 Update 3 with Cumulative Servicing Release or higher") + win32:!qtConfig(winversion) { + skipBuild("Needs VS 2015 Update 3 with Cumulative Servicing Release or higher") } - isEmpty(skipBuildReason): { + isEmpty(skipBuildReason) { cache(CONFIG, add, $$list(webengine_successfully_configured)) !isEmpty(WEBENGINE_CONFIG) { cache(WEBENGINE_CONFIG, add, $$list($$WEBENGINE_CONFIG)) @@ -145,36 +126,8 @@ defineTest(runConfigure) { } } - unix:!darwin { - log("System library dependencies:$${EOL}") - for(config, WEBENGINE_CONFIG) { - match = $$find(config, "^use_system_") - !isEmpty(match) { - use_system += $$replace(match, ^use_system_,) - } - match = $$find(config, "^use_bundled_") - !isEmpty(match) { - use_bundled += $$replace(match, ^use_bundled_,) - } - } - !isEmpty(use_system): log(" Optional system libraries used ..... $$use_system$${EOL}") - !isEmpty(use_bundled): log(" Optional bundled libraries used .... $$use_bundled$${EOL}") - } - log("Configurable features:$${EOL}") - qtHaveModule(positioning): { - log(" Geolocation ........................ Enabled$${EOL}") - } else { - log(" Geolocation ........................ Not enabled (Requires Qt Positioning module)$${EOL}") - } - osx { - use?(native_spellchecker) { - log("Native Spellchecker .............. Enabled$${EOL}") - } else { - log("Native Spellchecker .............. Not enabled (Default, enable with WEBENGINE_CONFIG+=use_native_spellchecker)$${EOL}") - } - !isMinOSXSDKVersion(10, 10, 3) { - log(" Force Touch API usage .............. Not enabled (Because the OS X SDK version to be used \"$${WEBENGINE_OSX_SDK_PRODUCT_VERSION}\" is lower than the required \"10.10.3\")$${EOL}") - } + macos:qtConfig(native-spellchecker) { + WEBENGINE_CONFIG+=use_native_spellchecker } } diff --git a/src/core/config/linux.pri b/src/core/config/linux.pri index ee410bdde122bae9932509d800acb97e6944e924..1cc6065ac179e87d313e67e3ddc240f5b5d55776 100644 --- a/src/core/config/linux.pri +++ b/src/core/config/linux.pri @@ -148,7 +148,7 @@ host_build { #use?(system_jsoncpp): gn_args += use_system_jsoncpp=true use?(system_opus): gn_args += use_system_opus=true use?(system_snappy): gn_args += use_system_snappy=true - use?(system_vpx): gn_args += use_system_libvpx=true + use?(system_libvpx): gn_args += use_system_libvpx=true use?(system_icu): gn_args += use_system_icu=true icu_use_data_file=false use?(system_ffmpeg): gn_args += use_system_ffmpeg=true use?(system_re2): gn_args += use_system_re2=true