gnu: webkitgtk: Update to 2.36.0 and enable extra features.

* gnu/packages/webkit.scm (webkitgtk): Update to 2.36.0.
[source]: Remove the webkitgtk-bind-all-fonts.patch and
webkitgtk-canonicalize-paths.patch patches.
[arguments]: Use gexp.
[tests?]: Update comment.
[build-type]: Add explanatory comment.
[configure-flags]: Enable gamepad support,  remove nonexistent
USE_SYSTEMD option and enable mini-browser.
[phases]{do-not-disable-new-dtags}: New phase.
{help-cmake-find-elogind}: Likewise.
{patch-gtk-doc-scan}: Simplify to avoid for-each.  Locate docbookx.dtd via
search-input-file.
{embed-absolute-wpebackend-reference}: Use search-input-file.
[native-inputs]: Use new style.
[inputs]: Likewise.  Add elogind and libmanette.
[description]: Adjust indentation.
(webkitgtk-with-libsoup2): Re-format comment, fixing spacing.
[configure-flags]: Use gexp.
[propagated-inputs]: Use modify-inputs to replace libsoup with
libsoup-minimal-2.
* gnu/packages/patches/webkitgtk-bind-all-fonts.patch: Delete file.
* gnu/packages/patches/webkitgtk-canonicalize-paths.patch: Likewise.
* gnu/local.mk: De-register them.
This commit is contained in:
Maxim Cournoyer 2022-04-01 23:03:15 -04:00
parent 322e23e600
commit 4ec7aac483
No known key found for this signature in database
GPG key ID: 1260E46482E63562
4 changed files with 132 additions and 202 deletions

View file

@ -1931,9 +1931,7 @@ dist_patch_DATA = \
%D%/packages/patches/vte-CVE-2012-2738-pt2.patch \
%D%/packages/patches/vtk-fix-freetypetools-build-failure.patch \
%D%/packages/patches/warsow-qfusion-fix-bool-return-type.patch \
%D%/packages/patches/webkitgtk-bind-all-fonts.patch \
%D%/packages/patches/webkitgtk-adjust-bubblewrap-paths.patch \
%D%/packages/patches/webkitgtk-canonicalize-paths.patch \
%D%/packages/patches/webrtc-audio-processing-big-endian.patch \
%D%/packages/patches/websocketpp-fix-for-cmake-3.15.patch \
%D%/packages/patches/wicd-bitrate-none-fix.patch \

View file

@ -1,25 +0,0 @@
Upstream commit: https://github.com/WebKit/WebKit/commit/31ac354cbeecf866f9a38f7b2f8f59f7975d3f6a
diff --git a/Source/WebKit/UIProcess/Launcher/glib/BubblewrapLauncher.cpp b/Source/WebKit/UIProcess/Launcher/glib/BubblewrapLauncher.cpp
index ecc804663784..8de174be3c0e 100644
--- a/Source/WebKit/UIProcess/Launcher/glib/BubblewrapLauncher.cpp
+++ b/Source/WebKit/UIProcess/Launcher/glib/BubblewrapLauncher.cpp
@@ -288,6 +288,7 @@ static void bindFonts(Vector<CString>& args)
const char* homeDir = g_get_home_dir();
const char* dataDir = g_get_user_data_dir();
const char* cacheDir = g_get_user_cache_dir();
+ const char* const * dataDirs = g_get_system_data_dirs();
// Configs can include custom dirs but then we have to parse them...
GUniquePtr<char> fontConfig(g_build_filename(configDir, "fontconfig", nullptr));
@@ -304,6 +305,10 @@ static void bindFonts(Vector<CString>& args)
bindIfExists(args, fontHomeConfigDir.get());
bindIfExists(args, fontData.get());
bindIfExists(args, fontHomeData.get());
+ for (auto* dataDir = dataDirs; dataDir && *dataDir; dataDir++) {
+ GUniquePtr<char> fontDataDir(g_build_filename(*dataDir, "fonts", nullptr));
+ bindIfExists(args, fontDataDir.get());
+ }
bindIfExists(args, "/var/cache/fontconfig"); // Used by Debian.
}

