summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--gnu/packages/chromium.scm124
1 files changed, 63 insertions, 61 deletions
diff --git a/gnu/packages/chromium.scm b/gnu/packages/chromium.scm
index 03d8c74640..225a301a65 100644
--- a/gnu/packages/chromium.scm
+++ b/gnu/packages/chromium.scm
@@ -42,7 +42,6 @@
   #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
-  #:use-module (gnu packages gnuzilla)
   #:use-module (gnu packages gperf)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages icu4c)
@@ -70,12 +69,11 @@
   #:use-module (gnu packages xiph)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xdisorg)
-  #:use-module (gnu packages xorg)
-  #:use-module (srfi srfi-1))
+  #:use-module (gnu packages xorg))
 
 (define %preserved-third-party-files
   '("base/third_party/cityhash" ;Expat
-    "base/third_party/dmg_fp" ;X11-style
+    "base/third_party/double_conversion" ;BSD-3
     "base/third_party/dynamic_annotations" ;BSD-2
     "base/third_party/icu" ;Unicode, X11-style
     "base/third_party/superfasthash" ;BSD-3
@@ -126,6 +124,7 @@
     "third_party/catapult/tracing/third_party/pako" ;Expat
     "third_party/ced" ;BSD-3
     "third_party/cld_3" ;ASL2.0
+    "third_party/closure_compiler" ;ASL2.0
     "third_party/crashpad" ;ASL2.0
     "third_party/crashpad/crashpad/third_party/lss" ;ASL2.0
     "third_party/crashpad/crashpad/third_party/zlib/zlib_crashpad.h" ;Zlib
@@ -133,6 +132,7 @@
     "third_party/cros_system_api" ;BSD-3
     "third_party/dav1d" ;BSD-2
     "third_party/dawn" ;ASL2.0
+    "third_party/depot_tools/owners.py" ;BSD-3
     "third_party/dom_distiller_js" ;BSD-3
     "third_party/emoji-segmenter" ;ASL2.0
     "third_party/flatbuffers" ;ASL2.0
@@ -170,7 +170,9 @@
     "third_party/nasm" ;BSD-2
     "third_party/node" ;Expat
     "third_party/node/node_modules/polymer-bundler/lib/third_party/UglifyJS2" ;BSD-2
+    "third_party/one_euro_filter" ;BSD-3
     "third_party/openscreen" ;BSD-3
+    "third_party/openscreen/src/third_party/tinycbor" ;Expat
     "third_party/ots" ;BSD-3
     "third_party/pdfium" ;BSD-3
     "third_party/pdfium/third_party/agg23" ;Expat
@@ -181,6 +183,7 @@
     "third_party/pffft" ;the "FFTPACK" license, similar to BSD-3
     "third_party/ply" ;BSD-3
     "third_party/polymer" ;BSD-3
+    "third_party/private-join-and-compute" ;ASL2.0
     "third_party/protobuf" ;BSD-3
     "third_party/protobuf/third_party/six" ;Expat
     "third_party/pyjson5" ;ASL2.0
@@ -239,9 +242,9 @@ from forcing GEXP-PROMISE."
                       #:system system
                       #:guile-for-build guile)))
 
-(define %chromium-version "76.0.3809.132")
-(define %ungoogled-revision "8eba5c0df1a318012e3deab39a9add252a0d56a3")
-(define %debian-revision "debian/76.0.3809.87-2")
+(define %chromium-version "78.0.3904.97")
+(define %ungoogled-revision "acaf16383f264d8a2f24142ad054c9b4355771d3")
+(define %debian-revision "e43d74632091324774a5049668782dba7b09cf72")
 (define package-revision "0")
 (define %package-version (string-append %chromium-version "-"
                                         package-revision "."
@@ -255,7 +258,7 @@ from forcing GEXP-PROMISE."
                         %chromium-version ".tar.xz"))
     (sha256
      (base32
-      "0hajwjf7swlgh1flpf8ljfrb2zhmcpzvrigvvxqd36g3nm04cknm"))))
+      "01wx5bi397d80za0sdfwgfbjj6n2ad2i31zmcrhm6wzryjwrmx6i"))))
 
 (define %ungoogled-origin
   (origin
@@ -266,7 +269,7 @@ from forcing GEXP-PROMISE."
                               (string-take %ungoogled-revision 7)))
     (sha256
      (base32
-      "08fd9whfc1qky44xqxbypr7jz1rg6cma017wj4b5c5b14grxz6k6"))))
+      "1gqbch6dnww3c3vn1i4nb07iz1f78mws9dsxscj3rsrkcgwhsdz8"))))
 
 (define %debian-origin
   (origin
@@ -280,7 +283,7 @@ from forcing GEXP-PROMISE."
                                   (string-take %debian-revision 7))))
     (sha256
      (base32
-      "1fjhpzrxmgjr7i31li1vsfmp0qkbi0cpyc7p1zjwvf2x4da0v907"))))
+      "1l1ajjkn1y7ql5w4zb3c3vw57hkydvy1mac7y81rycx4g5djasaz"))))
 
 (define (gentoo-patch name hash revision)
   (origin
@@ -290,20 +293,6 @@ from forcing GEXP-PROMISE."
     (file-name name)
     (sha256 (base32 hash))))
 
