all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Marius Bakke <mbakke@fastmail.com>
To: Ricardo Wurmus <rekado@elephly.net>, mike.rosset@gmail.com
Cc: guix-devel@gnu.org, GNU Guix maintainers <guix-maintainers@gnu.org>
Subject: Re: qtwenengine anybody?
Date: Mon, 06 Jan 2020 20:23:52 +0100	[thread overview]
Message-ID: <87d0bw2xtj.fsf@devup.no> (raw)
In-Reply-To: <87lfql7k9w.fsf@elephly.net>


[-- Attachment #1.1: Type: text/plain, Size: 1655 bytes --]

Ricardo Wurmus <rekado@elephly.net> writes:

> Hi Mike,
>
> thank you for your patient reply.
>
>> Ricardo Wurmus <rekado@elephly.net> writes:
>>
>>> Does the code include DRM support, for example?  Does it phone home?
>>> Can we see the patches that upstream applied to the Chromium sources?
>>>
>>
>> QtWebengine does not handle DRM at all. That is handled by a 3rd party
>> plugin called wildevine and would require guix to bundle that plugin.
>> Something I'm confident is not going to happen. As an added measure my
>> proposed qtwebengine declaration has pepper plugins disabled making it
>> impossible to load 3rd party plugins either way.
>>
>> see https://doc.qt.io/qt-5/qtwebengine-features.html#html5-drm
>> for reference
>
> I’m aware of this.  My apologies for not expressing myself more
> clearly.  We probably want to remove the support for the DRM plugin,
> following the discussions about ungoogled-chromium at
>
>     https://issues.guix.gnu.org/issue/34565

I have attached a patch that disables support for loading the Widevine
plugin, and also removes unused bundled software from the source based
on a whitelist, similar to ungoogled-chromium's
%PRESERVED-THIRD-PARTY-FILES.

It removes some 300+ MiB from the uncompressed sources.  The snippet
will require some adjustments for every new version of QtWebEngine
however, I can help out with that when required.

Patch 1/2 is a slightly "cleaned up" version of Mike's latest patch,
fixing some cosmetic issues, and makes it respect the daemons requested
number of build cores.

With these changes, I think the package is ready to go.  \o/


[-- Attachment #1.2: 0001-gnu-Add-qtwebengine.patch --]
[-- Type: text/x-patch, Size: 8464 bytes --]

From 3e373d54e08c95db16d53110051e008e6d08d55b Mon Sep 17 00:00:00 2001
From: Mike Rosset <mike.rosset@gmail.com>
Date: Wed, 1 Jan 2020 08:03:52 -0800
Subject: [PATCH 1/2] gnu: Add qtwebengine.

* gnu/packages/qt.scm (qtwebengine): New variable.

Signed-off-by: Marius Bakke <mbakke@fastmail.com>
---
 gnu/packages/qt.scm | 144 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 144 insertions(+)

diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm
index 795b5e9d2b..d6ceb5b90f 100644
--- a/gnu/packages/qt.scm
+++ b/gnu/packages/qt.scm
@@ -13,6 +13,7 @@
 ;;; Copyright © 2018 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2019 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2018 John Soo <jsoo1@asu.edu>
+;;; Copyright © 2020 Mike Rosset <mike.rosset@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -52,30 +53,40 @@
   #:use-module (gnu packages flex)
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages gcc)
+  #:use-module (gnu packages ghostscript)
   #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
+  #: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 libevent)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages llvm)
   #:use-module (gnu packages maths)
+  #:use-module (gnu packages ninja)
   #:use-module (gnu packages nss)
   #:use-module (gnu packages pciutils)
   #:use-module (gnu packages pcre)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages pulseaudio)
+  #:use-module (gnu packages protobuf)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-xyz)
+  #:use-module (gnu packages regex)
   #:use-module (gnu packages ruby)
   #:use-module (gnu packages sdl)
+  #:use-module (gnu packages serialization)
   #:use-module (gnu packages sqlite)
+  #:use-module (gnu packages telephony)
   #:use-module (gnu packages tls)
+  #:use-module (gnu packages video)
   #:use-module (gnu packages vulkan)
   #:use-module (gnu packages xdisorg)
+  #:use-module (gnu packages xiph)
   #:use-module (gnu packages xorg)
   #:use-module (gnu packages xml)
   #:use-module (srfi srfi-1))
@@ -2020,6 +2031,139 @@ time Web content can be enhanced with native controls.")
 
     (license license:lgpl2.1+)))
 