View file

@ -1,66 +0,0 @@
Upstream commit: https://github.com/WebKit/WebKit/commit/6a87eb254ef57a986a1a6ce9a3a4b66928afeb65
diff --git a/Source/WebKit/UIProcess/Launcher/glib/BubblewrapLauncher.cpp b/Source/WebKit/UIProcess/Launcher/glib/BubblewrapLauncher.cpp
index ecc804663784..a2a1c9d7a4dd 100644
--- a/Source/WebKit/UIProcess/Launcher/glib/BubblewrapLauncher.cpp
+++ b/Source/WebKit/UIProcess/Launcher/glib/BubblewrapLauncher.cpp
@@ -27,7 +27,6 @@
#include <seccomp.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
-#include <unistd.h>
#include <wtf/FileSystem.h>
#include <wtf/UniStdExtras.h>
#include <wtf/glib/GRefPtr.h>
@@ -165,6 +164,15 @@ enum class BindFlags {
Device,
};
+static void bindSymlinksRealPath(Vector<CString>& args, const char* path, const char* bindOption = "--ro-bind")
+{
+ WTF::String realPath = FileSystem::realPath(path);
+ if (path != realPath) {
+ CString rpath = realPath.utf8();
+ args.appendVector(Vector<CString>({ bindOption, rpath.data(), rpath.data() }));
+ }
+}
+
static void bindIfExists(Vector<CString>& args, const char* path, BindFlags bindFlags = BindFlags::ReadOnly)
{
if (!path || path[0] == '\0')
@@ -177,7 +185,16 @@ static void bindIfExists(Vector<CString>& args, const char* path, BindFlags bind
bindType = "--ro-bind-try";
else
bindType = "--bind-try";
- args.appendVector(Vector<CString>({ bindType, path, path }));
+
+ // Canonicalize the source path, otherwise a symbolic link could
+ // point to a location outside of the namespace.
+ bindSymlinksRealPath(args, path, bindType);
+
+ // As /etc is exposed wholesale, do not layer extraneous bind
+ // directives on top, which could fail in the presence of symbolic
+ // links.
+ if (!g_str_has_prefix(path, "/etc/"))
+ args.appendVector(Vector<CString>({ bindType, path, path }));
}
static void bindDBusSession(Vector<CString>& args, bool allowPortals)
@@ -410,17 +427,6 @@ static void bindV4l(Vector<CString>& args)
}));
}
-static void bindSymlinksRealPath(Vector<CString>& args, const char* path)
-{
- char realPath[PATH_MAX];
-
- if (realpath(path, realPath) && strcmp(path, realPath)) {
- args.appendVector(Vector<CString>({
- "--ro-bind", realPath, realPath,
- }));
- }
-}
-
// Translate a libseccomp error code into an error message. libseccomp
// mostly returns negative errno values such as -ENOMEM, but some
// standard errno values are used for non-standard purposes where their

View file