-(define-syntax-rule (gentoo-patches (name hash) ...)
-  (list (gentoo-patch name hash "9fd80e7d75aa63843ec33c9d44fee32596ae8f25")
-        ...))
-
-(define %auxiliary-patches
-  ;; XXX: Debians "gcc/wrong-namespace.patch" and "fixes/inspector.patch" does
-  ;; not work for us, so we take these upstream fixes via Gentoo instead.
-  (gentoo-patches
-   ("chromium-76-quiche.patch" "1cs0y16jn7r1nxh0j36vqcsdvigl902kdcqfmyivnxgblrx66l2i")
-   ("chromium-76-gcc-blink-namespace1.patch"
-    "0k7nrn0dhvqxj4sg2gndzxih0l1f77h6pv7jhcdz7h69sm4xci2z")
-   ("chromium-76-gcc-blink-namespace2.patch"
-    "014y2d8ii9sr340sjbv1fhsjd5s3dl0vbmq5wzlkdjsp91dcn9ch")))
-
 ;; This is a "computed" origin that does the following:
 ;; *) Runs the Ungoogled scripts on a pristine Chromium tarball.
 ;; *) Applies Debians Chromium patches, for their unbundling and GCC work.
@@ -375,12 +364,19 @@ from forcing GEXP-PROMISE."
                                           ;; Skip the Debian-specific ones.
                                           (not (string-prefix? "debianization/" line))
                                           (not (string-prefix? "buster/" line))
-                                          ;; And those that conflict with Ungoogled.
                                           (not (any (cute string-suffix? <> line)
+                                                    ;; These conflict with Ungoogled.
                                                     '("widevine-buildflag.patch"
                                                       "signin.patch"
                                                       "third-party-cookies.patch"
 
+                                                      ;; Disable workarounds for the
+                                                      ;; Chromium "-lite" tarball.  We
+                                                      ;; use the "full" version and don't
+                                                      ;; need these patches.
+                                                      "closure.patch"
+                                                      "owners.patch"
+
                                                       ;; XXX: 'fixes/inspector.patch'
                                                       ;; makes v8 reuse the top-level
                                                       ;; third_party/inspector_protocol
@@ -388,21 +384,12 @@ from forcing GEXP-PROMISE."
                                                       ;; but that does not work here for
                                                       ;; some reason.  Ignore that patch
                                                       ;; and those that depend on it.
-                                                      "wrong-namespace.patch"
-                                                      "explicit-specialization.patch"
                                                       "inspector.patch"))))
                                  (invoke "patch" "--force" "-p1" "--input"
                                          (string-append patches "/" line)
                                          "--no-backup-if-mismatch"))
                                (loop (read-line)))))))
 
