From 2776bb0437a54988a35bdc5e21f0816a50bac50d Mon Sep 17 00:00:00 2001 From: bill-auger Date: Dec 20 2023 06:29:06 +0000 Subject: [webkit2gtk]: upgrade to v2.42.4 --- diff --git a/nonprism/webkit2gtk/GTK-Disable-DMABuf-renderer-for-NVIDIA-proprietary-drivers.patch b/nonprism/webkit2gtk/GTK-Disable-DMABuf-renderer-for-NVIDIA-proprietary-drivers.patch new file mode 100644 index 0000000..bfa8ba5 --- /dev/null +++ b/nonprism/webkit2gtk/GTK-Disable-DMABuf-renderer-for-NVIDIA-proprietary-drivers.patch @@ -0,0 +1,76 @@ +From 745633e606ca70bf926545149beed35aab6450b7 Mon Sep 17 00:00:00 2001 +From: Carlos Garcia Campos +Date: Wed, 4 Oct 2023 10:19:28 +0200 +Subject: [PATCH] [GTK] Disable DMABuf renderer for NVIDIA proprietary drivers + https://bugs.webkit.org/show_bug.cgi?id=262607 + +Reviewed by NOBODY (OOPS!). + +Some NVIDIA users are reporting nothing is rendered, so let's just +disable the DMA-BUF renderer until we figure out how to make it work. + +* Source/WebKit/UIProcess/gtk/AcceleratedBackingStoreDMABuf.cpp: +(WebKit::isNVIDIA): +(WebKit::AcceleratedBackingStoreDMABuf::rendererBufferMode): +--- + .../gtk/AcceleratedBackingStoreDMABuf.cpp | 28 +++++++++++++++++++ + 1 file changed, 28 insertions(+) + +diff --git a/Source/WebKit/UIProcess/gtk/AcceleratedBackingStoreDMABuf.cpp b/Source/WebKit/UIProcess/gtk/AcceleratedBackingStoreDMABuf.cpp +index 9c0f5efdfb0e3..a03842e15db0e 100644 +--- a/Source/WebKit/UIProcess/gtk/AcceleratedBackingStoreDMABuf.cpp ++++ b/Source/WebKit/UIProcess/gtk/AcceleratedBackingStoreDMABuf.cpp +@@ -38,11 +38,13 @@ + #include + #include + #include ++#include + #include + #include + + #if USE(GBM) + #include ++#include + #include + static constexpr uint64_t s_dmabufInvalidModifier = uint64_t(WebCore::DMABufFormat::Modifier::Invalid); + #else +@@ -55,6 +57,29 @@ static constexpr uint64_t s_dmabufInvalidModifier = ((1ULL << 56) - 1); + + namespace WebKit { + ++static bool isNVIDIA() ++{ ++ const char* forceDMABuf = getenv("WEBKIT_FORCE_DMABUF_RENDERER"); ++ if (forceDMABuf && strcmp(forceDMABuf, "0")) ++ return false; ++ ++ std::unique_ptr platformDisplay; ++#if USE(GBM) ++ const char* disableGBM = getenv("WEBKIT_DMABUF_RENDERER_DISABLE_GBM"); ++ if (!disableGBM || !strcmp(disableGBM, "0")) { ++ if (auto* device = WebCore::PlatformDisplay::sharedDisplay().gbmDevice()) ++ platformDisplay = WebCore::PlatformDisplayGBM::create(device); ++ } ++#endif ++ if (!platformDisplay) ++ platformDisplay = WebCore::PlatformDisplaySurfaceless::create(); ++ ++ WebCore::GLContext::ScopedGLContext glContext(WebCore::GLContext::createOffscreen(platformDisplay ? *platformDisplay : WebCore::PlatformDisplay::sharedDisplay())); ++ if (strstr(reinterpret_cast(glGetString(GL_VENDOR)), "NVIDIA")) ++ return true; ++ return false; ++} ++ + OptionSet AcceleratedBackingStoreDMABuf::rendererBufferMode() + { + static OptionSet mode; +@@ -70,6 +95,9 @@ OptionSet AcceleratedBackingStoreDMABuf::rendererBuffe + return; + } + ++ if (isNVIDIA()) ++ return; ++ + mode.add(DMABufRendererBufferMode::SharedMemory); + + const auto& eglExtensions = WebCore::PlatformDisplay::sharedDisplay().eglExtensions(); diff --git a/nonprism/webkit2gtk/GTK-MiniBrowser-should-hide-the-toolbar-when-using-full-screen.patch b/nonprism/webkit2gtk/GTK-MiniBrowser-should-hide-the-toolbar-when-using-full-screen.patch new file mode 100644 index 0000000..b10bd9a --- /dev/null +++ b/nonprism/webkit2gtk/GTK-MiniBrowser-should-hide-the-toolbar-when-using-full-screen.patch @@ -0,0 +1,100 @@ +From e07345343415dd2496edc721daa61a3b42703131 Mon Sep 17 00:00:00 2001 +From: Christian Hesse +Date: Tue, 19 Sep 2023 12:16:39 -0700 +Subject: [PATCH] [GTK] MiniBrowser should hide the toolbar when using + --full-screen #17909 https://bugs.webkit.org/show_bug.cgi?id=261732 + +Reviewed by Michael Catanzaro. + +Entering fullscreen mode with F11 works as expected. +Starting with command line switch `--full-screen` does make the window +fullscreen, but does not hide the toolbar. Let's change that. + +Instead of just making the window fullscreen with `gtk_window_fullscreen()` +this introduces a new function `browser_window_fullscreen()` that hides +the toolbar as well. + +Also introduce new function `browserWindowUnfullscreen()`, use both +in `toggleFullScreen()`, and drop extra inversion. + +* Tools/MiniBrowser/gtk/BrowserWindow.c +* Tools/MiniBrowser/gtk/BrowserWindow.h +* Tools/MiniBrowser/gtk/main.c + +Canonical link: https://commits.webkit.org/268141@main +--- + Tools/MiniBrowser/gtk/BrowserWindow.c | 27 ++++++++++++++++++--------- + Tools/MiniBrowser/gtk/BrowserWindow.h | 1 + + Tools/MiniBrowser/gtk/main.c | 2 +- + 3 files changed, 20 insertions(+), 10 deletions(-) + +diff --git a/Tools/MiniBrowser/gtk/BrowserWindow.c b/Tools/MiniBrowser/gtk/BrowserWindow.c +index 626ce2207e845..58eb5ae39e2e0 100644 +--- a/Tools/MiniBrowser/gtk/BrowserWindow.c ++++ b/Tools/MiniBrowser/gtk/BrowserWindow.c +@@ -482,6 +482,20 @@ static GtkWidget *webViewCreate(WebKitWebView *webView, WebKitNavigationAction * + return GTK_WIDGET(newWebView); + } + ++void browser_window_fullscreen(BrowserWindow *window) ++{ ++ gtk_window_fullscreen(GTK_WINDOW(window)); ++ gtk_widget_hide(window->toolbar); ++ window->fullScreenIsEnabled = TRUE; ++} ++ ++static void browserWindowUnfullscreen(BrowserWindow *window) ++{ ++ gtk_window_unfullscreen(GTK_WINDOW(window)); ++ gtk_widget_show(window->toolbar); ++ window->fullScreenIsEnabled = FALSE; ++} ++ + static gboolean webViewEnterFullScreen(WebKitWebView *webView, BrowserWindow *window) + { + gtk_widget_hide(window->toolbar); +@@ -867,15 +881,10 @@ static void loadHomePage(GSimpleAction *action, GVariant *parameter, gpointer us + static void toggleFullScreen(GSimpleAction *action, GVariant *parameter, gpointer userData) + { + BrowserWindow *window = BROWSER_WINDOW(userData); +- if (!window->fullScreenIsEnabled) { +- gtk_window_fullscreen(GTK_WINDOW(window)); +- gtk_widget_hide(window->toolbar); +- window->fullScreenIsEnabled = TRUE; +- } else { +- gtk_window_unfullscreen(GTK_WINDOW(window)); +- gtk_widget_show(window->toolbar); +- window->fullScreenIsEnabled = FALSE; +- } ++ if (window->fullScreenIsEnabled) ++ browserWindowUnfullscreen(window); ++ else ++ browser_window_fullscreen(window); + } + + static void webKitPrintOperationFailedCallback(WebKitPrintOperation *printOperation, GError *error) +diff --git a/Tools/MiniBrowser/gtk/BrowserWindow.h b/Tools/MiniBrowser/gtk/BrowserWindow.h +index c58ebc2beec7e..1fd07efb828b8 100644 +--- a/Tools/MiniBrowser/gtk/BrowserWindow.h ++++ b/Tools/MiniBrowser/gtk/BrowserWindow.h +@@ -58,6 +58,7 @@ GtkWidget* browser_window_new(GtkWindow*, WebKitWebContext*); + #endif + WebKitWebContext* browser_window_get_web_context(BrowserWindow*); + void browser_window_append_view(BrowserWindow*, WebKitWebView*); ++void browser_window_fullscreen(BrowserWindow*); + void browser_window_load_uri(BrowserWindow*, const char *uri); + void browser_window_load_session(BrowserWindow *, const char *sessionFile); + void browser_window_set_background_color(BrowserWindow*, GdkRGBA*); +diff --git a/Tools/MiniBrowser/gtk/main.c b/Tools/MiniBrowser/gtk/main.c +index 8be643a541511..451e0333dd4e8 100644 +--- a/Tools/MiniBrowser/gtk/main.c ++++ b/Tools/MiniBrowser/gtk/main.c +@@ -925,7 +925,7 @@ static void activate(GApplication *application, WebKitSettings *webkitSettings) + if (darkMode) + g_object_set(gtk_widget_get_settings(GTK_WIDGET(mainWindow)), "gtk-application-prefer-dark-theme", TRUE, NULL); + if (fullScreen) +- gtk_window_fullscreen(GTK_WINDOW(mainWindow)); ++ browser_window_fullscreen(mainWindow); + + if (backgroundColor) + browser_window_set_background_color(mainWindow, backgroundColor); diff --git a/nonprism/webkit2gtk/PKGBUILD b/nonprism/webkit2gtk/PKGBUILD index e646f0e..f2568d2 100644 --- a/nonprism/webkit2gtk/PKGBUILD +++ b/nonprism/webkit2gtk/PKGBUILD @@ -13,8 +13,12 @@ # - pinned to 'icu' sodep -pkgname=webkit2gtk -pkgver=2.36.3 +pkgbase=webkit2gtk +pkgname=( + webkit2gtk + webkit2gtk-docs +) +pkgver=2.42.4 pkgrel=1 pkgrel+=.nonprism1 pkgdesc="Web content engine for GTK" @@ -23,29 +27,105 @@ url="https://webkitgtk.org" arch=(x86_64) arch+=(armv7h i686) license=(custom) -depends=(cairo fontconfig freetype2 libgcrypt glib2 gtk3 harfbuzz harfbuzz-icu - icu libjpeg libsoup libxml2 zlib libpng sqlite atk libwebp at-spi2-core - libegl libgl libgles libwpe wpebackend-fdo libxslt libsecret libtasn1 - enchant libx11 libxext libice libxt wayland libnotify hyphen openjpeg2 - woff2 libsystemd bubblewrap libseccomp xdg-dbus-proxy gstreamer - gst-plugins-base-libs libmanette) -makedepends=(cmake ninja gtk-doc python ruby gobject-introspection - wayland-protocols systemd gst-plugins-bad gperf) -optdepends=('gst-plugins-good: media decoding' - 'gst-plugins-bad: media decoding' - 'gst-libav: nonfree media decoding') +depends=( + at-spi2-core + atk + bubblewrap + cairo + enchant + fontconfig + freetype2 + glib2 + gst-plugins-bad-libs + gst-plugins-base-libs + gstreamer + gtk3 + harfbuzz + harfbuzz-icu + hyphen + icu + libavif + libdrm + libegl + libepoxy + libgcrypt + libgl + libgles + libjpeg + libjxl + libmanette + libpng + libseccomp + libsecret + libsoup + libsystemd + libtasn1 + libwebp + libwpe + libx11 + libxcomposite + libxml2 + libxslt + libxt + mesa + openjpeg2 + sqlite + wayland + woff2 + wpebackend-fdo + xdg-dbus-proxy + zlib +) +makedepends=( + clang + cmake + gi-docgen + gobject-introspection + gperf + gst-plugins-bad + lld + ninja + python + ruby + systemd + unifdef + wayland-protocols +) options=(debug) -source=($url/releases/webkitgtk-$pkgver.tar.xz{,.asc}) +source=( + $url/releases/webkitgtk-$pkgver.tar.xz{,.asc} + GTK-MiniBrowser-should-hide-the-toolbar-when-using-full-screen.patch + GTK-Disable-DMABuf-renderer-for-NVIDIA-proprietary-drivers.patch +) source_i686=(webkitgtk-2.36.3-no-sse2.arch32.patch) -sha256sums=('732fcf8c4ec644b8ed28b46ebbd7c1ebab9d9e0afea9bdf5e5d12786afc478d1' - 'SKIP') +sha256sums=('52288b30bda22373442cecb86f9c9a569ad8d4769a1f97b352290ed92a67ed86' + 'SKIP' + 'a921d6be1303e9f23474971f381886fd291ec5bb1a7ff1e85acede8cfb88bef2' + '655f3b2c96355ac83c4fa1fc6048e3256bbfdbfb9727e1e18c5af12613536206') sha256sums_i686=('58a724b7f1092a9049186a3b8c61689c31558b6c2b587c827cec04219397adac') -validpgpkeys=('D7FCF61CF9A2DEAB31D81BD3F3D322D0EC4582C3' # Carlos Garcia Campos - '5AA3BC334FD7E3369E7C77B291C559DBE4C9123B') # Adrián Pérez de Castro - +b2sums=('3a8cd0818e0d989ab778cda63dd873d7e185ec20fbfe609b9da70041fe38ac30351046516600cb8eb86089e43136487d81c922690468daa70ed2a436561c2401' + 'SKIP' + 'd440d82c769f1b35caf5464dc850cdf1c896224205c90c17d8b0a44aee62e4b1383e11306936aaca067fde8836770d346d5122d7b05c91a5c7c1741c89c65e2f' + 'daa782d4d40cc12a05c02b2494e879333f66f32820f1a1b89b7ab68f62fd53043b116ecb5ef476004095a7c7b924b12695b7e87e21dd547f66e72fa02a972f0d') +validpgpkeys=( + 'D7FCF61CF9A2DEAB31D81BD3F3D322D0EC4582C3' # Carlos Garcia Campos + '5AA3BC334FD7E3369E7C77B291C559DBE4C9123B' # Adrián Pérez de Castro +) prepare() { cd webkitgtk-$pkgver + + # Requested by eworm + # https://github.com/WebKit/WebKit/pull/17909 + patch -Np1 -i ../GTK-MiniBrowser-should-hide-the-toolbar-when-using-full-screen.patch + + # https://bugs.archlinux.org/task/79783 + # https://github.com/WebKit/WebKit/pull/18614 + patch -Np1 -i ../GTK-Disable-DMABuf-renderer-for-NVIDIA-proprietary-drivers.patch + + + ## arch-specific patching ## + case "$CARCH" in i686) options+=(!debug) @@ -58,45 +138,86 @@ prepare() { } build() { + local cmake_options=( + -DPORT=GTK + -DCMAKE_BUILD_TYPE=Release + -DCMAKE_INSTALL_PREFIX=/usr + -DCMAKE_INSTALL_LIBDIR=lib + -DCMAKE_INSTALL_LIBEXECDIR=lib + -DCMAKE_SKIP_RPATH=ON + -DUSE_AVIF=ON + -DUSE_SOUP2=ON + -DENABLE_DOCUMENTATION=ON + -DENABLE_MINIBROWSER=ON + ) + + # GCC with LTO fails to link libjavascriptcoregtk + # /usr/bin/ld: /tmp/ccXxyWZV.ltrans0.ltrans.o: in function `ipint_table_size_validate': + # :(.text+0x49f0f): undefined reference to `ipint_extern_table_size' + # /usr/bin/ld: /tmp/ccXxyWZV.ltrans0.ltrans.o: in function `ipint_table_fill_validate': + # :(.text+0x4a019): undefined reference to `ipint_extern_table_fill' + # collect2: error: ld returned 1 exit status + export CC=clang CXX=clang++ + LDFLAGS+=" -fuse-ld=lld" + # Produce minimal debug info: 4.3 GB of debug data makes the # build too slow and is too much to package for debuginfod CFLAGS+=' -g1' CXXFLAGS+=' -g1' - local parabola_options=( -DENABLE_GEOLOCATION=OFF ) - case "$CARCH" in + + ## parabola config ## + + # clang-16: error: unknown argument: '-fvar-tracking-assignments' + CFLAGS="${CFLAGS/-fvar-tracking-assignments/}" + CXXFLAGS="${CXXFLAGS/-fvar-tracking-assignments/}" + + + ## arch-specific config ## + + case "${CARCH}" in i686) # linker runs out of memory on 32-bit LDFLAGS+=" -Wl,--no-keep-memory" # do not build JIT code on non-pentium4 (breaks in micro-optimizations) - parabola_options+=( -DENABLE_JIT=OFF -DENABLE_C_LOOP=ON -DENABLE_SAMPLING_PROFILER=OFF ) + cmake_options+=( -DENABLE_JIT=OFF -DENABLE_C_LOOP=ON -DENABLE_SAMPLING_PROFILER=OFF ) ;; esac + local parabola_options=( -DENABLE_GEOLOCATION=OFF ) + cmake_options+=( ${parabola_options[@]} ) - cmake -S webkitgtk-$pkgver -B build -G Ninja \ - ${parabola_options[@]} \ - -DPORT=GTK \ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_INSTALL_PREFIX=/usr \ - -DCMAKE_INSTALL_LIBDIR=lib \ - -DCMAKE_INSTALL_LIBEXECDIR=lib \ - -DCMAKE_SKIP_RPATH=ON \ - -DUSE_SOUP2=ON \ - -DENABLE_GTKDOC=OFF \ - -DENABLE_MINIBROWSER=ON + + ## upstream ## + + cmake -S webkitgtk-$pkgver -B build -G Ninja "${cmake_options[@]}" cmake --build build } -package() { - depends+=(libwpe-1.0.so libWPEBackend-fdo-1.0.so) - depends+=(libicui18n.so libicuuc.so) - provides+=(libjavascriptcoregtk-4.0.so libwebkit2gtk-4.0.so) +package_webkit2gtk() { + depends+=( + libWPEBackend-fdo-1.0.so + libwpe-1.0.so + ) + depends+=( libicui18n.so libicuuc.so ) + provides+=( + libjavascriptcoregtk-4.0.so + libwebkit2gtk-4.0.so + ) + optdepends=( + # 'geoclue: Geolocation support' # anti-feature + 'gst-libav: nonfree media decoding' + 'gst-plugins-bad: media decoding' + 'gst-plugins-good: media decoding' + ) DESTDIR="$pkgdir" cmake --install build rm -r "$pkgdir/usr/bin" + mkdir -p doc/usr/share + mv {"$pkgdir",doc}/usr/share/gtk-doc + cd webkitgtk-$pkgver find Source -name 'COPYING*' -or -name 'LICENSE*' -print0 | sort -z | while IFS= read -d $'\0' -r _f; do @@ -106,3 +227,11 @@ package() { done | install -Dm644 /dev/stdin "$pkgdir/usr/share/licenses/$pkgname/LICENSE" } + +package_webkit2gtk-docs() { + pkgdesc+=" (documentation)" + depends=() + + mv doc/* "$pkgdir" +} +