@ -6,7 +6,7 @@
;;; Copyright © 20182021 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2018 Pierre Neidhardt <mail@ambrevar.xyz>
;;; Copyright © 2019 Marius Bakke <mbakke@fastmail.com>
;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@ -27,6 +27,7 @@ (define-module (gnu packages webkit)
#:use-module ((guix licenses) #:prefix license:)
#:use-module (guix packages)
#:use-module (guix download)
#:use-module (guix gexp)
#:use-module (guix utils)
#:use-module (guix build utils)
#:use-module (guix build-system cmake)
@ -41,6 +42,7 @@ (define-module (gnu packages webkit)
#:use-module (gnu packages flex)
#:use-module (gnu packages fontutils)
#:use-module (gnu packages freedesktop)
#:use-module (gnu packages games)
#:use-module (gnu packages gcc)
#:use-module (gnu packages gettext)
#:use-module (gnu packages ghostscript)
@ -239,121 +241,142 @@ (define-public wpewebkit
(define-public webkitgtk
(package
(name "webkitgtk")
(version "2.34.6")
(version "2.36.0")
(source (origin
(method url-fetch)
(uri (string-append "https://www.webkitgtk.org/releases/"
"webkitgtk-" version ".tar.xz"))
(sha256
(base32
"1xn1hhd0qaxmjf6vy6664i4mmmjsw9zgrr4w8ni3415d981zvj3b"))
(patches (search-patches "webkitgtk-bind-all-fonts.patch"
"webkitgtk-adjust-bubblewrap-paths.patch"
"webkitgtk-canonicalize-paths.patch"))))
"0kf6avqlq9f74lwzji7l3xlnng5yqarc4ykwsmfmy8q5y6hwqxxq"))
(patches (search-patches
"webkitgtk-adjust-bubblewrap-paths.patch"))))
(build-system cmake-build-system)
(outputs '("out" "doc" "debug"))
(arguments
`(#:tests? #f ; no tests
#:build-type "Release" ; turn off debugging symbols to save space
#:configure-flags (list
"-DPORT=GTK"
"-DENABLE_GTKDOC=ON" ; No doc by default
;; Requires libmanette, new dependency added in 2.32.0.
;; TODO Decide if we should enable this
"-DENABLE_GAMEPAD=OFF"
"-DUSE_SYSTEMD=OFF"
(string-append ; uses lib64 by default
"-DLIB_INSTALL_DIR="
(assoc-ref %outputs "out") "/lib"))
#:make-flags
;; Never build with unsupported -j1: https://issues.guix.gnu.org/47964#5
(list "-j" (number->string (max 2 (parallel-job-count))))
#:phases
(modify-phases %standard-phases
(add-after 'unpack 'configure-bubblewrap-store-directory
(lambda _
;; This phase is a corollary to 'webkitgtk-share-store.patch' to
;; avoid hard coding /gnu/store, for users with other prefixes.
(let ((store-directory (%store-directory)))
(substitute*
"Source/WebKit/UIProcess/Launcher/glib/BubblewrapLauncher.cpp"
(("@storedir@") store-directory)))))
(add-after 'unpack 'patch-gtk-doc-scan
(lambda* (#:key inputs #:allow-other-keys)
(for-each (lambda (file)
(substitute* file
(("http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd")
(string-append (assoc-ref inputs "docbook-xml")
"/xml/dtd/docbook/docbookx.dtd"))))
(find-files "Source" "\\.sgml$"))))
(add-after 'unpack 'embed-absolute-wpebackend-reference
(lambda* (#:key inputs #:allow-other-keys)
(let ((wpebackend-fdo (assoc-ref inputs "wpebackend-fdo")))
(substitute* "Source/WebKit/UIProcess/glib/WebProcessPoolGLib.cpp"
(("libWPEBackend-fdo-([\\.0-9]+)\\.so" all version)
(string-append wpebackend-fdo "/lib/" all))))))
,@(if (target-x86-64?)
'()
'((add-after 'unpack 'disable-sse2
(lambda _
(substitute* "Source/cmake/WebKitCompilerFlags.cmake"
(("WTF_CPU_X86 AND NOT CMAKE_CROSSCOMPILING")
"FALSE"))))))
(add-after 'install 'move-doc-files
(lambda* (#:key outputs #:allow-other-keys)
(let ((out (assoc-ref outputs "out"))
(doc (assoc-ref outputs "doc")))
(mkdir-p (string-append doc "/share"))
(rename-file (string-append out "/share/gtk-doc")
(string-append doc "/share/gtk-doc"))))))))
(list
;; The release archive doesn't include the resources/sources needed to
;; run the various regression tests.
#:tests? #f
;; When building using the default RelWithDebInfo build type, the final
;; binaries require 20 GiB of memory to link (even with ld.gold or lld)
;; and produce 4.6 GiB of debug symbols.
#:build-type "Release"
#:configure-flags #~(list
"-DPORT=GTK"
;; GTKDOC will be removed upstream soon in favor of
;; gi-docgen; it is normally disabled because the
;; doc is rather expensive to build.
"-DENABLE_GTKDOC=ON"
;; The minibrowser, not built by default, is a good
;; tool to validate the good operation of
;; webkitgtk.
"-DENABLE_MINIBROWSER=ON"
;; The default lib installation prefix is lib64.
(string-append "-DLIB_INSTALL_DIR=" #$output "/lib"))
;; The build may fail with -j1 (see:
;; https://bugs.webkit.org/show_bug.cgi?id=195251).
#:make-flags #~(list "-j" (number->string (max 2 (parallel-job-count))))
#:phases
#~(modify-phases %standard-phases
(add-after 'unpack 'configure-bubblewrap-store-directory
(lambda _
;; This phase works in tandem with
;; webkitgtk-adjust-bubblewrap-paths.patch and avoids hard
;; coding /gnu/store, for users with other prefixes.
(let ((store-directory (%store-directory)))
(substitute*
"Source/WebKit/UIProcess/Launcher/glib/BubblewrapLauncher.cpp"
(("@storedir@") store-directory)))))
(add-after 'unpack 'do-not-disable-new-dtags
;; Ensure the linker uses new dynamic tags as this is what Guix
;; uses and validates in the validate-runpath phase.
(lambda _
(substitute* "Source/cmake/OptionsCommon.cmake"
(("if \\(LD_SUPPORTS_DISABLE_NEW_DTAGS\\)")
"if (FALSE)"))))
(add-after 'unpack 'help-cmake-find-elogind
(lambda _
(substitute* "Source/cmake/FindJournald.cmake"
;; Otherwise, CMake would throw an error because it relies on
;; the pkg-config search to locate headers.
(("pkg_check_modules\\(PC_SYSTEMD QUIET libsystemd")
"pkg_check_modules(PC_SYSTEMD QUIET libelogind"))))
(add-after 'unpack 'patch-gtk-doc-scan
(lambda* (#:key native-inputs inputs #:allow-other-keys)
(substitute* (find-files "Source" "\\.sgml$")
(("http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd")
(search-input-file (or native-inputs inputs)
"xml/dtd/docbook/docbookx.dtd")))))
(add-after 'unpack 'embed-absolute-wpebackend-reference
(lambda* (#:key inputs #:allow-other-keys)
(let ((wpebackend-fdo (assoc-ref inputs "wpebackend-fdo")))
(substitute* "Source/WebKit/UIProcess/glib/WebProcessPoolGLib.cpp"
(("libWPEBackend-fdo-[\\.0-9]+\\.so" all)
(search-input-file inputs (string-append "lib/" all)))))))
#$@(if (target-x86-64?)
'()
'((add-after 'unpack 'disable-sse2
(lambda _
(substitute* "Source/cmake/WebKitCompilerFlags.cmake"
(("WTF_CPU_X86 AND NOT CMAKE_CROSSCOMPILING")
"FALSE"))))))
(add-after 'install 'move-doc-files
(lambda* (#:key outputs #:allow-other-keys)
(let ((doc (assoc-ref outputs "doc")))
(mkdir-p (string-append doc "/share"))
(rename-file (string-append #$output "/share/gtk-doc")
(string-append doc "/share/gtk-doc"))))))))
(native-inputs
`(("bison" ,bison)
("gettext" ,gettext-minimal)
("glib:bin" ,glib "bin") ; for glib-mkenums, etc.
("gobject-introspection" ,gobject-introspection)
("gperf" ,gperf)
("perl" ,perl)
("pkg-config" ,pkg-config)
("python" ,python-wrapper)
("gtk-doc" ,gtk-doc/stable) ; For documentation generation
("docbook-xml" ,docbook-xml) ; For documentation generation
("ruby" ,ruby)))
(list bison
gettext-minimal
`(,glib "bin") ;for glib-mkenums, etc.
gobject-introspection
gperf
perl
pkg-config
python-wrapper
;; These are required to build the documentation.
gtk-doc/stable
docbook-xml
ruby))
(propagated-inputs
(list gtk+ libsoup))
(inputs
`(("at-spi2-core" ,at-spi2-core)
("bubblewrap" ,bubblewrap)
("enchant" ,enchant)
("geoclue" ,geoclue)
("gst-plugins-base" ,gst-plugins-base)
("gtk+-2" ,gtk+-2)
("harfbuzz" ,harfbuzz)
("hyphen" ,hyphen)
("icu4c" ,icu4c)
("lcms" ,lcms)
("libgcrypt" ,libgcrypt)
("libjpeg" ,libjpeg-turbo)
("libnotify" ,libnotify)
("libpng" ,libpng)
("libseccomp" ,libseccomp)
("libsecret" ,libsecret)
("libtasn1" ,libtasn1)
("libwebp" ,libwebp)
("libwpe" ,libwpe)
("libxcomposite" ,libxcomposite)
("libxml2" ,libxml2)
("libxslt" ,libxslt)
("libxt" ,libxt)
("mesa" ,mesa)
("openjpeg" ,openjpeg)
("sqlite" ,sqlite)
("woff2" ,woff2)
("wpebackend-fdo" ,wpebackend-fdo)
("xdg-dbus-proxy" ,xdg-dbus-proxy)))
(list at-spi2-core
bubblewrap
elogind
enchant
geoclue
gst-plugins-base
gtk+-2
harfbuzz
hyphen
icu4c
lcms
libgcrypt
libjpeg-turbo
libmanette
libnotify
libpng
libseccomp
libsecret
libtasn1
libwebp
libwpe
libxcomposite
libxml2
libxslt
libxt
mesa
openjpeg
sqlite
woff2
wpebackend-fdo
xdg-dbus-proxy))
(home-page "https://www.webkitgtk.org/")
(synopsis "Web content engine for GTK+")
(description
"WebKitGTK+ is a full-featured port of the WebKit rendering engine,
(description "WebKitGTK+ is a full-featured port of the WebKit rendering engine,
suitable for projects requiring any kind of web integration, from hybrid
HTML/CSS applications to full-fledged web browsers. WebKitGTK+ video playing
capabilities can be extended through the use of GStreamer plugins (not
@ -366,17 +389,17 @@ (define-public webkitgtk
license:bsd-2
license:bsd-3))))
;;; Required by gnome-online-accounts; as webkitgtk 2.34 propagates libsoup 3,
;;; which causes the build to fail.
;;; Also required by e.g. emacs-next-pgtk, emacs-xwidgets, and some other
;;; Gnome packages for webkit2gtk-4.0. See also the upstream tracker for
;;; libsoup 3: https://gitlab.gnome.org/GNOME/libsoup/-/issues/218
;;; Required by gnome-online-accounts as webkitgtk propagates libsoup 3, which
;;; causes the build to fail. Also required by e.g. emacs-next-pgtk,
;;; emacs-xwidgets, and some other GNOME packages for webkit2gtk-4.0. See
;;; also the upstream tracker for libsoup 3:
;;; https://gitlab.gnome.org/GNOME/libsoup/-/issues/218
(define-public webkitgtk-with-libsoup2
(package/inherit webkitgtk
(name "webkitgtk-with-libsoup2")
(arguments (substitute-keyword-arguments (package-arguments webkitgtk)
((#:configure-flags flags)
`(cons "-DUSE_SOUP2=ON" ,flags))))
#~(cons "-DUSE_SOUP2=ON" #$flags))))
(propagated-inputs
(alist-replace "libsoup" (list libsoup-minimal-2)
(package-propagated-inputs webkitgtk)))))
(modify-inputs (package-propagated-inputs webkitgtk)
(replace "libsoup" libsoup-minimal-2)))))