aboutsummaryrefslogtreecommitdiff
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
;;; Copyright © 2015 David Hashe <david.hashe@dhashe.com>
;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2015–2021 Mark H Weaver <mhw@netris.org>
;;; 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, 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2022, 2023 Efraim Flashner <efraim@flashner.co.il>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.

(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)
  #:use-module (guix build-system meson)
  #:use-module (gnu packages)
  #:use-module (gnu packages base)
  #:use-module (gnu packages bison)
  #:use-module (gnu packages c)
  #:use-module (gnu packages compression)
  #:use-module (gnu packages docbook)
  #:use-module (gnu packages enchant)
  #: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)
  #:use-module (gnu packages gl)
  #:use-module (gnu packages glib)
  #:use-module (gnu packages gnome)
  #:use-module (gnu packages gnupg)
  #:use-module (gnu packages gperf)
  #:use-module (gnu packages gstreamer)
  #:use-module (gnu packages gtk)
  #:use-module (gnu packages icu4c)
  #:use-module (gnu packages image)
  #:use-module (gnu packages libreoffice)
  #:use-module (gnu packages linux)
  #:use-module (gnu packages llvm)
  #:use-module (gnu packages perl)
  #:use-module (gnu packages pkg-config)
  #:use-module (gnu packages python)
  #:use-module (gnu packages ruby)
  #:use-module (gnu packages sqlite)
  #:use-module (gnu packages tls)
  #:use-module (gnu packages video)
  #:use-module (gnu packages virtualization)
  #:use-module (gnu packages xml)
  #:use-module (gnu packages xdisorg)
  #:use-module (gnu packages xorg))

