From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45060) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eqnaV-0005fL-Es for guix-patches@gnu.org; Tue, 27 Feb 2018 17:19:11 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eqnaR-0005tZ-3E for guix-patches@gnu.org; Tue, 27 Feb 2018 17:19:07 -0500 Received: from debbugs.gnu.org ([208.118.235.43]:56446) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eqnaQ-0005tI-OY for guix-patches@gnu.org; Tue, 27 Feb 2018 17:19:03 -0500 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1eqnaQ-00047m-Eg for guix-patches@gnu.org; Tue, 27 Feb 2018 17:19:02 -0500 Subject: [bug#28004] Chromium Resent-Message-ID: Date: Tue, 27 Feb 2018 22:17:11 +0000 From: ng0 Message-ID: <20180227221711.omdpbgemrjwinohb@abyayala> References: <20180104191648.custe7w3l57fvbac@abyayala> <87wp0s2ewl.fsf@fastmail.com> <20180108232042.nqjurjr2bcfl2yyc@abyayala> <87373cey5b.fsf@fastmail.com> <87vag16g5z.fsf@gnu.org> <87fu75aar5.fsf@fastmail.com> <874lnkr0vf.fsf@gnu.org> <87vaejvclc.fsf@fastmail.com> <20180226200133.zsnahblbgzovrtmu@abyayala> <87muzvv7ku.fsf@fastmail.com> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha512; protocol="application/pgp-signature"; boundary="wj6qt76xr6nidfo4" Content-Disposition: inline In-Reply-To: <87muzvv7ku.fsf@fastmail.com> List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+kyle=kyleam.com@gnu.org Sender: "Guix-patches" To: Marius Bakke Cc: 28004@debbugs.gnu.org, ng0 --wj6qt76xr6nidfo4 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Marius Bakke transcribed 43K bytes: > ng0 writes: >=20 > > Marius Bakke transcribed 2.1K bytes: > >> Mike Gerwitz writes: > >>=20 > >> > On Tue, Jan 16, 2018 at 20:01:34 +0100, Marius Bakke wrote: > >> >> If there are no objections, expect to see this in 'master' in 1-2 w= eeks. > >> > > >> > I want to express gratitude for your hard work on this---given that > >> > IceCat does not contain many of the FF devtool updates, Chromium is = very > >> > desirable for web development. It's also needed for certain Node.js > >> > tools, like node-inspector. > >> > > >> > So, thank you! > >>=20 > >> Thank *you* for the kind words! :-) > >>=20 > >> Here is the latest iteration of this patch. New in this version: > >>=20 > >> * Chromium 64 (duh). > >> * The 'delete-bundled-software' phase has been moved to a snippet, > >> shaving ~100MiB (~22%) off the compressed tarball size (and > >> drastically reduces (de)compression time). > >> * The New Tab page does not show any thumbnails for new profiles. > > > > I think you forgot to attach the patches :) >=20 > Derp. I realized that and just used `git send-email`[0], but have > attached it here for convenience since the debbugs web UI doesn't allow > easy download of a raw message. >=20 > [0] https://debbugs.gnu.org/cgi/bugreport.cgi?msg=3D131;bug=3D28004#131 > Comments inlined, some words ahead. I think it's good that we will be able to handle extensions via Guix. But: We should point it out that you won't be able to install extensions manually, via the store or as a file. People who betatested this got confused. Once we have extensions as packages, we can describe how to get extensions. Gentoo (and Nix?) have done some work on handling the extensions via system tools. > From f00529f4cd9e2e5efef146915d217cbb413d1f1a Mon Sep 17 00:00:00 2001 > From: Marius Bakke > Date: Wed, 12 Oct 2016 17:25:05 +0100 > Subject: [PATCH] gnu: Add chromium. >=20 > * gnu/packages/chromium.scm: New file. > * gnu/packages/patches/chromium-gcc.patch, > gnu/packages/patches/chromium-remove-default-history.patch: New files. > * gnu/local.mk: Record it. > --- > gnu/local.mk | 3 + > gnu/packages/chromium.scm | 756 +++++++++++++++= ++++++ > gnu/packages/patches/chromium-gcc5.patch | 39 ++ > .../patches/chromium-remove-default-history.patch | 13 + > 4 files changed, 811 insertions(+) > create mode 100644 gnu/packages/chromium.scm > create mode 100644 gnu/packages/patches/chromium-gcc5.patch > create mode 100644 gnu/packages/patches/chromium-remove-default-history.= patch >=20 > diff --git a/gnu/local.mk b/gnu/local.mk > index fa98810d6..fb1320f7b 100644 > --- a/gnu/local.mk > +++ b/gnu/local.mk > @@ -92,6 +92,7 @@ GNU_SYSTEM_MODULES =3D \ > %D%/packages/check.scm \ > %D%/packages/chemistry.scm \ > %D%/packages/chez.scm \ > + %D%/packages/chromium.scm \ > %D%/packages/ci.scm \ > %D%/packages/cinnamon.scm \ > %D%/packages/cmake.scm \ > @@ -581,6 +582,8 @@ dist_patch_DATA =3D \ > %D%/packages/patches/ceph-skip-collect-sys-info-test.patch \ > %D%/packages/patches/ceph-skip-unittest_blockdev.patch \ > %D%/packages/patches/chmlib-inttypes.patch \ > + %D%/packages/patches/chromium-gcc5.patch \ > + %D%/packages/patches/chromium-remove-default-history.patch \ > %D%/packages/patches/clang-libc-search-path.patch \ > %D%/packages/patches/clang-3.8-libc-search-path.patch \ > %D%/packages/patches/clang-runtime-asan-build-fixes.patch \ > diff --git a/gnu/packages/chromium.scm b/gnu/packages/chromium.scm > new file mode 100644 > index 000000000..1dd77b089 > --- /dev/null > +++ b/gnu/packages/chromium.scm > @@ -0,0 +1,756 @@ > +;;; GNU Guix --- Functional package management for GNU > +;;; Copyright =C2=A9 2016, 2017, 2018 Marius Bakke > +;;; > +;;; 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 . > + > +(define-module (gnu packages chromium) > + #:use-module ((guix licenses) #:prefix license:) > + #:use-module (guix packages) > + #:use-module (guix download) > + #:use-module (guix git-download) > + #:use-module (guix utils) > + #:use-module (guix build-system gnu) > + #:use-module (gnu packages) > + #:use-module (gnu packages assembly) > + #:use-module (gnu packages base) > + #:use-module (gnu packages bison) > + #:use-module (gnu packages compression) > + #:use-module (gnu packages cups) > + #:use-module (gnu packages curl) > + #:use-module (gnu packages databases) > + #:use-module (gnu packages fontutils) > + #:use-module (gnu packages ghostscript) > + #: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) > + #:use-module (gnu packages image) > + #:use-module (gnu packages libevent) > + #:use-module (gnu packages libffi) > + #:use-module (gnu packages libusb) > + #:use-module (gnu packages linux) > + #:use-module (gnu packages kerberos) > + #:use-module (gnu packages ninja) > + #:use-module (gnu packages node) > + #:use-module (gnu packages pciutils) > + #:use-module (gnu packages photo) > + #:use-module (gnu packages pkg-config) > + #:use-module (gnu packages protobuf) > + #:use-module (gnu packages pulseaudio) > + #:use-module (gnu packages python) > + #:use-module (gnu packages python-web) > + #:use-module (gnu packages regex) > + #:use-module (gnu packages serialization) > + #:use-module (gnu packages speech) > + #:use-module (gnu packages tls) > + #:use-module (gnu packages valgrind) > + #:use-module (gnu packages version-control) > + #:use-module (gnu packages video) > + #:use-module (gnu packages xiph) > + #:use-module (gnu packages xml) > + #:use-module (gnu packages xdisorg) > + #:use-module (gnu packages xorg)) > + > +(define (strip-directory-prefix pathspec) > + "Return everything after the last '/' in PATHSPEC." > + (let ((index (string-rindex pathspec #\/))) > + (if index > + (string-drop pathspec (+ 1 index)) > + pathspec))) > + > +(define (chromium-patch-file-name pathspec) > + (let ((patch-name (strip-directory-prefix pathspec))) > + (if (string-prefix? "chromium-" patch-name) > + patch-name > + (string-append "chromium-" patch-name)))) > + > +;; https://anonscm.debian.org/cgit/pkg-chromium/pkg-chromium.git/tree/de= bian/patches > +(define (debian-patch pathspec revision hash) > + (origin > + (method url-fetch) > + (uri (string-append > + "https://anonscm.debian.org/cgit/pkg-chromium/pkg-chromium.git" > + "/plain/debian/patches/" pathspec "?id=3D" revision)) > + (sha256 (base32 hash)) > + (file-name (chromium-patch-file-name pathspec)))) > + > +;; https://gitweb.gentoo.org/repo/gentoo.git/tree/www-client/chromium/fi= les > +(define (gentoo-patch pathspec revision hash) > + (origin > + (method url-fetch) > + (uri (string-append > + "https://gitweb.gentoo.org/repo/gentoo.git/plain/www-client" > + "/chromium/files/" pathspec "?id=3D" revision)) > + (sha256 (base32 hash)) > + (file-name (chromium-patch-file-name pathspec)))) > + > +;; https://github.com/gcarq/inox-patchset > +(define (inox-patch pathspec revision hash) > + (origin > + (method url-fetch) > + (uri (string-append "https://raw.githubusercontent.com/gcarq/inox-pa= tchset/" > + revision "/" pathspec)) > + (sha256 (base32 hash)) > + (file-name (chromium-patch-file-name pathspec)))) > + > +;; https://github.com/NixOS/nixpkgs/tree/master/pkgs/applications/networ= king/browsers/chromium > +(define (nixos-patch pathspec revision hash) > + (origin > + (method url-fetch) > + (uri (string-append "https://raw.githubusercontent.com/NixOS/nixpkgs= /" > + revision "/pkgs/applications/networking/browsers" > + "/chromium/patches/" pathspec)) > + (sha256 (base32 hash)) > + (file-name (chromium-patch-file-name pathspec)))) > + > +;; Fix build for older versions of GCC. > +(define %chromium-angle-gcc-compat.patch > + (gentoo-patch "chromium-angle-r0.patch" > + "08971011b4d6fa37aa906920fba7564e48b9e60b" > + "0izdrqwsyr48117dhvwdsk8c6dkrnq2njida1q4mb1lagvwbz7gc")) > + > +;; https://webrtc-review.googlesource.com/9384 > +(define %chromium-webrtc-gcc-compat.patch > + (gentoo-patch "chromium-webrtc-r0.patch" > + "08971011b4d6fa37aa906920fba7564e48b9e60b" > + "0qj5b4w9kav51ylpdf38vm5w7p2gx4qp8p45vrfggp7miicg9cmw")) > + > +;; https://chromium-review.googlesource.com/813737 > +(define %chromium-memcpy.patch > + (gentoo-patch "chromium-memcpy-r0.patch" > + "08971011b4d6fa37aa906920fba7564e48b9e60b" > + "1d3vra59wjg2lva7ddv55ff6l57mk9k50llsplr0b7vxk0lh0ps5")) > + > +(define %chromium-system-nspr.patch > + (debian-patch "system/nspr.patch" > + "debian/64.0.3282.119-2" > + "0pcwk3jsx8hjzd4s1v7p11jd8vpdqfnq82di31222cjx0bl6275r")) > + > +(define %chromium-system-libevent.patch > + (debian-patch "system/event.patch" > + "debian/64.0.3282.119-2" > + "1dxzn1yf05mzf21c25sczj4zhkknf03x9bc3xzznqpvnsf3cjpr0")) > + > +(define %chromium-system-icu.patch > + (debian-patch "system/icu.patch" > + "debian/64.0.3282.119-2" > + "0kf77d8lyma3w0xpgfv2k0c741zp6ii08gzllfja6d5s59c15ylv")) > + > +;; Don't show a warning about missing API keys. > +(define %chromium-disable-api-keys-warning.patch > + (debian-patch "disable/google-api-warning.patch" > + "debian/64.0.3282.119-2" > + "1932xkrskm4nnglzj6xfjpycx4chsycj9ay3ipkq5f6xk21a1xm0")) > + > +;; Add DuckDuckGo and set it as the default search engine. > +(define %chromium-duckduckgo.patch > + (inox-patch "0011-add-duckduckgo-search-engine.patch" > + "d655594419af6b82a2a070e4d3eedd926a04fa79" > + "0p8x98g71ngkd3wbl5q36wrl18ff185sfrr5fcwjbgrv3v7r6ra7")) > + > +;; Don't start a "Login Wizard" at first launch. > +(define %chromium-first-run.patch > + (inox-patch "0018-disable-first-run-behaviour.patch" > + "d655594419af6b82a2a070e4d3eedd926a04fa79" > + "1y4zsqqf2125jkb1phwy9g5hcbd9xhyv5lr4xcaly66rpdzx2ayb")) > + > +;; Use privacy-preserving defaults. > +(define %chromium-default-preferences.patch > + (inox-patch "0006-modify-default-prefs.patch" > + "d655594419af6b82a2a070e4d3eedd926a04fa79" > + "0qpd5l3wiw7325cicjzvdql0gay7jl4afml4nrbmy3w40i1ai2rf")) > + > +;; Recent versions of Chromium may load a remote search engine on the > +;; New Tab Page, causing unnecessary and involuntary network traffic. > +(define %chromium-restore-classic-ntp.patch > + (inox-patch "0008-restore-classic-ntp.patch" > + "d655594419af6b82a2a070e4d3eedd926a04fa79" > + "0lj018q6vd6m43cj8rnraqgi4lp2iq76i1i0078dav4cxnzdryfs")) > + > +(define opus+custom > + (package (inherit opus) > + (name "opus+custom") > + (arguments > + `(;; Opus Custom is an optional extension of the Opus > + ;; specification that allows for unsupported frame > + ;; sizes. Chromium requires that this is enabled. > + #:configure-flags '("--enable-custom-modes") > + ,@(package-arguments opus))))) > + > +(define libvpx+experimental > + (package > + (inherit libvpx) > + (name "libvpx+experimental") > + (arguments > + `(,@(substitute-keyword-arguments (package-arguments libvpx) > + ((#:configure-flags flags ''()) > + ;; Spatial SVC is an experimental VP9 encoder required by Ch= romium. > + `(cons* "--enable-experimental" "--enable-spatial-svc" > + ,flags))))))) > + > +(define-public chromium > + (package > + (name "chromium") > + (version "64.0.3282.186") > + (synopsis "Graphical web browser") > + (source (origin > + (method url-fetch) > + (uri (string-append "https://commondatastorage.googleapis.= com/" > + "chromium-browser-official/chromium-" > + version ".tar.xz")) > + (sha256 > + (base32 > + "0q0q1whspmzyln04gxhgl3jd2vrgb4imh8r9qw6c06i3b63j3l2z")) > + (patches (list %chromium-duckduckgo.patch > + %chromium-default-preferences.patch > + %chromium-first-run.patch > + %chromium-restore-classic-ntp.patch > + %chromium-angle-gcc-compat.patch > + %chromium-webrtc-gcc-compat.patch > + %chromium-memcpy.patch > + %chromium-system-icu.patch > + %chromium-system-nspr.patch > + %chromium-system-libevent.patch > + %chromium-disable-api-keys-warning.patch > + (search-patch "chromium-gcc5.patch") > + (search-patch "chromium-remove-default-hist= ory.patch"))) > + (modules '((srfi srfi-1) > + (ice-9 ftw) > + (ice-9 regex) > + (guix build utils))) > + (snippet > + '(begin > + (let ((preserved-files > + (map > + (lambda (path) (string-append "./" path)) > + (list > + "base/third_party/dmg_fp" > + "base/third_party/dynamic_annotations" > + "base/third_party/icu" > + "base/third_party/libevent" > + "base/third_party/nspr" > + "base/third_party/superfasthash" > + "base/third_party/symbolize" ;glog > + "base/third_party/xdg_mime" > + "base/third_party/xdg_user_dirs" > + "buildtools/third_party/libc++" > + "chrome/third_party/mozilla_security_manager" > + "courgette/third_party" > + "net/third_party/mozilla_security_manager" > + "net/third_party/nss" > + "third_party/adobe/flash/flapper_version.h" > + ;; FIXME: This is used in: > + ;; * ui/webui/resources/js/analytics.js > + ;; * ui/file_manager/ > + "third_party/analytics" > + "third_party/angle" > + "third_party/angle/src/common/third_party/bas= e" > + "third_party/angle/src/common/third_party/smh= asher" > + "third_party/angle/src/third_party/compiler" > + "third_party/angle/src/third_party/libXNVCtrl" > + "third_party/angle/src/third_party/trace_even= t" > + "third_party/blink" > + "third_party/boringssl" > + "third_party/boringssl/src/third_party/fiat" > + "third_party/breakpad" > + "third_party/brotli" > + "third_party/cacheinvalidation" > + "third_party/catapult" > + "third_party/catapult/common/py_vulcanize/thi= rd_party/rcssmin" > + "third_party/catapult/common/py_vulcanize/thi= rd_party/rjsmin" > + "third_party/catapult/third_party/polymer" > + "third_party/catapult/tracing/third_party/d3" > + "third_party/catapult/tracing/third_party/gl-= matrix" > + "third_party/catapult/tracing/third_party/jsz= ip" > + "third_party/catapult/tracing/third_party/man= nwhitneyu" > + "third_party/catapult/tracing/third_party/obo= e" > + "third_party/catapult/tracing/third_party/pak= o" > + "third_party/ced" > + "third_party/cld_3" > + "third_party/crc32c" > + "third_party/cros_system_api" > + "third_party/dom_distiller_js" > + "third_party/fips181" > + "third_party/flatbuffers" > + ;; PDFium requires a private freetype API. > + ;; > + "third_party/freetype/src/src/psnames/pstable= s.h" > + "third_party/glslang-angle" > + "third_party/google_input_tools" > + "third_party/google_input_tools/third_party/c= losure_library" > + (string-append "third_party/google_input_tool= s/third_party" > + "/closure_library/third_party/= closure") > + "third_party/googletest" > + "third_party/harfbuzz-ng" > + "third_party/hunspell" > + "third_party/iccjpeg" > + "third_party/inspector_protocol" > + "third_party/jinja2" > + "third_party/jstemplate" > + "third_party/khronos" > + "third_party/leveldatabase" > + "third_party/libXNVCtrl" > + "third_party/libaddressinput" > + "third_party/libjingle_xmpp" > + "third_party/libphonenumber" > + "third_party/libsecret" ;FIXME: needs pkg-con= fig support. > + "third_party/libsrtp" ;TODO: Requires libsr= tp@2. > + "third_party/libudev" > + "third_party/libwebm" > + "third_party/libxml" > + "third_party/libyuv" > + "third_party/lss" > + "third_party/lzma_sdk" > + "third_party/markupsafe" > + "third_party/mesa" > + "third_party/metrics_proto" > + "third_party/modp_b64" > + "third_party/mt19937ar" > + "third_party/node" > + (string-append "third_party/node/node_modules= /" > + "polymer-bundler/lib/third_par= ty/UglifyJS2") > + "third_party/openmax_dl" > + "third_party/ots" > + "third_party/pdfium" > + "third_party/pdfium/third_party" > + "third_party/ply" > + "third_party/polymer" > + "third_party/protobuf" > + "third_party/protobuf/third_party/six" > + "third_party/qcms" > + "third_party/sfntly" > + "third_party/skia" > + "third_party/skia/third_party/vulkan" > + "third_party/skia/third_party/gif" > + "third_party/smhasher" > + "third_party/speech-dispatcher" > + "third_party/spirv-headers" > + "third_party/spirv-tools-angle" > + "third_party/sqlite" > + "third_party/swiftshader" > + "third_party/swiftshader/third_party" > + "third_party/usb_ids" > + "third_party/usrsctp" > + "third_party/vulkan" > + "third_party/vulkan-validation-layers" > + "third_party/WebKit" > + "third_party/web-animations-js" > + "third_party/webrtc" > + "third_party/webrtc_overrides" > + "third_party/widevine/cdm/widevine_cdm_versio= n.h" > + "third_party/widevine/cdm/widevine_cdm_common= =2Eh" > + "third_party/woff2" > + "third_party/xdg-utils" > + "third_party/yasm/run_yasm.py" > + "third_party/zlib/google" > + "url/third_party/mozilla" > + "v8/src/third_party/valgrind" > + "v8/third_party/inspector_protocol")))) > + > + ;; This is an implementation of > + ;; "build/linux/unbundle/remove_bundled_libraries.py= ". > + ;; It traverses any "third_party" directory and dele= tes > + ;; files that are: > + ;; * not ending with ".gn" or ".gni"; or > + ;; * not explicitly named as argument (folder or fil= e). > + ;; TODO: Remove empty directories. > + (define (delete-files-except exceptions dir) > + > + (define (enter? name stat result) > + (not (member name exceptions))) > + > + (define (leaf name stat result) > + (let ((protected-files (make-regexp "\\.(gn|gyp)= i?$" > + regexp/icase= ))) > + (unless (or (member name exceptions) > + (regexp-exec protected-files name)) > + (delete-file name)))) > + > + (file-system-fold enter? > + leaf > + (lambda (dir stat result) result= ) ;down > + (lambda (dir stat result) result= ) ;up > + (lambda (dir stat result) result= ) ;skip > + (lambda (dir stat result) result= ) ;error > + #t > + dir)) > + > + (for-each (lambda (third-party) > + (delete-files-except preserved-files > + third-party)) > + (find-files "." "^third_party$" #:director= ies? #t)) > + > + ;; Replace GN files from third_party with shims for = building > + ;; against system libraries. Keep this list in sync= with > + ;; "build/linux/unbundle/replace_gn_files.py". > + (for-each (lambda (pair) > + (let ((source (string-append > + "build/linux/unbundle/" (= car pair))) > + (dest (cdr pair))) > + (copy-file source dest))) > + (list > + '("ffmpeg.gn" . "third_party/ffmpeg/BUILD= =2Egn") > + '("flac.gn" . "third_party/flac/BUILD.gn") > + '("freetype.gn" . "third_party/freetype/B= UILD.gn") > + ;; FIXME: This is no longer supported sin= ce 63. > + ;;'("harfbuzz-ng.gn" . "third_party/harfb= uzz-ng/BUILD.gn") > + '("icu.gn" . "third_party/icu/BUILD.gn") > + '("libdrm.gn" . "third_party/libdrm/BUILD= =2Egn") > + '("libevent.gn" . "base/third_party/libev= ent/BUILD.gn") > + '("libjpeg.gn" . > + "build/secondary/third_party/libjpeg_tu= rbo/BUILD.gn") > + '("libpng.gn" . "third_party/libpng/BUILD= =2Egn") > + '("libvpx.gn" . "third_party/libvpx/BUILD= =2Egn") > + '("libwebp.gn" . "third_party/libwebp/BUI= LD.gn") > + '("libxml.gn" . "third_party/libxml/BUILD= =2Egn") ;TODO > + '("libxslt.gn" . "third_party/libxslt/BUI= LD.gn") > + '("openh264.gn" . "third_party/openh264/B= UILD.gn") > + '("opus.gn" . "third_party/opus/BUILD.gn") > + '("re2.gn" . "third_party/re2/BUILD.gn") > + '("snappy.gn" . "third_party/snappy/BUILD= =2Egn") > + '("yasm.gn" . "third_party/yasm/yasm_asse= mble.gni") > + '("zlib.gn" . "third_party/zlib/BUILD.gn"= ))) > + #t))))) > + (build-system gnu-build-system) > + (arguments > + `(#:tests? #f > + ;; FIXME: There is a "gn" option specifically for setting -rpath,= but > + ;; it's not recognized when passed. > + #:validate-runpath? #f > + #:modules ((srfi srfi-26) > + (ice-9 ftw) > + (ice-9 regex) > + (guix build gnu-build-system) > + (guix build utils)) > + #:phases > + (modify-phases %standard-phases > + (add-after 'unpack 'patch-stuff > + (lambda* (#:key inputs #:allow-other-keys) > + (substitute* "printing/cups_config_helper.py" > + (("cups_config =3D.*") > + (string-append "cups_config =3D '" (assoc-ref inputs "cu= ps") > + "/bin/cups-config'\n"))) > + > + (substitute* > + '("base/process/launch_posix.cc" > + "base/third_party/dynamic_annotations/dynamic_annotat= ions.c" > + "sandbox/linux/seccomp-bpf/sandbox_bpf.cc" > + "sandbox/linux/services/credentials.cc" > + "sandbox/linux/services/namespace_utils.cc" > + "sandbox/linux/services/syscall_wrappers.cc" > + "sandbox/linux/syscall_broker/broker_host.cc") > + (("include \"base/third_party/valgrind/") "include \"valg= rind/")) > + > + (for-each (lambda (file) > + (substitute* file > + ;; Fix opus include path. > + ;; Do not substitute opus_private.h. > + (("#include \"opus\\.h\"") > + "#include \"opus/opus.h\"") > + (("#include \"opus_custom\\.h\"") > + "#include \"opus/opus_custom.h\"") > + (("#include \"opus_defines\\.h\"") > + "#include \"opus/opus_defines.h\"") > + (("#include \"opus_multistream\\.h\"") > + "#include \"opus/opus_multistream.h\"") > + (("#include \"opus_types\\.h\"") > + "#include \"opus/opus_types.h\""))) > + (append (find-files "third_party/opus/src/celt") > + (find-files "third_party/opus/src/src") > + (find-files (string-append "third_party/w= ebrtc/modules" > + "/audio_coding= /codecs/opus")))) > + > + (substitute* "chrome/common/chrome_paths.cc" > + (("/usr/share/chromium/extensions") > + ;; TODO: Add ~/.guix-profile. > + "/run/current-system/profile/share/chromium/extensions")) I don't know if I asked you about this in the past, but = can you explain why you picked the run dir? I have to re-read the Gentoo eclass = and Nix integration for this. > + > + (substitute* > + "third_party/breakpad/breakpad/src/common/linux/libcurl= _wrapper.h" > + (("include \"third_party/curl") "include \"curl")) > + (substitute* "media/base/decode_capabilities.cc" > + (("third_party/libvpx/source/libvpx/") "")) > + > + ;; We don't cross compile most packages, so get rid of the > + ;; unnecessary ARCH-linux-gnu* prefix. > + (substitute* "build/toolchain/linux/BUILD.gn" > + (("aarch64-linux-gnu-") "") > + (("arm-linux-gnueabihf-") "")) > + #t)) > + (replace 'configure > + (lambda* (#:key inputs outputs #:allow-other-keys) > + (let ((gn-flags > + (list > + ;; See tools/gn/docs/cookbook.md and > + ;; https://www.chromium.org/developers/gn-build-con= figuration > + ;; for usage. Run "./gn args . --list" in the Rele= ase > + ;; directory for an exhaustive list of supported fl= ags. > + "is_debug=3Dfalse" > + "is_official_build=3Dfalse" > + "is_clang=3Dfalse" > + "use_gold=3Dfalse" > + "use_lld=3Dfalse" > + "linux_use_bundled_binutils=3Dfalse" > + "use_custom_libcxx=3Dfalse" > + "use_sysroot=3Dfalse" > + "goma_dir=3D\"\"" > + "enable_precompiled_headers=3Dfalse" > + "enable_nacl=3Dfalse" > + "enable_nacl_nonsfi=3Dfalse" > + "use_allocator=3D\"none\"" ;don't use tcmalloc > + "override_build_date=3D\"01 01 2000 05:00:00\"" > + "use_unofficial_version_number=3Dfalse" > + ;; Optimize for building everything at once, as opp= osed > + ;; to incrementally for development. See "docs/jum= bo.md". > + ;; XXX: On some systems this may trigger a compiler= error. > + ;;"use_jumbo_build=3Dtrue" > + ;; Disable debugging features to save space. > + "remove_webcore_debug_symbols=3Dtrue" > + "enable_iterator_debugging=3Dfalse" > + ;; Some of the unbundled libraries throws deprecati= on > + ;; warnings, etc. Ignore it. > + "treat_warnings_as_errors=3Dfalse" > + ;; Don't add any API keys. End users can set them = in the > + ;; environment if desired. See > + ;; . > + "use_official_google_api_keys=3Dfalse" > + ;; Disable "field trials". > + "fieldtrial_testing_like_official_build=3Dtrue" > + > + "use_system_freetype=3Dtrue" > + "use_system_harfbuzz=3Dtrue" > + "use_system_libjpeg=3Dtrue" > + "use_system_lcms2=3Dtrue" > + "use_system_zlib=3Dtrue" > + ;; This is currently not supported on Linux: > + ;; https://bugs.chromium.org/p/chromium/issues/deta= il?id=3D22208 > + ;;"use_system_sqlite=3Dtrue" > + > + "use_gconf=3Dfalse" ;deprecated by gsettings > + "use_gnome_keyring=3Dfalse" ;deprecated by libsecret > + "use_gtk3=3Dtrue" > + "use_openh264=3Dtrue" > + "use_xkbcommon=3Dtrue" > + "link_pulseaudio=3Dtrue" > + > + ;; Don't arbitrarily restrict formats supported by = system ffmpeg. > + "proprietary_codecs=3Dtrue" > + "ffmpeg_branding=3D\"Chrome\"" > + > + ;; WebRTC stuff. > + "rtc_use_h264=3Dtrue" > + ;; Don't use bundled sources. > + "rtc_build_json=3Dfalse" > + "rtc_build_libevent=3Dfalse" > + "rtc_build_libvpx=3Dfalse" > + "rtc_build_opus=3Dfalse" > + "rtc_build_ssl=3Dfalse" > + ;; TODO: Package these. > + "rtc_build_libsrtp=3Dtrue" ;2.0 > + "rtc_build_libyuv=3Dtrue" > + "rtc_build_openmax_dl=3Dtrue" > + "rtc_build_usrsctp=3Dtrue" > + (string-append "rtc_jsoncpp_root=3D\"" > + (assoc-ref inputs "jsoncpp") > + "/include/jsoncpp/json\"") > + (string-append "rtc_ssl_root=3D\"" > + (assoc-ref inputs "openssl") > + "/include/openssl\"")))) > + > + ;; XXX: How portable is this. Can you extend this comment? > + (mkdir-p "third_party/node/linux/node-linux-x64") > + (symlink (string-append (assoc-ref inputs "node") "/bin") > + "third_party/node/linux/node-linux-x64/bin") > + > + (setenv "CC" "gcc") > + (setenv "CXX" "g++") > + ;; TODO: pre-compile instead. Avoids a race condition. > + (setenv "PYTHONDONTWRITEBYTECODE" "1") > + (and > + ;; Build the "gn" tool. > + (invoke "python" > + "tools/gn/bootstrap/bootstrap.py" "-s" "-v") > + ;; Generate ninja build files. > + (invoke "./out/Release/gn" "gen" "out/Release" > + (string-append "--args=3D" > + (string-join gn-flags " "))))))) > + (replace 'build > + (lambda* (#:key outputs #:allow-other-keys) > + (invoke "ninja" "-C" "out/Release" > + "-j" (number->string (parallel-job-count)) > + "chrome"))) > + (replace 'install > + (lambda* (#:key inputs outputs #:allow-other-keys) > + (let* ((out (assoc-ref outputs "out")) > + (bin (string-append out "/bin")) > + (exe (string-append bin "/chromium")) > + (lib (string-append out "/lib")) > + (man (string-append out "/share/man/man1"= )) > + (applications (string-append out "/share/applicati= ons")) > + (install-regexp (make-regexp "\\.(bin|pak)$")) > + (locales (string-append lib "/locales")) > + (resources (string-append lib "/resources")) > + (gtk+ (assoc-ref inputs "gtk+")) > + (mesa (assoc-ref inputs "mesa")) > + (nss (assoc-ref inputs "nss")) > + (udev (assoc-ref inputs "udev")) > + (sh (which "sh"))) > + > + (substitute* '("chrome/app/resources/manpage.1.in" > + "chrome/installer/linux/common/desktop.tem= plate") > + (("@@MENUNAME@@") "Chromium") > + (("@@PACKAGE@@") "chromium") > + (("/usr/bin/@@USR_BIN_SYMLINK_NAME@@") exe)) > + (mkdir-p man) > + (copy-file "chrome/app/resources/manpage.1.in" > + (string-append man "/chromium.1")) > + (mkdir-p applications) > + (copy-file "chrome/installer/linux/common/desktop.templat= e" > + (string-append applications "/chromium.desktop= ")) > + > + (with-directory-excursion "out/Release" > + (for-each (lambda (file) > + (install-file file lib)) > + (scandir "." (cut regexp-exec install-regexp = <>))) > + (copy-file "chrome" (string-append lib "/chromium")) > + > + ;; TODO: Install icons from "../../chrome/app/themes" i= nto > + ;; "out/share/icons/hicolor/$size". > + (install-file > + "product_logo_48.png" > + (string-append out "/share/icons/48x48/chromium.png")) > + > + (copy-recursively "locales" locales) > + (copy-recursively "resources" resources) > + > + (mkdir-p bin) > + ;; Add a thin wrapper to prevent the user from inadvert= ently > + ;; installing non-free software through the Web Store. > + ;; TODO: Discover extensions from the profile and pass > + ;; something like "--disable-extensions-except=3D...". To be able to work on this, can you (at least in this b= ug ticket, explain the TODO part a bit more? > + (call-with-output-file exe > + (lambda (port) > + (format port > + "#!~a~@ > + if [ -z \"$CHROMIUM_ENABLE_WEB_STORE\" ]~@ > + then~@ > + CHROMIUM_FLAGS=3D\" \\~@ > + --disable-background-networking \\~@ > + --disable-extensions \\~@ > + \"~@ > + fi~@ > + exec ~a $CHROMIUM_FLAGS \"$@\"~%" > + sh (string-append lib "/chromium")))) > + (chmod exe #o755) > + > + (wrap-program exe > + ;; TODO: Get these in RUNPATH. > + `("LD_LIBRARY_PATH" ":" prefix > + (,(string-append lib ":" nss "/lib/nss:" gtk+ "/lib= :" > + mesa "/lib:" udev "/lib"))) > + ;; Avoid file manager crash. See . > + `("XDG_DATA_DIRS" ":" prefix (,(string-append gtk+ "/= share")))) > + #t))))))) > + (native-inputs > + `(("bison" ,bison) > + ("git" ,git) ;last_commit_position.py > + ("gperf" ,gperf) > + ("ninja" ,ninja) > + ("node" ,node) > + ("pkg-config" ,pkg-config) > + ("which" ,which) > + ("yasm" ,yasm) > + > + ("python-beautifulsoup4" ,python2-beautifulsoup4) > + ("python-html5lib" ,python2-html5lib) > + ("python" ,python-2))) > + (inputs > + `(("alsa-lib" ,alsa-lib) > + ("atk" ,atk) > + ("cups" ,cups) > + ("curl" ,curl) > + ("dbus" ,dbus) > + ("dbus-glib" ,dbus-glib) > + ("expat" ,expat) > + ("flac" ,flac) > + ("ffmpeg" ,ffmpeg) > + ("fontconfig" ,fontconfig) > + ("freetype" ,freetype) > + ("gdk-pixbuf" ,gdk-pixbuf) > + ("glib" ,glib) > + ("gtk+-2" ,gtk+-2) > + ("gtk+" ,gtk+) > + ("harfbuzz" ,harfbuzz) > + ("icu4c" ,icu4c) > + ("jsoncpp" ,jsoncpp) > + ("lcms" ,lcms) > + ("libevent" ,libevent) > + ("libffi" ,libffi) > + ("libjpeg-turbo" ,libjpeg-turbo) > + ("libpng" ,libpng) > + ("libusb" ,libusb) > + ("libvpx" ,libvpx+experimental) > + ("libwebp" ,libwebp) > + ("libx11" ,libx11) > + ("libxcb" ,libxcb) > + ("libxcomposite" ,libxcomposite) > + ("libxcursor" ,libxcursor) > + ("libxdamage" ,libxdamage) > + ("libxext" ,libxext) > + ("libxfixes" ,libxfixes) > + ("libxi" ,libxi) > + ("libxkbcommon" ,libxkbcommon) > + ("libxml2" ,libxml2) > + ("libxrandr" ,libxrandr) > + ("libxrender" ,libxrender) > + ("libxscrnsaver" ,libxscrnsaver) > + ("libxslt" ,libxslt) > + ("libxtst" ,libxtst) > + ("mesa" ,mesa) > + ("minizip" ,minizip) > + ("mit-krb5" ,mit-krb5) > + ("nss" ,nss) > + ("openh264" ,openh264) > + ("openssl" ,openssl) > + ("opus" ,opus+custom) > + ("pango" ,pango) > + ("pciutils" ,pciutils) > + ("protobuf" ,protobuf) > + ("pulseaudio" ,pulseaudio) > + ("re2" ,re2) > + ("snappy" ,snappy) > + ("speech-dispatcher" ,speech-dispatcher) > + ("sqlite" ,sqlite) > + ("udev" ,eudev) > + ("valgrind" ,valgrind))) > + (home-page "https://www.chromium.org/") > + (description > + "Chromium is a web browser designed for speed and security. This > +version incorporates patches from > +@url{https://github.com/gcarq/inox-patchset,Inox} and > +@url{https://www.debian.org/,Debian} in order to protect the users priva= cy.") > + ;; Chromium is developed as BSD-3, but bundles a large number of thi= rd-party > + ;; components with other licenses. For full information, see chrome= ://credits. > + (license (list license:bsd-3 > + license:bsd-2 > + license:expat > + license:asl2.0 > + license:mpl2.0 > + license:public-domain > + license:lgpl2.1+)))) > diff --git a/gnu/packages/patches/chromium-gcc5.patch b/gnu/packages/patc= hes/chromium-gcc5.patch > new file mode 100644 > index 000000000..56b2cd6ef > --- /dev/null > +++ b/gnu/packages/patches/chromium-gcc5.patch > @@ -0,0 +1,39 @@ > +Work around a GCC5 bug where it fails to choose the correct base::span > +constructor. > + > +Adapted from this commit: > +https://gitweb.gentoo.org/repo/gentoo.git/commit/www-client/chromium?id= =3D7843d29ab07411a9c70962fb90b4cd1546910242 > + > +--- a/gpu/ipc/common/mailbox_struct_traits.h > ++++ b/gpu/ipc/common/mailbox_struct_traits.h > +@@ -15,7 +15,7 @@ namespace mojo { > + template <> > + struct StructTraits { > + static base::span name(const gpu::Mailbox& mailbox) { > +- return mailbox.name; > ++ return base::make_span(mailbox.name); > + } > + static bool Read(gpu::mojom::MailboxDataView data, gpu::Mailbox* out); > + }; > +--- a/services/viz/public/cpp/compositing/filter_operation_struct_traits= =2Eh > ++++ b/services/viz/public/cpp/compositing/filter_operation_struct_traits= =2Eh > +@@ -134,7 +134,7 @@ struct StructTraits { > + static base::span matrix(const cc::FilterOperation& oper= ation) { > + if (operation.type() !=3D cc::FilterOperation::COLOR_MATRIX) > + return base::span(); > +- return operation.matrix(); > ++ return base::make_span(operation.matrix()); > + } > + > + static base::span shape( > +--- a/services/viz/public/cpp/compositing/quads_struct_traits.h > ++++ b/services/viz/public/cpp/compositing/quads_struct_traits.h > +@@ -308,7 +308,7 @@ > + static base::span vertex_opacity(const viz::DrawQuad& in= put) { > + const viz::TextureDrawQuad* quad =3D > + viz::TextureDrawQuad::MaterialCast(&input); > +- return quad->vertex_opacity; > ++ return base::make_span(quad->vertex_opacity); > + } > +=20 > + static bool y_flipped(const viz::DrawQuad& input) { > diff --git a/gnu/packages/patches/chromium-remove-default-history.patch b= /gnu/packages/patches/chromium-remove-default-history.patch > new file mode 100644 > index 000000000..38be10820 > --- /dev/null > +++ b/gnu/packages/patches/chromium-remove-default-history.patch > @@ -0,0 +1,13 @@ > +Don't pre-populate the New Tab Page for new profiles. > + > +--- a/chrome/browser/history/top_sites_factory.cc > ++++ b/chrome/browser/history/top_sites_factory.cc > +@@ -74,7 +74,7 @@ > +=20 > + void InitializePrepopulatedPageList( > + history::PrepopulatedPageList* prepopulated_pages) { > +-#if !defined(OS_ANDROID) > ++#if false > + DCHECK(prepopulated_pages); > + prepopulated_pages->reserve(arraysize(kRawPrepopulatedPages)); > + for (size_t i =3D 0; i < arraysize(kRawPrepopulatedPages); ++i) { > --=20 > 2.16.2 >=20 Otherwise, LGTM. --=20 A88C8ADD129828D7EAC02E52E22F9BBFEE348588 https://n0.is --wj6qt76xr6nidfo4 Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEqIyK3RKYKNfqwC5S4i+bv+40hYgFAlqV2OcACgkQ4i+bv+40 hYifLRAApm0yB/3PA0/l/lquHl/7zHHSIb6s6rUbRFD963FHyohC1ik49dTrhAY5 qo50m9vWFEAntwmq38oHCuWk7+m4v4mBUr5CellO6v8mhjMFHDl8+lODziy4IM9Y 07wGzHzdgMdDBq3ec0dUWTaJpP6QQ1F/583iSOlrOA8fcler+QMqUkVUPEMB4D5F ojZ9NRoUD7XCwGYj2GA3bM6mYQw0Bq2sQGXfxaz/dvGD12vC1SRhITzGAiMQevMU JQfLcwYi22cfJSo+1UQLjeXTxrKP41ZpmVxH+bkqnClbETxVonX0t8FY15rW3A7Z Zee1Try+nJ77PI4OEKlahGciZMRAbdBr9n7hdRO7ijhQz/E26hDH/iLOhMMCKGHZ uAghL9yhfZehQzJl3GoOKMSZMCekXOnHqjWYQVtyFJ3AoI9OPvV28iy+tUrFKJxo A5Vf+UY4LcJQoYw9maZfDlSd8UK3unPQAb/3KvdPFmvVF3NsT5/a4X+7iMEY8udl 6S3q9bqjKpjSofg/uSZrEN4oZaCW34PcO9h8wP0Djm9kweiHPuY/3ADrQnFNI5Xu Jml3/P7ZXR+yPibtww0Mh7t54VXzA9LysIdBtK/W43b8aX/nidpy1xAm868C/HaW ut+RZ5GmNy+Au0PGmHOFQuSTXppgq3viWIp/wOkNhV80mliCiYs= =+xOh -----END PGP SIGNATURE----- --wj6qt76xr6nidfo4--