summary refs log tree commit diff
path: root/gnu/packages/webkit.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/webkit.scm')
-rw-r--r--gnu/packages/webkit.scm382
1 files changed, 157 insertions, 225 deletions
diff --git a/gnu/packages/webkit.scm b/gnu/packages/webkit.scm
index f79d6bd4f6..476c33a1cd 100644
--- a/gnu/packages/webkit.scm
+++ b/gnu/packages/webkit.scm
@@ -6,7 +6,7 @@
 ;;; Copyright © 2018–2021 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 @@
   #: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 @@
   #: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)
@@ -121,239 +123,146 @@ the WPE-flavored port of WebKit.")
 engine that uses Wayland for graphics output.")
     (license license:bsd-2)))
 
-(define-public wpewebkit
-  (package
-    (name "wpewebkit")
-    (version "2.34.3")
-    (source
-     (origin
-       (method url-fetch)
-       (uri
-        (string-append "https://wpewebkit.org/releases/"
-                       name "-" version ".tar.xz"))
-       (sha256
-        (base32 "1z20bza01ld4jvi0qx8xsl5y4czaniwpi8hxdjyirj1mrszy8pf3"))))
-    (build-system cmake-build-system)
-    (outputs '("out" "doc"))
-    (arguments
-     `(#:tests? #f                      ; XXX: To be enabled
-       #:configure-flags
-       (list
-        "-DPORT=WPE"
-        ;; XXX: To be enabled.
-        ;; "-DENABLE_ACCELERATED_2D_CANVAS=ON"
-        "-DUSE_SYSTEMD=OFF"
-        "-DENABLE_ENCRYPTED_MEDIA=OFF"
-        "-DENABLE_GTKDOC=ON"
-        "-DUSE_GSTREAMER_GL=OFF")
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'setenv
-           (lambda _
-             (setenv "HOME" "/tmp")
-             #t))
-         (add-after 'unpack 'patch-docbook-xml
-           (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$"))
-             #t))
-         (add-after 'unpack 'patch-cmake
-           (lambda _
-             (substitute* "Source/PlatformWPE.cmake"
-               (("(Documentation/wpe(-webextensions)?-)\\$\\{WPE_API_VERSION\\}"
-                 all prefix)
-                (string-append prefix "${WPE_API_DOC_VERSION}"))
-               (("(html/wpe(-webextensions)?-)\\$\\{WPE_API_VERSION\\}"
-                 all prefix)
-                (string-append prefix "${WPE_API_DOC_VERSION}")))))
-         (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"))
-               #t))))))
-    (native-inputs
-     `(("docbook-xml" ,docbook-xml-4.1.2)
-       ("docbook-xsl" ,docbook-xsl)
-       ("glib:bin" ,glib "bin")
-       ("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc/stable)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python-wrapper)
-       ("python2" ,python-2.7)
-       ("ruby" ,ruby)))
-    (inputs
-     `(("atk" ,atk)
-       ("atk-bridge" ,at-spi2-atk)
-       ("bubblewrap" ,bubblewrap)
-       ("cairo" ,cairo)
-       ("fontconfig" ,fontconfig)
-       ("freetype" ,freetype)
-       ("gperf" ,gperf)
-       ("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base)
-       ("harfbuzz" ,harfbuzz)
-       ("icu" ,icu4c)
-       ("lcms" ,lcms)
-       ("libepoxy" ,libepoxy)
-       ("libgcrypt" ,libgcrypt)
-       ("libjpeg" ,libjpeg-turbo)
-       ("libpng" ,libpng)
-       ("libseccomp" ,libseccomp)
-       ("libtasn1" ,libtasn1)
-       ("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)
-       ("mesa" ,mesa)
-       ("openjpeg" ,openjpeg)
-       ("sqlite" ,sqlite)
-       ("webp" ,libwebp)
-       ("woff2" ,woff2)
-       ("xdg-dbus-proxy" ,xdg-dbus-proxy)
-       ("zlib" ,zlib)))
-    (propagated-inputs
-     `(("glib" ,glib)
-       ("libsoup" ,libsoup)
-       ("wpe" ,libwpe)))
-    (synopsis "WebKit port optimized for embedded devices")
-    (description "WPE WebKit allows embedders to create simple and performant
-systems based on Web platform technologies.  It is designed with hardware
-acceleration in mind, leveraging common 3D graphics APIs for best performance.")
-    (home-page "https://wpewebkit.org/")
-    (license
-     (list
-      ;; Rendering and JavaScript Engines.
-      license:lgpl2.1+
-      ;; Others
-      license:bsd-2))
-    (properties '((cpe-name . "wpe_webkit")))))
+(define %webkit-version "2.36.0")
 
 (define-public webkitgtk
   (package
     (name "webkitgtk")
-    (version "2.34.6")
+    (version %webkit-version)
     (source (origin
               (method url-fetch)
               (uri (string-append "https://www.webkitgtk.org/releases/"
-                                  "webkitgtk-" version ".tar.xz"))
+                                  name "-" version ".tar.xz"))
               (sha256
-               (base32
-                "1xn1hhd0qaxmjf6vy6664i4mmmjsw9zgrr4w8ni3415d981zvj3b"))
-              (patches (search-patches "webkitgtk-bind-all-fonts.patch"
-                                       "webkitgtk-adjust-bubblewrap-paths.patch"
-                                       "webkitgtk-canonicalize-paths.patch"))))
+               (base32 "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 +275,40 @@ propagated by default) such as @code{gst-plugins-good} and
                    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)))))
+
+(define-public wpewebkit
+  (package
+    (inherit webkitgtk)
+    (name "wpewebkit")
+    (version %webkit-version)
+    (source (origin
+              (inherit (package-source webkitgtk))
+              (uri (string-append "https://wpewebkit.org/releases/"
+                                  name "-" version ".tar.xz"))
+              (sha256
+               (base32 "0nkdx6pckbkhs85z3pidnh4cbp0wfa38lf2qyn0grywvgpwajsh9"))))
+    (arguments
+     (substitute-keyword-arguments (package-arguments webkitgtk)
+       ((#:configure-flags flags)
+        #~(cons "-DPORT=WPE"
+                (delete "-DPORT=GTK" #$flags)))))
+    (synopsis "WebKit port optimized for embedded devices")
+    (description "WPE WebKit allows embedders to create simple and performant
+systems based on Web platform technologies.  It is designed with hardware
+acceleration in mind, leveraging common 3D graphics APIs for best performance.")
+    (home-page "https://wpewebkit.org/")
+    (properties '((cpe-name . "wpe_webkit")))))