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 --]
next prev 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.