gnu: Add libwpe.
[jackhill/guix/guix.git] / gnu / packages / webkit.scm
index 59188ac..e4e7c06 100644 (file)
@@ -2,7 +2,10 @@
 ;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
 ;;; Copyright © 2015 David Hashe <david.hashe@dhashe.com>
 ;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
-;;; Copyright © 2015, 2016, 2017 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2015, 2016, 2017, 2018, 2019 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018 Pierre Neidhardt <mail@ambrevar.xyz>
+;;; Copyright © 2019 Marius Bakke <mbakke@fastmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix utils)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
   #:use-module (gnu packages)
   #:use-module (gnu packages base)
   #:use-module (gnu packages bison)
-  #:use-module (gnu packages databases)
+  #:use-module (gnu packages docbook)
   #:use-module (gnu packages enchant)
   #:use-module (gnu packages flex)
+  #:use-module (gnu packages gcc)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
   #: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 xml)
+  #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xorg))
 
+(define-public libwpe
+  (package
+    (name "libwpe")
+    (version "1.4.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://wpewebkit.org/releases/libwpe-"
+                                  version ".tar.xz"))
+              (sha256
+               (base32
+                "1221vs72zs87anrzhbm6pf8jnii7s6ms7mkzj6nlds9zqd7lklz2"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:tests? #f))                    ;no tests
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("mesa" ,mesa)))
+    (propagated-inputs
+     `(;; In Requires of wpe-1.0.pc.
+       ("libxkbcommon" ,libxkbcommon)))
+    (home-page "https://wpewebkit.org/")
+    (synopsis "Platform agnostic WebKit interfaces")
+    (description
+     "@code{libwpe} is a small library that defines programming interfaces
+for use by WebKit, and provides a mechanism for loading a platform-specific
+backend which implements them.")
+    (license license:bsd-2)))
+
 (define-public webkitgtk
   (package
     (name "webkitgtk")
-    (version "2.18.1")
+    (version "2.20.5")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://www.webkitgtk.org/releases/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "15fp7szmkpannx7avsynf0nv3y343qwq0fvq3rz2m2mw5wq7pnww"))))
+                "147r7an41920zl4x9srdva7fxvw2znjin5ldjkhay1cndv9gih0m"))))
     (build-system cmake-build-system)
+    (outputs '("out" "doc"))
     (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
                           (string-append ; uses lib64 by default
                            "-DLIB_INSTALL_DIR="
                            (assoc-ref %outputs "out") "/lib")
                           ;; included.  More investigation is needed.  For
                           ;; now, we explicitly disable it to prevent an error
                           ;; at configuration time.
-                          "-DUSE_GSTREAMER_GL=OFF")
+                          "-DUSE_GSTREAMER_GL=OFF"
+
+                          ;; XXX Disable WOFF2 ‘web fonts’.  These were never
+                          ;; supported in our previous builds.  Enabling them
+                          ;; requires building libwoff2 and possibly woff2dec.
+                          "-DUSE_WOFF2=OFF")
        #:phases
        (modify-phases %standard-phases
-         (add-after
-          'set-paths 'add-gst-plugins-base-include-path
-          (lambda* (#:key inputs #:allow-other-keys)
-            ;; XXX Work around a problem in the build system, which neglects
-            ;; to add -I for gst-plugins-base when compiling
-            ;; Source/WebKit2/UIProcess/WebPageProxy.cpp, apparently assuming
-            ;; that it will be in the same directory as gstreamer's header
-            ;; files.
-            (setenv "CPATH"
-                    (string-append (getenv "C_INCLUDE_PATH")
-                                   ":"
-                                   (assoc-ref inputs "gst-plugins-base")
-                                   "/include/gstreamer-1.0")))))))
+         (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$"))
+             #t))
+         (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
      `(("bison" ,bison)
        ("gettext" ,gettext-minimal)
        ("perl" ,perl)
        ("pkg-config" ,pkg-config)
        ("python" ,python-2) ; incompatible with Python 3 (print syntax)
+       ("gtk-doc" ,gtk-doc) ; For documentation generation
+       ("docbook-xml" ,docbook-xml) ; For documentation generation
        ("ruby" ,ruby)))
     (propagated-inputs
      `(("gtk+" ,gtk+)
        ("libxt" ,libxt)
        ("mesa" ,mesa)
        ("sqlite" ,sqlite)))
-    (home-page "http://www.webkitgtk.org/")
+    (home-page "https://www.webkitgtk.org/")
     (synopsis "Web content engine for GTK+")
     (description
      "WebKitGTK+ is a full-featured port of the WebKit rendering engine,
@@ -143,49 +192,35 @@ HTML/CSS applications to full-fledged web browsers.")
                    license:bsd-2
                    license:bsd-3))))
 
-;; Latest release of the stable 2.4 series, with WebKit1 support.
-(define-public webkitgtk-2.4
-  (package (inherit webkitgtk)
+;; This version of webkitgtk needs to be kept separate, because it requires a
+;; newer version of GCC than our default compiler, and this causes problems
+;; when linked with C++ libraries built using our default compiler.  For now,
+;; we use this newer webkitgtk only for selected packages, e.g. epiphany.
+(define-public webkitgtk-2.24
+  (package/inherit webkitgtk
     (name "webkitgtk")
-    (version "2.4.11")
+    (version "2.24.4")
     (source (origin
               (method url-fetch)
-              (uri (string-append "http://www.webkitgtk.org/releases/"
+              (uri (string-append "https://www.webkitgtk.org/releases/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1xsvnvyvlywwyf6m9ainpsg87jkxjmd37q6zgz9cxb7v3c2ym2jq"))))
-    (build-system gnu-build-system)
-    (arguments
-     '(#:tests? #f ; no tests
-       ;; FIXME: Disabling parallel building is a quick hack to avoid the
-       ;; failure described in
-       ;; https://lists.gnu.org/archive/html/guix-devel/2016-01/msg00837.html
-       ;; A more structural fix is needed.
-       #:parallel-build? #f
-       #:phases (modify-phases %standard-phases
-                  (add-after
-                   'unpack 'set-gcc
-                   (lambda _ (setenv "CC" "gcc") #t)))))
+                "1n3x5g1z6rg9n1ssna7wi0z6zlprjm4wzk544v14wqi6q0lv2s46"))))
     (native-inputs
-     `(("flex" ,flex)
-       ("which" ,which)
-       ,@(package-native-inputs webkitgtk)))))
-
-;; Last GTK+2 port, required by GnuCash.
-(define-public webkitgtk/gtk+-2
-  (package (inherit webkitgtk-2.4)
-    (name "webkitgtk-gtk2")
+     `(("gcc" ,gcc-7)  ; webkitgtk-2.22 requires gcc-6 or newer
+       ,@(package-native-inputs webkitgtk)))
+    (inputs
+     `(("openjpeg" ,openjpeg)
+       ,@(package-inputs webkitgtk)))
     (arguments
-     `(;; FIXME: Disabling parallel building is a quick hack to avoid the
-       ;; failure described in
-       ;; https://lists.gnu.org/archive/html/guix-devel/2016-01/msg00837.html
-       ;; A more structural fix is needed.
-       #:parallel-build? #f
-       #:configure-flags
-       '("--enable-webkit2=no"
-         "--with-gtk=2.0")
-       ,@(package-arguments webkitgtk-2.4)))
-    (propagated-inputs
-     `(("gtk+-2" ,gtk+-2)
-       ("libsoup" ,libsoup)))))
+     (substitute-keyword-arguments (package-arguments webkitgtk)
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (add-before 'configure 'work-around-gcc-7-include-path-issue
+             ;; FIXME: Work around a problem with gcc-7 includes (see
+             ;; <https://bugs.gnu.org/30756>).
+             (lambda _
+               (unsetenv "C_INCLUDE_PATH")
+               (unsetenv "CPLUS_INCLUDE_PATH")
+               #t))))))))