+(define-public qtwebengine
+  (package
+    (inherit qtsvg)
+    (name "qtwebengine")
+    (version (package-version qtbase))
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://download.qt.io/official_releases/qt/"
+                                  (version-major+minor version) "/" version
+                                  "/submodules/" name "-everywhere-src-"
+                                  version ".tar.xz"))
+              (sha256
+               (base32
+                "08c60nh95m98mcqk444axs76xi6m9x0wvdxrzk9c2cxwqdbz59fa"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("bison" ,bison)
+       ("flex" ,flex)
+       ("gperf" ,gperf)
+       ("ninja" ,ninja)
+       ("perl" ,perl)
+       ("pkg-config" ,pkg-config)
+       ("python-2" ,python-2)
+       ("ruby" ,ruby)))
+    (inputs
+     `(("alsa-lib" ,alsa-lib)
+       ("atk" ,atk)
+       ("cups-minimal" ,cups-minimal)
+       ("dbus" ,dbus)
+       ("ffmpeg" ,ffmpeg)
+       ("fontconfig" ,fontconfig)
+       ("harbuzz" ,harfbuzz)
+       ("icu4c" ,icu4c)
+       ("jsoncpp" ,jsoncpp)
+       ("lcms" ,lcms)
+       ("libcap" ,libcap)
+       ("libevent" ,libevent)
+       ("libgcrypt" ,libgcrypt)
+       ("libjpeg" ,libjpeg-turbo)
+       ("libvpx" ,libvpx)
+       ;; FIXME: configure does not find system lcms
+       ;; ("lcms" ,lcms)
+       ("libwebp" ,libwebp)
+       ("libx11" ,libx11)
+       ("libxcb" ,libxcb)
+       ("libxcomposite" ,libxcomposite)
+       ("libxcursor" ,libxcursor)
+       ("libxi" ,libxi)
+       ("libxkbcommon" ,libxkbcommon)
+       ;; FIXME: libxml2 needs to built with icu support though it links to
+       ;; libxml2 configure summary still states. Checking for compatible
+       ;; system libxml2... no
+       ("libxml2" ,libxml2)
+       ("libxrandr" ,libxrandr)
+       ("libxrender" ,libxrender)
+       ("libxslt" ,libxslt)
+       ("libxtst" ,libxtst)
+       ("mesa" ,mesa)
+       ("minizip" ,minizip)
+       ("nss" ,nss)
+       ("opus" ,opus)
+       ("pciutils" ,pciutils)
+       ("protobuf" ,protobuf)
+       ("pulseaudio" ,pulseaudio)
+       ("qtbase" ,qtbase)
+       ("qtdeclarative" ,qtdeclarative)
+       ("qtmultimedia" ,qtmultimedia)
+       ("qtwebchannel" ,qtwebchannel)
+       ("re2" ,re2)
+       ("snappy" ,snappy)
+       ("udev" ,eudev)
+       ("xcb-util" ,xcb-util)))
+    (arguments
+     (substitute-keyword-arguments (package-arguments qtsvg)
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (add-before 'configure 'substitute-source
+             (lambda* (#:key inputs outputs #:allow-other-keys)
+               (let ((out (assoc-ref outputs "out"))
+                     (nss (assoc-ref inputs "nss"))
+                     (udev (assoc-ref inputs "udev")))
+                 ;; Qtwebengine is not installed into the same prefix as
+                 ;; qtbase. Some qtbase QTLibraryInfo constants will not
+                 ;; work. Replace with the full path to the qtwebengine
+                 ;; translations and locales in the store.
+                 (substitute* "src/core/web_engine_library_info.cpp"
+                   (("QLibraryInfo::location\\(QLibraryInfo::TranslationsPath\\)")
+                    (string-append "QLatin1String(\"" out "/share/qt5/translations\")"))
+                   (("QLibraryInfo::location\\(QLibraryInfo::DataPath\\)")
+                    (string-append "QLatin1String(\"" out "/share/qt5\")")))
+                 ;; Substitute full dynamic library path for nss
+                 (substitute* "src/3rdparty/chromium/crypto/nss_util.cc"
+                   (("libnssckbi.so")
+                    (string-append nss "/lib/nss/libnssckbi.so")))
+                 ;; Substitute full dynamic library path for udev
+                 (substitute* "src/3rdparty/chromium/device/udev_linux/udev1_loader.cc"
+                   (("libudev.so.1")
+                    (string-append udev "/lib/libudev.so.1")))
+                 #t)))
+           (add-before 'configure 'set-env
+             (lambda _
+               ;; Avoids potential race conditions
+               (setenv "PYTHONDONTWRITEBYTECODE" "1")
+               (setenv "NINJAFLAGS"
+                       (string-append "-k1" ;less verbose build output
+                                      ;; Respect the '--cores' option of 'guix build'.
+                                      " -j" (number->string (parallel-job-count))))
+               #t))
+           (replace 'configure
+             (lambda _
+               ;; Valid QT_BUILD_PARTS variables are:
+               ;; libs tools tests examples demos docs translations
+               (invoke "qmake" "QT_BUILD_PARTS = libs tools" "--"
+                       "--webengine-printing-and-pdf=no"
+                       "--webengine-ffmpeg=system"
+                       "--webengine-icu=system"
+                       "--webengine-pepper-plugins=no")))))
+       ;; Tests are disabled due to Could not find QtWebEngineProcess error
+       ;; It's possible this can be fixed by setting QTWEBENGINEPROCESS_PATH
+       ;; before running tests It's also possible some tests need a network
+       ((#:tests? _ #f) #f)))
+    (native-search-paths
+     (list (search-path-specification
+            (file-type 'regular)
+            (separator #f)
+            (variable "QTWEBENGINEPROCESS_PATH")
+            (files '("lib/qt5/libexec/QtWebEngineProcess")))))
+    (home-page "https://www.qt.io")
+    (synopsis "Qt WebEngine module")
+    (description "Qt5WebEngine provides support for web
+applications using the Chromium browser project.")
+    (license license:lgpl2.1+)))
+
 (define-public dotherside
   (package
     (name "dotherside")
-- 
2.24.1


[-- Attachment #1.3: 0002-gnu-qtwebengine-Purge-unused-bundled-software-from-t.patch --]
[-- Type: text/x-patch, Size: 11866 bytes --]

From 487ec682c64fea85ff48ab44d6d918c388f43565 Mon Sep 17 00:00:00 2001
From: Marius Bakke <mbakke@fastmail.com>
Date: Fri, 3 Jan 2020 19:32:52 +0100
Subject: [PATCH 2/2] gnu: qtwebengine: Purge unused bundled software from the
 source.

* gnu/packages/qt.scm (qtwebengine)[source](modules, snippet): New fields.
[inputs]: Add CURL and VALGRIND.
---
 gnu/packages/qt.scm | 200 +++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 190 insertions(+), 10 deletions(-)

diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm
index d6ceb5b90f..38a620c90c 100644
--- a/gnu/packages/qt.scm
+++ b/gnu/packages/qt.scm
@@ -11,7 +11,7 @@
 ;;; Copyright © 2018 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2018 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;; Copyright © 2018 Eric Bavier <bavier@member.fsf.org>
-;;; Copyright © 2019 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2019, 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2018 John Soo <jsoo1@asu.edu>
 ;;; Copyright © 2020 Mike Rosset <mike.rosset@gmail.com>
 ;;;
@@ -47,6 +47,7 @@
   #:use-module (gnu packages cmake)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages cups)
+  #:use-module (gnu packages curl)
   #:use-module (gnu packages databases)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages fontutils)
@@ -83,6 +84,7 @@
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages telephony)
   #:use-module (gnu packages tls)
+  #:use-module (gnu packages valgrind)
   #:use-module (gnu packages video)
   #:use-module (gnu packages vulkan)
   #:use-module (gnu packages xdisorg)
@@ -2036,15 +2038,191 @@ time Web content can be enhanced with native controls.")
     (inherit qtsvg)
     (name "qtwebengine")
     (version (package-version qtbase))
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://download.qt.io/official_releases/qt/"
-                                  (version-major+minor version) "/" version
-                                  "/submodules/" name "-everywhere-src-"
-                                  version ".tar.xz"))
-              (sha256
-               (base32
-                "08c60nh95m98mcqk444axs76xi6m9x0wvdxrzk9c2cxwqdbz59fa"))))
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://download.qt.io/official_releases/qt/"
+                           (version-major+minor version) "/" version
+                           "/submodules/" name "-everywhere-src-"
+                           version ".tar.xz"))
+       (sha256
+        (base32
+         "08c60nh95m98mcqk444axs76xi6m9x0wvdxrzk9c2cxwqdbz59fa"))
+       (modules '((ice-9 ftw)
+                  (ice-9 match)
+                  (srfi srfi-1)
+                  (srfi srfi-26)
+                  (guix build utils)))
+       (snippet
+        '(begin
+           (let ((preserved-third-party-files
+                  '("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"
+                    "base/third_party/xdg_mime"
+                    "base/third_party/xdg_user_dirs"
+                    "net/third_party/http2"
+                    "net/third_party/mozilla_security_manager"
+                    "net/third_party/nss"
+                    "net/third_party/spdy"
+                    "net/third_party/quic"
+                    "third_party/abseil-cpp"
+                    "third_party/angle"
+                    "third_party/angle/src/common/third_party/base"
+                    "third_party/angle/src/common/third_party/smhasher"
+                    "third_party/angle/src/third_party/compiler"
+                    "third_party/blink"
+                    "third_party/boringssl"
+                    "third_party/boringssl/src/third_party/fiat"
+                    "third_party/breakpad"
+                    "third_party/brotli"
+                    "third_party/ced"
+                    "third_party/crc32c"
+                    "third_party/ffmpeg"
+                    "third_party/googletest"
+                    "third_party/hunspell"
+                    "third_party/iccjpeg"
+                    "third_party/icu"
+                    "third_party/inspector_protocol"
+                    "third_party/jinja2"
+                    "third_party/jstemplate"
+                    "third_party/khronos"
+                    "third_party/leveldatabase"
+                    "third_party/libaddressinput"
+                    "third_party/libjingle_xmpp"
+                    "third_party/libpng"
+                    "third_party/libsrtp"
+                    "third_party/libsync"
+                    "third_party/libudev"
+                    "third_party/libvpx"
+                    "third_party/libwebm"
+                    "third_party/libwebp"
+                    "third_party/libxml"
+                    "third_party/libxslt"
+                    "third_party/libyuv"
+                    "third_party/lss"
+                    "third_party/markupsafe"
+                    "third_party/mesa"
+                    "third_party/metrics_proto"
+                    "third_party/modp_b64"
+                    "third_party/opus"
+                    "third_party/ots"
+                    "third_party/ply"
+                    "third_party/polymer"
+                    "third_party/protobuf"
+                    "third_party/pyjson5"
+                    "third_party/re2"
+                    "third_party/rnnoise"
+                    "third_party/skia"
+                    "third_party/skia/third_party/gif"
+                    "third_party/skia/third_party/skcms"
+                    "third_party/smhasher"
+                    "third_party/snappy"
+                    "third_party/sqlite"
+                    "third_party/usrsctp"
+                    "third_party/web-animations-js"
+                    "third_party/webrtc"
+                    "third_party/webrtc_overrides"
+                    "third_party/widevine/cdm/widevine_cdm_common.h"
+                    "third_party/widevine/cdm/widevine_cdm_version.h"
+                    "third_party/woff2"
+                    "third_party/yasm"
+                    "third_party/zlib"
+                    "url/third_party/mozilla"
+                    "v8/src/third_party/utf8-decoder"
+                    "v8/src/third_party/valgrind"
+                    "v8/third_party/antlr4"
+                    "v8/third_party/inspector_protocol"))
+                 (protected (make-regexp "\\.(gn|gyp)i?$")))
+             (define preserved-club
+               (map (lambda (member)
+                      (string-append "./" member))
+                    preserved-third-party-files))
+             (define (empty? dir)
+               (equal? (scandir dir) '("." "..")))
+             (define (third-party? file)
+               (if (string-contains file "third_party/")
+                   #t
+                   #f))
+             (define (useless? file)
+               (any (cute string-suffix? <> file)
+                    '(".zip" ".so" ".dll" ".exe" ".jar")))
+             (define (parents child)
+               ;; Return all parent directories of CHILD up to and including
+               ;; the closest "third_party".
+               (let* ((dirs (match (string-split child #\/)
+                              ((dirs ... last) dirs)))
+                      (closest (list-index (lambda (dir)
+                                             (string=? "third_party" dir))
+                                           (reverse dirs)))
+                      (delim (- (length dirs) closest)))
+                 (fold (lambda (dir prev)
+                         (cons (string-append (car prev) "/" dir)
+                               prev))
+                       (list (string-join (list-head dirs delim) "/"))
+                       (list-tail dirs delim))))
+             (define (remove-loudly file)
+                (format #t "deleting ~a...~%" file)
+                (force-output)
+                (delete-file file))
+             (define (delete-unwanted-files child stat flag base level)
+               (match flag
+                 ((or 'regular 'symlink 'stale-symlink)
+                  (when (third-party? child)
+                    (unless (or (member child preserved-club)
+                                (any (cute member <> preserved-club)
+                                     (parents child))
+                                (regexp-exec protected child))
+                      (remove-loudly child)))
+                  (when (and (useless? child) (file-exists? child))
+                    (remove-loudly child))
+                  #t)
+                 ('directory-processed
+                  (when (empty? child)
+                    (rmdir child))
+                  #t)
+                 (_ #t)))
+
+             (with-directory-excursion "src/3rdparty"
+               ;; TODO: Try removing "gn" too for future versions of qtwebengine.
+               (delete-file-recursively "ninja")
+
+               (with-directory-excursion "chromium"
+                 ;; Delete bundled software and binaries that were not explicitly
+                 ;; preserved above.
+                 (nftw "." delete-unwanted-files 'depth 'physical)
+
+                 ;; Assert that each preserved item is present to catch removals.
+                 (for-each (lambda (third-party)
+                             (unless (file-exists? third-party)
+                               (error (format #f "~s does not exist!" third-party))))
+                           preserved-club)
+
+                 ;; Use relative header locations instead of hard coded ones.
+                 (substitute*
+                     "base/third_party/dynamic_annotations/dynamic_annotations.c"
+                   (("base/third_party/valgrind") "valgrind"))
+                 (substitute*
+                     "third_party/breakpad/breakpad/src/common/linux/libcurl_wrapper.h"
+                   (("third_party/curl") "curl"))
+
+                 ;; Replace Google Analytics bundle with an empty file and hope
+                 ;; no one notices.
+                 (mkdir-p "third_party/analytics")
+                 (call-with-output-file
+                     "third_party/analytics/google-analytics-bundle.js"
+                   (lambda (port)
+                     (const #t)))))
+
+             ;; Do not build support for the Widevine DRM.
+             (substitute* "src/core/config/common.pri"
+               (("enable_widevine=true")
+                "enable_widevine=false"))
+             #t)))))
     (build-system gnu-build-system)
     (native-inputs
      `(("bison" ,bison)
@@ -2059,6 +2237,7 @@ time Web content can be enhanced with native controls.")
      `(("alsa-lib" ,alsa-lib)
        ("atk" ,atk)
        ("cups-minimal" ,cups-minimal)
+       ("curl" ,curl)
        ("dbus" ,dbus)
        ("ffmpeg" ,ffmpeg)
        ("fontconfig" ,fontconfig)
@@ -2102,6 +2281,7 @@ time Web content can be enhanced with native controls.")
        ("re2" ,re2)
        ("snappy" ,snappy)
        ("udev" ,eudev)
+       ("valgrind" ,valgrind)
        ("xcb-util" ,xcb-util)))
     (arguments
      (substitute-keyword-arguments (package-arguments qtsvg)
-- 
2.24.1


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 487 bytes --]

  parent reply	other threads:[~2020-01-06 19:24 UTC|newest]

Thread overview: 58+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-12-16 12:55 qtwenengine anybody? Hartmut Goebel
2019-12-16 13:42 ` Pierre Neidhardt
2019-12-16 14:13   ` mike.rosset
2019-12-16 14:15     ` Pierre Neidhardt
2019-12-16 15:19       ` mike.rosset
2019-12-16 15:22     ` Hartmut Goebel
2019-12-16 15:45       ` mike.rosset
2019-12-16 15:57         ` Hartmut Goebel
2019-12-16 17:09           ` mike.rosset
2019-12-16 17:29             ` Hartmut Goebel
2019-12-18 21:24               ` mike.rosset
2019-12-18 22:03                 ` Pierre Neidhardt
2019-12-18 22:30                   ` mike.rosset
2019-12-19 18:23                     ` Pierre Neidhardt
2019-12-19 19:47                       ` mike.rosset
2019-12-19 20:36                         ` Pierre Neidhardt
2019-12-20  0:16                           ` mike.rosset
2019-12-20 10:46                             ` Pierre Neidhardt
2019-12-20 10:53                               ` Pierre Neidhardt
2019-12-20 15:52                             ` [bug#35866] [PATCH 2/2] gnu: qtwebengine now uses pulseaudio Mike Rosset
2019-12-18 22:46                 ` qtwenengine anybody? Ricardo Wurmus
2019-12-20 10:49                 ` Pierre Neidhardt
2019-12-20 16:04                   ` mike.rosset
2019-12-20 16:16                     ` Pierre Neidhardt
2019-12-20 16:44                       ` mike.rosset
2019-12-31 13:48                         ` Pierre Neidhardt
2019-12-31 13:50                           ` Pierre Neidhardt
2020-01-01 17:34                             ` mike.rosset
2020-01-01 20:43                               ` Pierre Neidhardt
2020-01-01 22:30                                 ` mike.rosset
2020-01-02 12:29                                   ` Hartmut Goebel
2020-01-02 20:24                                     ` mike.rosset
2020-01-03 14:57                                       ` Hartmut Goebel
2020-01-05 16:10                                         ` mike.rosset
2020-01-05 16:47                                           ` Hartmut Goebel
2020-01-05 16:47                                             ` [bug#35866] " Hartmut Goebel
2020-01-01 22:46                                 ` Ricardo Wurmus
2020-01-02 10:52                                   ` Pierre Neidhardt
2020-01-05 14:59                                   ` mike.rosset
2020-01-05 19:52                                     ` Ricardo Wurmus
2020-01-06  5:11                                       ` mike.rosset
2020-01-06 19:23                                       ` Marius Bakke [this message]
2020-01-07  0:27                                         ` mike.rosset
2020-01-07 10:26                                           ` Hartmut Goebel
2020-01-07 19:28                                             ` mike.rosset
2020-01-11 17:39                                               ` Marius Bakke
2020-01-11 17:40                                                 ` Pierre Neidhardt
2020-01-11 18:19                                                   ` Mike Rosset
2020-01-11 18:28                                                     ` Pierre Neidhardt
2020-01-13 10:54                                                   ` Mike Rosset
2020-01-13 14:26                                                     ` Pierre Neidhardt
2020-01-13 18:37                                                       ` Mike Rosset
2020-01-11 18:14                                                 ` Mike Rosset
2020-01-07  8:09                                         ` Pierre Neidhardt
2020-01-07 19:14                                           ` mike.rosset
2020-01-07  8:12                                         ` Pierre Neidhardt
2020-01-07 22:49                                           ` Marius Bakke
2020-01-01 17:22                           ` mike.rosset

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87d0bw2xtj.fsf@devup.no \
    --to=mbakke@fastmail.com \
    --cc=guix-devel@gnu.org \
    --cc=guix-maintainers@gnu.org \
    --cc=mike.rosset@gmail.com \
    --cc=rekado@elephly.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.