(define-public libwpe
  (package
    (name "libwpe")
    (version "1.12.0")
    (source
     (origin
       (method url-fetch)
       (uri
        (string-append "https://wpewebkit.org/releases/libwpe-"
                       version ".tar.xz"))
       (sha256
        (base32 "13618imck69w7fbmljlh62j4gnlspb9zfqzv9hlkck3bi8icmvp8"))))
    (build-system meson-build-system)
    (arguments
     `(#:tests? #f))                    ;no tests
    (native-inputs
     `(("pkg-config" ,pkg-config)
       ("python" ,python-wrapper)))
    (inputs
     (list mesa))
    (propagated-inputs
     (list libxkbcommon))
    (synopsis "General-purpose library for WPE")
    (description "LibWPE is general-purpose library specifically developed for
the WPE-flavored port of WebKit.")
    (home-page "https://wpewebkit.org/")
    (license license:bsd-2)))

(define-public wpebackend-fdo
  (package
    (name "wpebackend-fdo")
    (version "1.12.0")
    (source (origin
              (method url-fetch)
              (uri (string-append "https://wpewebkit.org/releases/"
                                  "wpebackend-fdo-" version ".tar.xz"))
              (sha256
               (base32
                "1b3l02dns1yxw3rq18cv00qan4hp95mxw5b3ssc0fh93ap0wjfb2"))))
    (build-system meson-build-system)
    (arguments
     `(#:tests? #f))                    ;no tests
    (native-inputs
     (list pkg-config))
    (inputs
     (list glib libepoxy libwpe mesa wayland))
    (home-page "https://wpewebkit.org/")
    (synopsis "Wayland WPE backend")
    (description
     "This package provides a backend implementation for the WPE WebKit
engine that uses Wayland for graphics output.")
    (license license:bsd-2)))

(define-public webkitgtk
  (package
    (name "webkitgtk")
    (version "2.44.1")
    (source (origin
              (method url-fetch)
              (uri (string-append "https://www.webkitgtk.org/releases/"
                                  name "-" version ".tar.xz"))
              (sha256
               (base32 "0qamkk9db8m6x4qv5y10lihc18yzgrgbn6ldqw00ckghn1ci8ns2"))
              (snippet
               #~(begin
                   (use-modules (guix build utils))
                   ;; https://bugs.webkit.org/show_bug.cgi?id=268739
                   ;; Fix a FTBFS on i686, powerpc64le.
                   (substitute* "Source/JavaScriptCore/llint/LowLevelInterpreter.cpp"
                     (("UNUSED_VARIABLE\\(t[67]\\);") ""))))
              (patches (search-patches
                        "webkitgtk-adjust-bubblewrap-paths.patch"))))
    (build-system cmake-build-system)
    (outputs '("out" "doc" "debug"))
    (arguments
     (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"
              "-DENABLE_INTROSPECTION=ON"
              "-DUSE_GTK4=ON"
              ;; The minibrowser, not built by default, is a good
              ;; tool to validate the good operation of
              ;; webkitgtk.
              "-DENABLE_MINIBROWSER=ON"
              "-DUSE_LIBBACKTRACE=OFF"  ; XXX: circular dependency
              ;; The default lib installation prefix is lib64.
              (string-append "-DLIB_INSTALL_DIR=" #$output "/lib")
              ;; XXX: WebKitGTK makes use of elogind's systemd-compatible
              ;; headers, which are under the include/elogind prefix.  The WTF
              ;; component doesn't propagate the Journald header correctly
              ;; detected (stubs from elogind), hence the following hack (see:
              ;; https://bugs.webkit.org/show_bug.cgi?id=254495).
              (string-append "-DCMAKE_CXX_FLAGS=-I"
                             (search-input-directory
                              %build-inputs "include/elogind")))
      ;; 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-before 'build 'set-CC
            (lambda _
              ;; Some Perl scripts check for the CC environment variable, else
              ;; use /usr/bin/gcc.
              (setenv "CC" #$(cc-for-target))))
          (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 '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-32?)
                 ;; Don't include x86intrin.h on i686-linux.
                 '((add-after 'unpack 'fix-headers
                     (lambda _
                       (substitute* "Source/ThirdParty/ANGLE/src/common/platform.h"
                         (("\\|\\| defined\\(__i386__\\)") "")))))
                 '())
          #$@(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/doc")
                             (string-append doc "/share/doc"))))))))
    (native-inputs
     (list bison
           gettext-minimal
           `(,glib "bin")               ;for glib-mkenums, etc.
           gobject-introspection
           gperf
           perl
           pkg-config
           python-wrapper
           gi-docgen
           ruby-2.7
           unifdef))
    (propagated-inputs
     (list gtk libsoup))
    (inputs
     (list at-spi2-core
           bubblewrap
           elogind
           enchant
           geoclue
           gst-plugins-base
           gst-plugins-bad-minimal
           harfbuzz
           hyphen
           icu4c
           lcms
           libavif
           libgcrypt
           libgudev
           libjpeg-turbo
           libjxl
           libmanette
           libpng
           libseccomp
           libsecret
           libtasn1
           libwebp
           libwpe
           libxcomposite
           libxml2
           libxslt
           libxt
           mesa
           openjpeg
           sqlite
           woff2
           wpebackend-fdo
           xdg-dbus-proxy))
    (properties '((timeout . 144000)))  ; 40 hours, most notably for aarch64
    (home-page "https://www.webkitgtk.org/")
    (synopsis "Web content engine for GTK+")
    (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
propagated by default) such as @code{gst-plugins-good} and
@code{gst-plugins-bad}.")
    ;; WebKit's JavaScriptCore and WebCore components are available under
    ;; the GNU LGPL, while the rest is available under a BSD-style license.
    (license (list license:lgpl2.0
                   license:lgpl2.1+
                   license:bsd-2
                   license:bsd-3))))

(define-public webkitgtk-for-gtk3
  (package
    (inherit webkitgtk)
    (name "webkitgtk-for-gtk3")
    (arguments
     (substitute-keyword-arguments (package-arguments webkitgtk)
       ((#:configure-flags flags)
        #~(cons* "-DUSE_GTK4=OFF"
                 (delete "-DUSE_GTK4=ON" #$flags)))))
    (propagated-inputs
     (modify-inputs (package-propagated-inputs webkitgtk)
       (replace "gtk" gtk+)))
    (inputs
     (modify-inputs (package-inputs webkitgtk)
       (prepend libnotify)))))

;;; 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-for-gtk3
    (name "webkitgtk-with-libsoup2")
    (arguments (substitute-keyword-arguments (package-arguments webkitgtk-for-gtk3)
                 ((#:configure-flags flags)
                  #~(cons "-DUSE_SOUP2=ON" #$flags))))
    (propagated-inputs
     (modify-inputs (package-propagated-inputs webkitgtk-for-gtk3)
       (replace "libsoup" libsoup-minimal-2)))))

(define-public wpewebkit
  (package
    (inherit webkitgtk)
    (name "wpewebkit")
    (version "2.44.1")
    (source (origin
              (inherit (package-source webkitgtk))
              (uri (string-append "https://wpewebkit.org/releases/"
                                  name "-" version ".tar.xz"))
              (sha256
               (base32 "16y1gdz38d4b99b8zrvxy0nbrc70ih02ngi8090x7148rx7vz7rc"))))
    (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")))))
ivation-service-type does not depend on file-systems, hence incompatible with user defined /tmp mount. This commit turns x11-socket-directory-service into a shepherd one-shot service by defining a new x11-socket-directory-service-type. * gnu/services/desktop.scm (x11-socket-directory-service-type): New variable. (x11-socket-directory-service): Deprecate procedure. (desktop-services-for-system): Use new service-type. * gnu/tests/lightdm.scm: Ditto. Reviewed-by: Josselin Poiret <dev@jpoiret.xyz> Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com> 2023-03-03services: dbus: Deprecate 'dbus-service' procedure.Bruno Victal * doc/guix.texi (Desktop Services): Replace with 'dbus-root-service-type'. Document dbus-configuration. * gnu/services/dbus.scm (dbus-service): Define with 'define-deprecated'. * gnu/services/desktop.scm (desktop-services-for-system): Replace with dbus-root-service-type. * gnu/system/install.scm (%installation-services): Ditto. * gnu/tests/base.scm (%avahi-os): Ditto. * gnu/tests/docker.scm (%docker-os): Ditto. * gnu/tests/lightdm.scm (minimal-desktop-services): Ditto. * gnu/tests/virtualization.scm (%libvirt-os): Ditto. Signed-off-by: Ludovic Courtès <ludo@gnu.org> 2023-03-03services: mail: Deprecate 'dovecot-service' procedure.Bruno Victal * doc/guix.texi (Mail Services): Replace 'dovecot-service' with 'dovecot-service-type'. * gnu/services/mail.scm (dovecot-service-type): Set default value. (dovecot-service): Deprecate procedure. * gnu/tests/mail.scm (%dovecot-os): Use dovecot-service-type. Signed-off-by: Ludovic Courtès <ludo@gnu.org> 2023-03-03services: dbus: Deprecate 'polkit-service' procedure.Bruno Victal * doc/guix.texi (Desktop Services): Replace 'polkit-service' with 'polkit-service-type'. * gnu/services/dbus.scm (polkit-service): Deprecate procedure. * gnu/tests/docker.scm (%docker-os): Use polkit-service-type. * gnu/tests/virtualization.scm (%libvirt-os): Ditto. Signed-off-by: Ludovic Courtès <ludo@gnu.org> 2023-03-03services: desktop: Deprecate 'accountsservice-service' procedure.Bruno Victal * doc/guix.texi (Desktop Services): Replace 'accountsservice-service' with 'accountsservice-service-type'. * gnu/services/desktop.scm (accountsservice-service): Deprecate procedure. (desktop-services-for-system): Use accountsservice-service-type. * gnu/tests/lightdm.scm (minimal-desktop-services): Ditto. Signed-off-by: Ludovic Courtès <ludo@gnu.org> 2023-03-03services: desktop: Deprecate 'elogind-service' procedure.Bruno Victal * doc/guix.texi (Desktop Services): Replace 'elogind-service' with 'elogind-service-type'. * gnu/services/desktop.scm (elogind-service): Deprecate procedure. (desktop-services-for-system): Use elogind-service-type. * gnu/tests/lightdm.scm (minimal-desktop-services): Ditto. Signed-off-by: Ludovic Courtès <ludo@gnu.org> 2023-02-09system: Deprecate hosts-file.Bruno Victal * gnu/system.scm (operating-system-hosts-file): Deprecate procedure. (warn-hosts-file-field-deprecation): New procedure, helper for deprecated variable. (operating-system)[hosts-file]: Use helper to warn deprecated field. (local-host-aliases): Mark as deprecated. (local-host-entries): New procedure. (operating-system-default-essential-services, hurd-default-essential-services): Use hosts-service-type. Use '%operating-system-hosts-file' and 'local-host-entries'. (default-/etc/hosts): Remove procedure. (operating-system-etc-service): Remove hosts file. * doc/guix.texi (operating-system Reference) (Networking Services) (Virtualization Services): Rewrite documentation entries to use hosts-service-type. Co-authored-by: Ludovic Courtès <ludo@gnu.org> 2023-02-05services: Add mympd-service-type.Bruno Victal * gnu/services/audio.scm (mympd-service-type): New variable. * gnu/tests/audio.scm (%test-mympd): New variable. * doc/guix.texi: Document it. Signed-off-by: Liliana Marie Prikler <liliana.prikler@gmail.com> 2023-01-22gnu: hpcguix-web: Update to 0.3.0.Ludovic Courtès * gnu/packages/web.scm (hpcguix-web): Update to 0.3.0. [inputs]: Add GUILE-SYNTAX-HIGHLIGHT. [arguments]: In 'wrap-program' phase, take guile-syntax-highlight into account. * gnu/tests/web.scm (%hpcguix-web-specs): Remove 'define'. * doc/guix.texi (Web Services): Adjust accordingly. 2023-01-08gnu: Remove linux-libre 4.9.Leo Famulari This kernel series is no longer supported upstream: https://lkml.iu.edu/hypermail/linux/kernel/2301.0/06398.html https://www.kernel.org/category/releases.html * gnu/packages/aux-files/linux-libre/4.9-i686.conf, gnu/packages/aux-files/linux-libre/4.9-x86_64.conf: Delete files. * Makefile.am (AUX_FILES): Remove them. * gnu/packages/linux.scm (linux-libre-4.9-version, linux-libre-4.9-gnu-revision, deblob-scripts-4.9, linux-libre-4.9-pristine-source, linux-libre-4.9-source, linux-libre-headers-4.9, linux-libre-4.9): Remove variables. * gnu/tests/base.scm (%test-linux-libre-4.9): Likewise. 2022-12-12tests: Add system tests for each supported kernel version.Marius Bakke * gnu/tests/base.scm (%test-basic-os): Rename to ... (test-basic-os): ... this, and turn into procedure that takes optional KERNEL argument. (%test-basic-os): Use that procedure. (%test-linux-libre-5.15, %test-linux-libre-5.10, %test-linux-libre-5.4, %test-linux-libre-4.19, %test-linux-libre-4.14, %test-linux-libre-4.9): New tests. 2022-12-12Merge branch 'version-1.4.0'Ludovic Courtès 2022-12-06tests: docker-system: Increase image size.Ludovic Courtès * gnu/tests/docker.scm (run-docker-system-test)[vm]: Increase 'disk-image-size'. 2022-12-06Revert "tests: install: Fix iso-image-installer test."Maxim Cournoyer This reverts commit 0f66ef9aa99d2043abccbc80d858bdeca57534ac. e2fsprogs is now included in the installation operating system since 34f69bc6e6ea555929ecca83ee7592f5261ff5f2, making this workaround obsolete. Suggested-by: Ludovic Courtès <ludo@gnu.org> 2022-12-05Revert "tests: install: Fix iso-image-installer test."Maxim Cournoyer This reverts commit 0f66ef9aa99d2043abccbc80d858bdeca57534ac. e2fsprogs is now included in the installation operating system since 34f69bc6e6ea555929ecca83ee7592f5261ff5f2, making this workaround obsolete. Suggested-by: Ludovic Courtès <ludo@gnu.org> 2022-12-04tests: Add gdm tests.Bruno Victal * gnu/tests/gdm.scm: New file. * gnu/local.mk: Register it. Signed-off-by: Ludovic Courtès <ludo@gnu.org> 2022-11-20tests: mysql: Wait for the socket before running queries.Marius Bakke * gnu/tests/databases.scm (run-mysql-test): Add socket test. 2022-11-18services: Add Shepherd 'configuration' action to various services.Ludovic Courtès * gnu/services/avahi.scm (avahi-shepherd-service): Add 'actions' field. * gnu/services/base.scm (nscd-actions): Add call to 'shepherd-configuration-action'. * gnu/services/desktop.scm (upower-shepherd-service): Add 'actions' field. (elogind-shepherd-service): Likewise. * gnu/services/dict.scm (dicod-shepherd-service): Likewise. * gnu/services/networking.scm (openntpd-shepherd-service): Likewise. (tor-shepherd-service): Likewise. * gnu/services/ssh.scm (openssh-shepherd-service): Likewise. * gnu/services/web.scm (nginx-shepherd-service): Likewise. * gnu/services/xorg.scm (gdm-shepherd-service): Likewise. * gnu/tests/base.scm (run-basic-test)["nscd configuration action"]: New test. * doc/guix.texi (Services): Document it. 2022-11-17tests: lightdm: Use set-xorg-configuration to set keyboard layout.Maxim Cournoyer This is to validate that it works, when the login manager service type is properly specified. * gnu/tests/lightdm.scm (%lightdm-os): Use set-xorg-configuration. 2022-11-17tests: root-unmount: Wait for the first QEMU process to finish.Ludovic Courtès There was a tiny possibility that the first QEMU process would still be running by the time we launch the second one. * gnu/build/marionette.scm (marionette-pid): Export. * gnu/tests/base.scm (run-root-unmount-test)[test]: Add 'waitpid' call. 2022-10-07tests: xvnc: Do not use specification->package in OS definition.Maxim Cournoyer Doing so would cause the extra package dependencies to not be correctly registered as dependencies, which would lead to a silent failure when attempting to load or byte compile the module at the time guix build itself (e.g., when running 'guix pull'). * gnu/tests/vnc.scm (%xvnc-os) [packages]: Turn the the specification->package declaration into a list of package objects. 2022-10-07Revert "Revert "services: Add xvnc-service-type.""Maxim Cournoyer This reverts commit 0c4966160054bc50e6ab3a4ac9c9a6a1826ab5a0. The fix appears in the subsequent commit, for clarity. 2022-10-07Revert "services: Add xvnc-service-type."Maxim Cournoyer This reverts commit 1c528a95cb92b7808e6603d7956185005583629f. This broke 'guix pull', for (yet) unknown reasons. 2022-10-07services: Add xvnc-service-type.Maxim Cournoyer * gnu/services/vnc.scm: New file. * gnu/tests/vnc.scm: Likewise. * gnu/local.mk: Register them. 2022-10-07marionette: Make marionette-screen-text private.Maxim Cournoyer It has only one user, which is better suited for wait-for-screen-text anyway. * gnu/tests/base.scm (run-basic-test): Refactor to use wait-for-screen-text instead of marionette-screen-text. 2022-09-30tests: install: Fix iso-image-installer test.Mathieu Othacehe This is a follow-up of: 45eac6cdf5c8d9d7b0c564b105c790d2d2007799. It fixes the following error: + mkfs.ext4 -L my-root /dev/vda2 sh: line 12: mkfs.ext4: command not found * gnu/tests/install.scm (%test-iso-image-installer): Add e2fsprogs to the appended packages.