-                     (format #t "Applying Guix-specific patches...~%")
-                     (force-output)
-                     (for-each (lambda (patch)
-                                 (invoke "patch" "--force" "-p1" "--input"
-                                         patch "--no-backup-if-mismatch"))
-                               '#+%auxiliary-patches)
-
                      (format #t "Pruning third party files...~%")
                      (force-output)
                      (apply invoke "python"
@@ -442,6 +429,21 @@ from forcing GEXP-PROMISE."
         `(cons "--enable-custom-modes"
                ,flags))))))
 
+;; Chromium 78 requires libvpx features that are not in any release.
+(define libvpx/chromium
+  (package/inherit
+   libvpx
+   (version "m78-3904")
+   (source (origin
+             (inherit (package-source libvpx))
+             (uri (git-reference
+                   (url "https://chromium.googlesource.com/webm/libvpx")
+                   (commit version)))
+             (file-name (git-file-name "libvpx" version))
+             (sha256
+              (base32
+               "1pphjfmg0aqq93n5cq790884v1h84di8p9mk3r28sm053wszhm7g"))))))
+
 (define-public ungoogled-chromium
   (package
     (name "ungoogled-chromium")
@@ -591,8 +593,14 @@ from forcing GEXP-PROMISE."
                 ;; TODO: Add ~/.guix-profile.
                 "/run/current-system/profile/share/chromium/extensions"))
 
+             ;; Many files try to include ICU headers from "third_party/icu/...".
+             ;; Remove the "third_party/" prefix to use system headers instead.
+             (substitute* (find-files "chrome" "\\.cc$")
+               (("third_party/icu/source/(common|i18n)/")
+                ""))
+
              ;; XXX: Should be unnecessary when use_system_lcms2=true.
-             (substitute* "third_party/pdfium/core/fxcodec/codec/ccodec_iccmodule.h"
+             (substitute* "third_party/pdfium/core/fxcodec/icc/iccmodule.h"
                (("include \"third_party/lcms/include/lcms2\\.h\"")
                 "include \"lcms2.h\""))
 
@@ -632,10 +640,6 @@ from forcing GEXP-PROMISE."
              ;; Prevent GCC from optimizing away null pointer safety checks.
              (setenv "CXXFLAGS" "-fno-delete-null-pointer-checks")
 
-             ;; Work around <https://bugs.gnu.org/30756>.
-             (unsetenv "C_INCLUDE_PATH")
-             (unsetenv "CPLUS_INCLUDE_PATH")
-
              ;; TODO: pre-compile instead. Avoids a race condition.
              (setenv "PYTHONDONTWRITEBYTECODE" "1")
 
@@ -658,6 +662,22 @@ from forcing GEXP-PROMISE."
                (invoke "gn" "args" "out/Release" "--list"))))
          (replace 'build
            (lambda* (#:key (parallel-build? #t) #:allow-other-keys)
+             ;; XXX: Chromiums linking step requires a lot of simultaneous file
+             ;; accesses.  Having a too low ulimit will result in bogus linker
+             ;; errors such as "foo.a: error adding symbols: malformed archive".
+
+             ;; Try increasing the soft resource limit of max open files to 4096,
+             ;; or equal to the hard limit, whichever is lower.
+             (call-with-values (lambda () (getrlimit 'nofile))
+               (lambda (soft hard)
+                 (when (and soft (< soft 4096))
+                   (if hard
+                       (setrlimit 'nofile (min hard 4096) hard)
+                       (setrlimit 'nofile 4096 #f))
+                   (format #t
+                           "increased maximum number of open files from ~d to ~d~%"
+                           soft (if hard (min hard 4096) 4096)))))
+
              (invoke "ninja" "-C" "out/Release"
                      "-j" (if parallel-build?
                               (number->string (parallel-job-count))
@@ -728,7 +748,7 @@ from forcing GEXP-PROMISE."
                       (mkdir-p icons)
                       (copy-file (string-append "product_logo_" size ".png")
                                  (string-append icons "/chromium.png"))))
-                  '("22" "24" "48" "64" "128" "256")))
+                  '("24" "48" "64" "128" "256")))
                #t))))))
     (native-inputs
      `(("bison" ,bison)
@@ -771,7 +791,7 @@ from forcing GEXP-PROMISE."
        ("libjpeg-turbo" ,libjpeg-turbo)
        ("libpng" ,libpng)
        ("libva" ,libva)
-       ("libvpx" ,libvpx)
+       ("libvpx" ,libvpx/chromium)
        ("libwebp" ,libwebp)
        ("libx11" ,libx11)
        ("libxcb" ,libxcb)
@@ -807,10 +827,7 @@ from forcing GEXP-PROMISE."
 
     ;; Building Chromium takes ... a very long time.  On a single core, a busy
     ;; mid-end x86 system may need more than 24 hours to complete the build.
-    (properties '((timeout . 144000)    ;40 hours
-
-                  ;; Hide the package pending complete removal (see below).
-                  (hidden? . #t)))
+    (properties '((timeout . 144000)))  ;40 hours
 
     (home-page "https://github.com/Eloston/ungoogled-chromium")
     (description
@@ -836,12 +853,7 @@ disabled in order to protect the users privacy.")
     (inputs
      `(("wayland" ,wayland)
        ("wayland-protocols" ,wayland-protocols)
-       ;; Remove inputs only needed for X11.
-       ,@(fold alist-delete (package-inputs ungoogled-chromium)
-               '("libx11" "libxcb" "libxcomposite" "libxcursor"
-                 "libxdamage" "libxext" "libxfixes" "libxi"
-                 "libxrender" "libxtst" "libxext" "libxrandr"
-                 "libxscrnsaver"))))
+       ,@(package-inputs ungoogled-chromium)))
 
     (arguments
      (substitute-keyword-arguments (package-arguments ungoogled-chromium)
@@ -856,13 +868,3 @@ disabled in order to protect the users privacy.")
                                       (assoc-ref %build-inputs "wayland")
                                       "/bin/wayland-scanner\""))
                  (delete "use_vaapi=true" ,flags)))))))
-
-;; Ungoogled-Chromium has been deprecated because Debians patches are no
-;; longer updated.  If you would like to work on porting the required patches,
-;; please reach out to guix-devel@gnu.org.
-
-(define-public ungoogled-chromium-is-deprecated
-  (deprecated-package "ungoogled-chromium" icecat))
-
-(define-public ungoogled-chromium-wayland-is-deprecated
-  (deprecated-package "ungoogled-chromium-wayland" icecat))