* bug#26941: New font-build-system @ 2017-05-15 15:06 Arun Isaac 2017-05-16 20:17 ` Ludovic Courtès 2017-06-01 13:17 ` Brendan Tildesley 0 siblings, 2 replies; 34+ messages in thread From: Arun Isaac @ 2017-05-15 15:06 UTC (permalink / raw) To: 26941 [-- Attachment #1: Type: text/plain, Size: 458 bytes --] Here is a WIP patchset creating a 'font-build-system', and packaging a few font packages with it. I just copied the emacs-build-system and made necessary changes. Please review and provide feedback. Currently, the font-build-system only installs ttf and otf files to /share/fonts/truetype and /share/fonts/opentype respectively. It does not install any documentation. But, do we really need to install README files, a copy of the license, etc.? [-- Attachment #2: series.patch --] [-- Type: text/x-patch, Size: 19504 bytes --] From 3bf34a68e110d4821b40c43c6388c132d71cb443 Mon Sep 17 00:00:00 2001 From: Arun Isaac <arunisaac@systemreboot.net> Date: Mon, 15 May 2017 20:08:57 +0530 Subject: [PATCH 1/5] build: Add 'font-build-system'. * Makefile.am (MODULES): Add 'guix/build-system/font.scm' and 'guix/build/font-build-system.scm'. * guix/build-system/font.scm: New file. * guix/build/font-build-system.scm: New file. --- Makefile.am | 2 + guix/build-system/font.scm | 125 +++++++++++++++++++++++++++++++++++++++ guix/build/font-build-system.scm | 71 ++++++++++++++++++++++ 3 files changed, 198 insertions(+) create mode 100644 guix/build-system/font.scm create mode 100644 guix/build/font-build-system.scm diff --git a/Makefile.am b/Makefile.am index 5bfc9ca88..6545b7e92 100644 --- a/Makefile.am +++ b/Makefile.am @@ -75,6 +75,7 @@ MODULES = \ guix/build-system/cmake.scm \ guix/build-system/dub.scm \ guix/build-system/emacs.scm \ + guix/build-system/font.scm \ guix/build-system/asdf.scm \ guix/build-system/glib-or-gtk.scm \ guix/build-system/gnu.scm \ @@ -100,6 +101,7 @@ MODULES = \ guix/build/cmake-build-system.scm \ guix/build/dub-build-system.scm \ guix/build/emacs-build-system.scm \ + guix/build/font-build-system.scm \ guix/build/asdf-build-system.scm \ guix/build/git.scm \ guix/build/hg.scm \ diff --git a/guix/build-system/font.scm b/guix/build-system/font.scm new file mode 100644 index 000000000..34067236c --- /dev/null +++ b/guix/build-system/font.scm @@ -0,0 +1,125 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net> +;;; +;;; 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 <http://www.gnu.org/licenses/>. + +(define-module (guix build-system font) + #:use-module (guix utils) + #:use-module (guix packages) + #:use-module (guix derivations) + #:use-module (guix search-paths) + #:use-module (guix build-system) + #:use-module (guix build-system gnu) + #:use-module (ice-9 match) + #:export (%font-build-system-modules + font-build + font-build-system)) + +;; Commentary: +;; +;; Standard build procedure for fonts. This is implemented as an extension of +;; 'gnu-build-system'. +;; +;; Code: + +(define %font-build-system-modules + ;; Build-side modules imported by default. + `((guix build font-build-system) + ,@%gnu-build-system-modules)) + +(define* (lower name + #:key source inputs native-inputs outputs system target + #:allow-other-keys + #:rest arguments) + "Return a bag for NAME." + (define private-keywords + '(#:target #:inputs #:native-inputs)) + + (and (not target) ;XXX: no cross-compilation + (bag + (name name) + (system system) + (host-inputs `(,@(if source + `(("source" ,source)) + '()) + ,@inputs + + ;; Keep the standard inputs of 'gnu-build-system'. + ,@(standard-packages))) + (build-inputs native-inputs) + (outputs outputs) + (build font-build) + (arguments (strip-keyword-arguments private-keywords arguments))))) + +(define* (font-build store name inputs + #:key source + (tests? #t) + (test-target "test") + (configure-flags ''()) + (phases '(@ (guix build font-build-system) + %standard-phases)) + (outputs '("out")) + (search-paths '()) + (system (%current-system)) + (guile #f) + (imported-modules %font-build-system-modules) + (modules '((guix build font-build-system) + (guix build utils)))) + "Build SOURCE with INPUTS." + (define builder + `(begin + (use-modules ,@modules) + (font-build #:name ,name + #:source ,(match (assoc-ref inputs "source") + (((? derivation? source)) + (derivation->output-path source)) + ((source) + source) + (source + source)) + #:configure-flags ,configure-flags + #:system ,system + #:test-target ,test-target + #:tests? ,tests? + #:phases ,phases + #:outputs %outputs + #:search-paths ',(map search-path-specification->sexp + search-paths) + #:inputs %build-inputs))) + + (define guile-for-build + (match guile + ((? package?) + (package-derivation store guile system #:graft? #f)) + (#f ; the default + (let* ((distro (resolve-interface '(gnu packages commencement))) + (guile (module-ref distro 'guile-final))) + (package-derivation store guile system #:graft? #f))))) + + (build-expression->derivation store name builder + #:inputs inputs + #:system system + #:modules imported-modules + #:outputs outputs + #:guile-for-build guile-for-build)) + +(define font-build-system + (build-system + (name 'font) + (description "The build system for font packages") + (lower lower))) + +;;; font.scm ends here diff --git a/guix/build/font-build-system.scm b/guix/build/font-build-system.scm new file mode 100644 index 000000000..71f094fbe --- /dev/null +++ b/guix/build/font-build-system.scm @@ -0,0 +1,71 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net> +;;; +;;; 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 <http://www.gnu.org/licenses/>. + +(define-module (guix build font-build-system) + #:use-module ((guix build gnu-build-system) #:prefix gnu:) + #:use-module (guix build utils) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-26) + #:export (%standard-phases + font-build)) + +;; Commentary: +;; +;; Builder-side code of the build procedure for font packages. +;; +;; Code: + +(define gnu:unpack (assoc-ref gnu:%standard-phases 'unpack)) + +(define* (unpack #:key source #:allow-other-keys) + "Unpack SOURCE into the build directory. SOURCE may be a compressed +archive, or a font file." + (if (any (cut string-suffix? <> source) + (list ".ttf" ".otf")) + (begin + (mkdir "source") + (chdir "source") + (copy-file source (strip-store-file-name source)) + #t) + (gnu:unpack #:source source))) + +(define* (install #:key outputs #:allow-other-keys) + "Install the package contents." + (let* ((out (assoc-ref outputs "out")) + (src-dir (getcwd)) + (fonts-dir (string-append out "/share/fonts"))) + (for-each (cut install-file <> (string-append fonts-dir "/truetype/")) + (find-files src-dir "\\.ttf$")) + (for-each (cut install-file <> (string-append fonts-dir "/opentype")) + (find-files src-dir "\\.otf$")) + #t)) + +(define %standard-phases + (modify-phases gnu:%standard-phases + (replace 'unpack unpack) + (delete 'configure) + (delete 'check) + (delete 'build) + (replace 'install install))) + +(define* (font-build #:key inputs (phases %standard-phases) + #:allow-other-keys #:rest args) + "Build the given font package, applying all of PHASES in order." + (apply gnu:gnu-build #:inputs inputs #:phases phases args)) + +;;; font-build-system.scm ends here -- 2.12.2 From d5a745fddf7b6512e4b5c317c19dc8cd3f9a8efe Mon Sep 17 00:00:00 2001 From: Arun Isaac <arunisaac@systemreboot.net> Date: Mon, 15 May 2017 20:16:04 +0530 Subject: [PATCH 2/5] gnu: font-inconsolata: Use 'font-build-system'. * gnu/packages/fonts.scm (font-inconsolata): Switch to 'font-build-system'. --- gnu/packages/fonts.scm | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/gnu/packages/fonts.scm b/gnu/packages/fonts.scm index 03a1f6f79..8e938819e 100644 --- a/gnu/packages/fonts.scm +++ b/gnu/packages/fonts.scm @@ -42,6 +42,7 @@ #:use-module (guix packages) #:use-module (guix download) #:use-module (guix git-download) + #:use-module (guix build-system font) #:use-module (guix build-system gnu) #:use-module (guix build-system trivial) #:use-module (gnu packages base) @@ -64,18 +65,7 @@ (sha256 (base32 "06js6znbcf7swn8y3b8ki416bz96ay7d3yvddqnvi88lqhbfcq8m")))) - (build-system trivial-build-system) - (arguments - `(#:modules ((guix build utils)) - #:builder (begin - (use-modules (guix build utils)) - (let ((font-dir (string-append %output - "/share/fonts/opentype")) - (source (assoc-ref %build-inputs "source"))) - (mkdir-p font-dir) - (copy-file source - (string-append font-dir "/" "inconsolata.otf")))))) - (native-inputs `(("source" ,source))) + (build-system font-build-system) (home-page "http://levien.com/type/myfonts/inconsolata.html") (synopsis "Monospace font") (description "A monospace font, designed for code listings and the like, -- 2.12.2 From e0af4ce17f0e99f72926f93b5d5ed99df57cf06a Mon Sep 17 00:00:00 2001 From: Arun Isaac <arunisaac@systemreboot.net> Date: Mon, 15 May 2017 20:18:08 +0530 Subject: [PATCH 3/5] gnu: font-ubuntu: Use 'font-build-system'. * gnu/packages/fonts.scm (font-ubuntu): Switch to 'font-build-system'. --- gnu/packages/fonts.scm | 30 ++---------------------------- 1 file changed, 2 insertions(+), 28 deletions(-) diff --git a/gnu/packages/fonts.scm b/gnu/packages/fonts.scm index 8e938819e..44260229f 100644 --- a/gnu/packages/fonts.scm +++ b/gnu/packages/fonts.scm @@ -84,34 +84,8 @@ in print. With attention to detail for high resolution rendering.") (sha256 (base32 "0hjvq2x758dx0sfwqhzflns0ns035qm7h6ygskbx1svzg517sva5")))) - (build-system trivial-build-system) - (arguments - `(#:modules ((guix build utils)) - #:builder (begin - (use-modules (guix build utils) - (srfi srfi-26)) - - (let ((PATH (string-append (assoc-ref %build-inputs - "unzip") - "/bin")) - (font-dir (string-append %output - "/share/fonts/truetype")) - (doc-dir (string-append %output "/share/doc/" - ,name "-" ,version))) - (setenv "PATH" PATH) - (system* "unzip" (assoc-ref %build-inputs "source")) - - (mkdir-p font-dir) - (mkdir-p doc-dir) - (chdir (string-append "ubuntu-font-family-" ,version)) - (for-each (lambda (ttf) - (install-file ttf font-dir)) - (find-files "." "\\.ttf$")) - (for-each (lambda (doc) - (install-file doc doc-dir)) - (find-files "." "\\.txt$")))))) - (native-inputs `(("source" ,source) - ("unzip" ,unzip))) + (build-system font-build-system) + (native-inputs `(("unzip" ,unzip))) (home-page "http://font.ubuntu.com/") (synopsis "The Ubuntu Font Family") (description "The Ubuntu Font Family is a unique, custom designed font -- 2.12.2 From c557da3c5167de0cb5714c5f545b07ac8cd55dae Mon Sep 17 00:00:00 2001 From: Arun Isaac <arunisaac@systemreboot.net> Date: Mon, 15 May 2017 20:19:33 +0530 Subject: [PATCH 4/5] gnu: font-dejavu: Use 'font-build-system'. * gnu/packages/fonts.scm (font-dejavu): Switch to 'font-build-system'. --- gnu/packages/fonts.scm | 38 +------------------------------------- 1 file changed, 1 insertion(+), 37 deletions(-) diff --git a/gnu/packages/fonts.scm b/gnu/packages/fonts.scm index 44260229f..2fe009bec 100644 --- a/gnu/packages/fonts.scm +++ b/gnu/packages/fonts.scm @@ -108,43 +108,7 @@ TrueType (TTF) files.") (sha256 (base32 "1mqpds24wfs5cmfhj57fsfs07mji2z8812i5c4pi5pbi738s977s")))) - (build-system trivial-build-system) - (arguments - `(#:modules ((guix build utils)) - #:builder (begin - (use-modules (guix build utils)) - - (let ((tar (string-append (assoc-ref %build-inputs - "tar") - "/bin/tar")) - (PATH (string-append (assoc-ref %build-inputs - "bzip2") - "/bin")) - (font-dir (string-append - %output "/share/fonts/truetype")) - (conf-dir (string-append - %output "/share/fontconfig/conf.avail")) - (doc-dir (string-append - %output "/share/doc/" ,name "-" ,version))) - (setenv "PATH" PATH) - (system* tar "xvf" (assoc-ref %build-inputs "source")) - - (mkdir-p font-dir) - (mkdir-p conf-dir) - (mkdir-p doc-dir) - (chdir (string-append "dejavu-fonts-ttf-" ,version)) - (for-each (lambda (ttf) - (install-file ttf font-dir)) - (find-files "ttf" "\\.ttf$")) - (for-each (lambda (conf) - (install-file conf conf-dir)) - (find-files "fontconfig" "\\.conf$")) - (for-each (lambda (doc) - (install-file doc doc-dir)) - (find-files "." "\\.txt$|^[A-Z][A-Z]*$")))))) - (native-inputs `(("source" ,source) - ("tar" ,tar) - ("bzip2" ,bzip2))) + (build-system font-build-system) (home-page "http://dejavu-fonts.org/") (synopsis "Vera font family derivate with additional characters") (description "DejaVu provides an expanded version of the Vera font family -- 2.12.2 From f302764eb627726548a89438b8c3b6a8ff5988d4 Mon Sep 17 00:00:00 2001 From: Arun Isaac <arunisaac@systemreboot.net> Date: Mon, 15 May 2017 20:20:26 +0530 Subject: [PATCH 5/5] gnu: font-bitstream-vera: Use 'font-build-system'. * gnu/packages/fonts.scm (font-bitstream-vera): Switch to 'font-build-system'. --- gnu/packages/fonts.scm | 33 +-------------------------------- 1 file changed, 1 insertion(+), 32 deletions(-) diff --git a/gnu/packages/fonts.scm b/gnu/packages/fonts.scm index 2fe009bec..ef972b602 100644 --- a/gnu/packages/fonts.scm +++ b/gnu/packages/fonts.scm @@ -132,38 +132,7 @@ provide serif, sans and monospaced variants.") (sha256 (base32 "1p3qs51x5327gnk71yq8cvmxc6wgx79sqxfvxcv80cdvgggjfnyv")))) - (build-system trivial-build-system) - (arguments - `(#:modules ((guix build utils)) - #:builder (begin - (use-modules (guix build utils) - (srfi srfi-26)) - - (let ((tar (string-append (assoc-ref %build-inputs - "tar") - "/bin/tar")) - (PATH (string-append (assoc-ref %build-inputs - "bzip2") - "/bin")) - (font-dir (string-append %output - "/share/fonts/truetype")) - (doc-dir (string-append %output "/share/doc/" - ,name "-" ,version))) - (setenv "PATH" PATH) - (system* tar "xvf" (assoc-ref %build-inputs "source")) - - (mkdir-p font-dir) - (mkdir-p doc-dir) - (chdir (string-append "ttf-bitstream-vera-" ,version)) - (for-each (lambda (ttf) - (install-file ttf font-dir)) - (find-files "." "\\.ttf$")) - (for-each (lambda (doc) - (install-file doc doc-dir)) - (find-files "." "\\.TXT$")))))) - (native-inputs `(("source" ,source) - ("tar" ,tar) - ("bzip2" ,bzip2))) + (build-system font-build-system) (home-page "http://www.gnome.org/fonts/") (synopsis "Bitstream Vera sans-serif typeface") (description "Vera is a sans-serif typeface from Bitstream, Inc. This -- 2.12.2 ^ permalink raw reply related [flat|nested] 34+ messages in thread
* bug#26941: New font-build-system 2017-05-15 15:06 bug#26941: New font-build-system Arun Isaac @ 2017-05-16 20:17 ` Ludovic Courtès 2017-05-19 20:41 ` Arun Isaac [not found] ` <fcac084e.AEEAKxWCyNIAAAAAAAAAAAOzWv8AAAACwQwAAAAAAAW9WABZH1iD@mailjet.com> 2017-06-01 13:17 ` Brendan Tildesley 1 sibling, 2 replies; 34+ messages in thread From: Ludovic Courtès @ 2017-05-16 20:17 UTC (permalink / raw) To: Arun Isaac; +Cc: 26941 Hi Arun, Arun Isaac <arunisaac@systemreboot.net> skribis: > Here is a WIP patchset creating a 'font-build-system', and packaging a > few font packages with it. I just copied the emacs-build-system and made > necessary changes. Please review and provide feedback. That’s a great initiative! > Currently, the font-build-system only installs ttf and otf files to > /share/fonts/truetype and /share/fonts/opentype respectively. It does > not install any documentation. But, do we really need to install README > files, a copy of the license, etc.? It would be nice to install README, COPYING, and LICENSE if they exist. It’s okay to not do that as a first step though. > From 3bf34a68e110d4821b40c43c6388c132d71cb443 Mon Sep 17 00:00:00 2001 > From: Arun Isaac <arunisaac@systemreboot.net> > Date: Mon, 15 May 2017 20:08:57 +0530 > Subject: [PATCH 1/5] build: Add 'font-build-system'. Nitpick: the “build:” prefix in subject line is meant to refer to the configure/Makefile machinery of Guix itself. I would use build-system: Add 'font-build-system'. > * Makefile.am (MODULES): Add 'guix/build-system/font.scm' and > 'guix/build/font-build-system.scm'. > * guix/build-system/font.scm: New file. > * guix/build/font-build-system.scm: New file. [...] > +(define* (lower name > + #:key source inputs native-inputs outputs system target > + #:allow-other-keys > + #:rest arguments) > + "Return a bag for NAME." > + (define private-keywords > + '(#:target #:inputs #:native-inputs)) > + > + (and (not target) ;XXX: no cross-compilation > + (bag > + (name name) > + (system system) > + (host-inputs `(,@(if source > + `(("source" ,source)) > + '()) > + ,@inputs > + > + ;; Keep the standard inputs of 'gnu-build-system'. > + ,@(standard-packages))) > + (build-inputs native-inputs) > + (outputs outputs) > + (build font-build) > + (arguments (strip-keyword-arguments private-keywords arguments))))) I would remove (and (not target) …). After all, we know that the result is architecture-independent data, so we can build it natively regardless of whether TARGET is true. Also, (standard-packages) is way more than needed (it includes the whole toolchain, etc.; see build-system/gnu.scm). Here all we need is tar, gzip, bzip2, and xz. Could you updated it accordingly? > +(define* (install #:key outputs #:allow-other-keys) > + "Install the package contents." > + (let* ((out (assoc-ref outputs "out")) > + (src-dir (getcwd)) > + (fonts-dir (string-append out "/share/fonts"))) I’d avoid abbreviations in identifiers. So “source” or “source-directory”, etc. One last thing: could you add an entry for ‘font-build-system’ in guix.texi under “Build Systems”? Otherwise LGTM! > From d5a745fddf7b6512e4b5c317c19dc8cd3f9a8efe Mon Sep 17 00:00:00 2001 > From: Arun Isaac <arunisaac@systemreboot.net> > Date: Mon, 15 May 2017 20:16:04 +0530 > Subject: [PATCH 2/5] gnu: font-inconsolata: Use 'font-build-system'. > > * gnu/packages/fonts.scm (font-inconsolata): Switch to 'font-build-system'. [...] > From e0af4ce17f0e99f72926f93b5d5ed99df57cf06a Mon Sep 17 00:00:00 2001 > From: Arun Isaac <arunisaac@systemreboot.net> > Date: Mon, 15 May 2017 20:18:08 +0530 > Subject: [PATCH 3/5] gnu: font-ubuntu: Use 'font-build-system'. > > * gnu/packages/fonts.scm (font-ubuntu): Switch to 'font-build-system'. [...] > From c557da3c5167de0cb5714c5f545b07ac8cd55dae Mon Sep 17 00:00:00 2001 > From: Arun Isaac <arunisaac@systemreboot.net> > Date: Mon, 15 May 2017 20:19:33 +0530 > Subject: [PATCH 4/5] gnu: font-dejavu: Use 'font-build-system'. > > * gnu/packages/fonts.scm (font-dejavu): Switch to 'font-build-system'. [...] > From f302764eb627726548a89438b8c3b6a8ff5988d4 Mon Sep 17 00:00:00 2001 > From: Arun Isaac <arunisaac@systemreboot.net> > Date: Mon, 15 May 2017 20:20:26 +0530 > Subject: [PATCH 5/5] gnu: font-bitstream-vera: Use 'font-build-system'. > > * gnu/packages/fonts.scm (font-bitstream-vera): Switch to 'font-build-system'. > --- > gnu/packages/fonts.scm | 33 +-------------------------------- > 1 file changed, 1 insertion(+), 32 deletions(-) Really pleasant to see all these deletions. :-) Thank you! Ludo’. ^ permalink raw reply [flat|nested] 34+ messages in thread
* bug#26941: New font-build-system 2017-05-16 20:17 ` Ludovic Courtès @ 2017-05-19 20:41 ` Arun Isaac [not found] ` <fcac084e.AEEAKxWCyNIAAAAAAAAAAAOzWv8AAAACwQwAAAAAAAW9WABZH1iD@mailjet.com> 1 sibling, 0 replies; 34+ messages in thread From: Arun Isaac @ 2017-05-19 20:41 UTC (permalink / raw) To: Ludovic Courtès; +Cc: 26941 [-- Attachment #1: Type: text/plain, Size: 4485 bytes --] > It would be nice to install README, COPYING, and LICENSE if they exist. > It’s okay to not do that as a first step though. I don't see the utility in installing these files. But, if we're not doing them in this initial font-build-system, I suppose we can debate later. > Nitpick: the “build:” prefix in subject line is meant to refer to the > configure/Makefile machinery of Guix itself. I would use > > build-system: Add 'font-build-system'. Done! >> + (and (not target) ;XXX: no cross-compilation >> + (bag >> + (name name) >> + (system system) >> + (host-inputs `(,@(if source >> + `(("source" ,source)) >> + '()) >> + ,@inputs >> + >> + ;; Keep the standard inputs of 'gnu-build-system'. >> + ,@(standard-packages))) >> + (build-inputs native-inputs) >> + (outputs outputs) >> + (build font-build) >> + (arguments (strip-keyword-arguments private-keywords arguments))))) > > I would remove (and (not target) …). After all, we know that the result > is architecture-independent data, so we can build it natively regardless > of whether TARGET is true. Done! > Also, (standard-packages) is way more than needed (it includes the whole > toolchain, etc.; see build-system/gnu.scm). Here all we need is tar, > gzip, bzip2, and xz. I have attempted something for this. I'm not sure I did it the correct way. Do let me know. I actually have very little understanding of what's going on in guix/build-system/font.scm. I just copied guix/build-system/emacs.scm and modified it a little. Can I find documentation of `bag' fields somewhere in the manual? > Could you updated it accordingly? > >> +(define* (install #:key outputs #:allow-other-keys) >> + "Install the package contents." >> + (let* ((out (assoc-ref outputs "out")) >> + (src-dir (getcwd)) >> + (fonts-dir (string-append out "/share/fonts"))) > > I’d avoid abbreviations in identifiers. So “source” or > “source-directory”, etc. Done! A side issue: I feel that the `install-file' procedure should print out what it's doing to stdout (or some log port). Something like: (format #t "~a -> ~a~%" source destination) This would save us the trouble of implementing this log printing everywhere `install-file' is called. For example, this could be very useful in the 'install' phase of the font-build-sytem. WDYT? > One last thing: could you add an entry for ‘font-build-system’ in > guix.texi under “Build Systems”? I have added a short description. Is it too short? Should I elaborate? >> From d5a745fddf7b6512e4b5c317c19dc8cd3f9a8efe Mon Sep 17 00:00:00 2001 >> From: Arun Isaac <arunisaac@systemreboot.net> >> Date: Mon, 15 May 2017 20:16:04 +0530 >> Subject: [PATCH 2/5] gnu: font-inconsolata: Use 'font-build-system'. >> >> * gnu/packages/fonts.scm (font-inconsolata): Switch to 'font-build-system'. > > [...] > >> From e0af4ce17f0e99f72926f93b5d5ed99df57cf06a Mon Sep 17 00:00:00 2001 >> From: Arun Isaac <arunisaac@systemreboot.net> >> Date: Mon, 15 May 2017 20:18:08 +0530 >> Subject: [PATCH 3/5] gnu: font-ubuntu: Use 'font-build-system'. >> >> * gnu/packages/fonts.scm (font-ubuntu): Switch to 'font-build-system'. > > [...] > >> From c557da3c5167de0cb5714c5f545b07ac8cd55dae Mon Sep 17 00:00:00 2001 >> From: Arun Isaac <arunisaac@systemreboot.net> >> Date: Mon, 15 May 2017 20:19:33 +0530 >> Subject: [PATCH 4/5] gnu: font-dejavu: Use 'font-build-system'. >> >> * gnu/packages/fonts.scm (font-dejavu): Switch to 'font-build-system'. > > [...] > >> From f302764eb627726548a89438b8c3b6a8ff5988d4 Mon Sep 17 00:00:00 2001 >> From: Arun Isaac <arunisaac@systemreboot.net> >> Date: Mon, 15 May 2017 20:20:26 +0530 >> Subject: [PATCH 5/5] gnu: font-bitstream-vera: Use 'font-build-system'. >> >> * gnu/packages/fonts.scm (font-bitstream-vera): Switch to 'font-build-system'. >> --- >> gnu/packages/fonts.scm | 33 +-------------------------------- >> 1 file changed, 1 insertion(+), 32 deletions(-) > > Really pleasant to see all these deletions. :-) Many more sweet deletions will follow once the font-build-system is complete! :-) The patches migrating the font packages to the font-build-system are not properly complete. I'll send them in after more work. For now, please find attached the patch for the font-build-system alone. [-- Attachment #2: 0001-build-system-Add-font-build-system.patch --] [-- Type: text/x-patch, Size: 10152 bytes --] From 11cd5cf6188316bafd246e64d875e22423227e5e Mon Sep 17 00:00:00 2001 From: Arun Isaac <arunisaac@systemreboot.net> Date: Mon, 15 May 2017 20:08:57 +0530 Subject: [PATCH 1/5] build-system: Add 'font-build-system'. * Makefile.am (MODULES): Add 'guix/build-system/font.scm' and 'guix/build/font-build-system.scm'. * guix/build-system/font.scm: New file. * guix/build/font-build-system.scm: New file. --- Makefile.am | 2 + doc/guix.texi | 6 ++ guix/build-system/font.scm | 129 +++++++++++++++++++++++++++++++++++++++ guix/build/font-build-system.scm | 71 +++++++++++++++++++++ 4 files changed, 208 insertions(+) create mode 100644 guix/build-system/font.scm create mode 100644 guix/build/font-build-system.scm diff --git a/Makefile.am b/Makefile.am index 7c07d1b2b..bc60dd7a3 100644 --- a/Makefile.am +++ b/Makefile.am @@ -76,6 +76,7 @@ MODULES = \ guix/build-system/cmake.scm \ guix/build-system/dub.scm \ guix/build-system/emacs.scm \ + guix/build-system/font.scm \ guix/build-system/asdf.scm \ guix/build-system/glib-or-gtk.scm \ guix/build-system/gnu.scm \ @@ -101,6 +102,7 @@ MODULES = \ guix/build/cmake-build-system.scm \ guix/build/dub-build-system.scm \ guix/build/emacs-build-system.scm \ + guix/build/font-build-system.scm \ guix/build/asdf-build-system.scm \ guix/build/git.scm \ guix/build/hg.scm \ diff --git a/doc/guix.texi b/doc/guix.texi index b4a59e793..2a7acb201 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -3626,6 +3626,12 @@ package is installed in its own directory under @file{share/emacs/site-lisp/guix.d}. @end defvr +@defvr {Scheme Variable} font-build-system +This variable is exported by @code{(guix build-system font)}. It +implements an installation procedure for font packages. It copies font +files to standard locations in the output directory. +@end defvr + Lastly, for packages that do not need anything as sophisticated, a ``trivial'' build system is provided. It is trivial in the sense that it provides basically no support: it does not pull any implicit inputs, diff --git a/guix/build-system/font.scm b/guix/build-system/font.scm new file mode 100644 index 000000000..0d38dcbd6 --- /dev/null +++ b/guix/build-system/font.scm @@ -0,0 +1,129 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net> +;;; +;;; 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 <http://www.gnu.org/licenses/>. + +(define-module (guix build-system font) + #:use-module (guix utils) + #:use-module (guix packages) + #:use-module (guix derivations) + #:use-module (guix search-paths) + #:use-module (guix build-system) + #:use-module (guix build-system gnu) + #:use-module (ice-9 match) + #:export (%font-build-system-modules + font-build + font-build-system)) + +;; Commentary: +;; +;; Standard build procedure for fonts. This is implemented as an extension of +;; 'gnu-build-system'. +;; +;; Code: + +(define %font-build-system-modules + ;; Build-side modules imported by default. + `((guix build font-build-system) + ,@%gnu-build-system-modules)) + +(define* (lower name + #:key source inputs native-inputs outputs system target + #:allow-other-keys + #:rest arguments) + "Return a bag for NAME." + (define private-keywords + '(#:target #:inputs #:native-inputs)) + + (bag + (name name) + (system system) + (host-inputs `(,@(if source + `(("source" ,source)) + '()) + ,@inputs + ,@(let ((compression (resolve-module '(gnu packages compression)))) + (map (match-lambda + ((name package) + (list name (module-ref compression package)))) + `(("tar" tar) + ("gzip" gzip) + ("bzip2" bzip2) + ("xz" xz)))))) + (build-inputs native-inputs) + (outputs outputs) + (build font-build) + (arguments (strip-keyword-arguments private-keywords arguments)))) + +(define* (font-build store name inputs + #:key source + (tests? #t) + (test-target "test") + (configure-flags ''()) + (phases '(@ (guix build font-build-system) + %standard-phases)) + (outputs '("out")) + (search-paths '()) + (system (%current-system)) + (guile #f) + (imported-modules %font-build-system-modules) + (modules '((guix build font-build-system) + (guix build utils)))) + "Build SOURCE with INPUTS." + (define builder + `(begin + (use-modules ,@modules) + (font-build #:name ,name + #:source ,(match (assoc-ref inputs "source") + (((? derivation? source)) + (derivation->output-path source)) + ((source) + source) + (source + source)) + #:configure-flags ,configure-flags + #:system ,system + #:test-target ,test-target + #:tests? ,tests? + #:phases ,phases + #:outputs %outputs + #:search-paths ',(map search-path-specification->sexp + search-paths) + #:inputs %build-inputs))) + + (define guile-for-build + (match guile + ((? package?) + (package-derivation store guile system #:graft? #f)) + (#f ; the default + (let* ((distro (resolve-interface '(gnu packages commencement))) + (guile (module-ref distro 'guile-final))) + (package-derivation store guile system #:graft? #f))))) + + (build-expression->derivation store name builder + #:inputs inputs + #:system system + #:modules imported-modules + #:outputs outputs + #:guile-for-build guile-for-build)) + +(define font-build-system + (build-system + (name 'font) + (description "The build system for font packages") + (lower lower))) + +;;; font.scm ends here diff --git a/guix/build/font-build-system.scm b/guix/build/font-build-system.scm new file mode 100644 index 000000000..77e180419 --- /dev/null +++ b/guix/build/font-build-system.scm @@ -0,0 +1,71 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net> +;;; +;;; 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 <http://www.gnu.org/licenses/>. + +(define-module (guix build font-build-system) + #:use-module ((guix build gnu-build-system) #:prefix gnu:) + #:use-module (guix build utils) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-26) + #:export (%standard-phases + font-build)) + +;; Commentary: +;; +;; Builder-side code of the build procedure for font packages. +;; +;; Code: + +(define gnu:unpack (assoc-ref gnu:%standard-phases 'unpack)) + +(define* (unpack #:key source #:allow-other-keys) + "Unpack SOURCE into the build directory. SOURCE may be a compressed +archive, or a font file." + (if (any (cut string-suffix? <> source) + (list ".ttf" ".otf")) + (begin + (mkdir "source") + (chdir "source") + (copy-file source (strip-store-file-name source)) + #t) + (gnu:unpack #:source source))) + +(define* (install #:key outputs #:allow-other-keys) + "Install the package contents." + (let* ((out (assoc-ref outputs "out")) + (source (getcwd)) + (fonts (string-append out "/share/fonts"))) + (for-each (cut install-file <> (string-append fonts "/truetype/")) + (find-files source "\\.ttf$")) + (for-each (cut install-file <> (string-append fonts "/opentype")) + (find-files source "\\.otf$")) + #t)) + +(define %standard-phases + (modify-phases gnu:%standard-phases + (replace 'unpack unpack) + (delete 'configure) + (delete 'check) + (delete 'build) + (replace 'install install))) + +(define* (font-build #:key inputs (phases %standard-phases) + #:allow-other-keys #:rest args) + "Build the given font package, applying all of PHASES in order." + (apply gnu:gnu-build #:inputs inputs #:phases phases args)) + +;;; font-build-system.scm ends here -- 2.12.2 ^ permalink raw reply related [flat|nested] 34+ messages in thread
[parent not found: <fcac084e.AEEAKxWCyNIAAAAAAAAAAAOzWv8AAAACwQwAAAAAAAW9WABZH1iD@mailjet.com>]
* bug#26941: New font-build-system [not found] ` <fcac084e.AEEAKxWCyNIAAAAAAAAAAAOzWv8AAAACwQwAAAAAAAW9WABZH1iD@mailjet.com> @ 2017-05-23 11:33 ` Ludovic Courtès 2017-05-27 18:37 ` Arun Isaac [not found] ` <9591bf82.AEUAKjfDcSkAAAAAAAAAAAOzWv8AAAACwQwAAAAAAAW9WABZKceD@mailjet.com> 0 siblings, 2 replies; 34+ messages in thread From: Ludovic Courtès @ 2017-05-23 11:33 UTC (permalink / raw) To: Arun Isaac; +Cc: 26941 Arun Isaac <arunisaac@systemreboot.net> skribis: >> It would be nice to install README, COPYING, and LICENSE if they exist. >> It’s okay to not do that as a first step though. > > I don't see the utility in installing these files. But, if we're not > doing them in this initial font-build-system, I suppose we can debate > later. Yeah no big deal, let’s leave it for later. >> Also, (standard-packages) is way more than needed (it includes the whole >> toolchain, etc.; see build-system/gnu.scm). Here all we need is tar, >> gzip, bzip2, and xz. > > I have attempted something for this. I'm not sure I did it the correct > way. Do let me know. > > I actually have very little understanding of what's going on in > guix/build-system/font.scm. I just copied guix/build-system/emacs.scm > and modified it a little. Can I find documentation of `bag' fields > somewhere in the manual? The only “documentation” of bags is in (guix build-systems) I’m afraid. In a nutshell, bags are an intermediate representation between packages, which are abstract and have implicit build inputs for instance, and derivations, which are very low-level and far away from the concept of a package. >> Could you updated it accordingly? >> >>> +(define* (install #:key outputs #:allow-other-keys) >>> + "Install the package contents." >>> + (let* ((out (assoc-ref outputs "out")) >>> + (src-dir (getcwd)) >>> + (fonts-dir (string-append out "/share/fonts"))) >> >> I’d avoid abbreviations in identifiers. So “source” or >> “source-directory”, etc. > > Done! > > A side issue: I feel that the `install-file' procedure should print out > what it's doing to stdout (or some log port). Something like: > > (format #t "~a -> ~a~%" source destination) > > This would save us the trouble of implementing this log printing > everywhere `install-file' is called. For example, this could be very > useful in the 'install' phase of the font-build-sytem. WDYT? Do we really need to print something in the first place? :-) Some procedures in (guix build utils) do that, indeed, but I’m not sure it’s useful for something as simple as ‘install-file’. Thoughts? > The patches migrating the font packages to the font-build-system are not > properly complete. I'll send them in after more work. For now, please > find attached the patch for the font-build-system alone. OK! > From 11cd5cf6188316bafd246e64d875e22423227e5e Mon Sep 17 00:00:00 2001 > From: Arun Isaac <arunisaac@systemreboot.net> > Date: Mon, 15 May 2017 20:08:57 +0530 > Subject: [PATCH 1/5] build-system: Add 'font-build-system'. > > * Makefile.am (MODULES): Add 'guix/build-system/font.scm' and > 'guix/build/font-build-system.scm'. > * guix/build-system/font.scm: New file. > * guix/build/font-build-system.scm: New file. Please mention guix.texi as well. > +@defvr {Scheme Variable} font-build-system > +This variable is exported by @code{(guix build-system font)}. It > +implements an installation procedure for font packages. It copies font ^ I’d write: … for font packages where upstream provides pre-compiled TrueType, OpenType, etc. font files that merely need to be copied into place This is to distinguish from fonts that we build from a FontForge (whatever it’s called today) source. > + ,@(let ((compression (resolve-module '(gnu packages compression)))) > + (map (match-lambda > + ((name package) > + (list name (module-ref compression package)))) > + `(("tar" tar) > + ("gzip" gzip) > + ("bzip2" bzip2) > + ("xz" xz)))))) This works, but since ‘tar’ is defined in (gnu packages base), it’s better to take it from there. Also, prefer ‘resolve-interface’ over ‘resolve-module’: the former provides access to public/exported bindings only, whereas the latter provides access to both public and private bindings. OK with these changes! > +(define* (unpack #:key source #:allow-other-keys) > + "Unpack SOURCE into the build directory. SOURCE may be a compressed > +archive, or a font file." > + (if (any (cut string-suffix? <> source) > + (list ".ttf" ".otf")) > + (begin > + (mkdir "source") > + (chdir "source") > + (copy-file source (strip-store-file-name source)) > + #t) > + (gnu:unpack #:source source))) > + > +(define* (install #:key outputs #:allow-other-keys) > + "Install the package contents." > + (let* ((out (assoc-ref outputs "out")) > + (source (getcwd)) > + (fonts (string-append out "/share/fonts"))) > + (for-each (cut install-file <> (string-append fonts "/truetype/")) > + (find-files source "\\.ttf$")) > + (for-each (cut install-file <> (string-append fonts "/opentype")) > + (find-files source "\\.otf$")) > + #t)) Do some of the candidate packages provide Type1 fonts? If not, this is perfect; if we do, then in a future patch we can extend it to support Type1 as well. Thank you! Ludo’. ^ permalink raw reply [flat|nested] 34+ messages in thread
* bug#26941: New font-build-system 2017-05-23 11:33 ` Ludovic Courtès @ 2017-05-27 18:37 ` Arun Isaac 2017-05-28 18:44 ` User-Friendlyness of Guix and non-scaryness, printing messages Danny Milosavljevic [not found] ` <9591bf82.AEUAKjfDcSkAAAAAAAAAAAOzWv8AAAACwQwAAAAAAAW9WABZKceD@mailjet.com> 1 sibling, 1 reply; 34+ messages in thread From: Arun Isaac @ 2017-05-27 18:37 UTC (permalink / raw) To: Ludovic Courtès; +Cc: 26941 [-- Attachment #1: Type: text/plain, Size: 3270 bytes --] >> A side issue: I feel that the `install-file' procedure should print out >> what it's doing to stdout (or some log port). Something like: >> >> (format #t "~a -> ~a~%" source destination) >> >> This would save us the trouble of implementing this log printing >> everywhere `install-file' is called. For example, this could be very >> useful in the 'install' phase of the font-build-sytem. WDYT? > > Do we really need to print something in the first place? :-) Some > procedures in (guix build utils) do that, indeed, but I’m not sure it’s > useful for something as simple as ‘install-file’. Thoughts? Yes, I think it is really important. Without the verbose output, one will have to stare at a blank screen, guessing at what is happening. Long verbose output feels reassuring that something is going on. :-) Also, verbose output for `install-file' might help in debugging correct source/destination paths. >> The patches migrating the font packages to the font-build-system are not >> properly complete. I'll send them in after more work. For now, please >> find attached the patch for the font-build-system alone. The four font packages (inconsolata, dejavu, ubuntu and bitstream-vera) are also ready. >> * Makefile.am (MODULES): Add 'guix/build-system/font.scm' and >> 'guix/build/font-build-system.scm'. >> * guix/build-system/font.scm: New file. >> * guix/build/font-build-system.scm: New file. > > Please mention guix.texi as well. Done! >> +@defvr {Scheme Variable} font-build-system >> +This variable is exported by @code{(guix build-system font)}. It >> +implements an installation procedure for font packages. It copies font > ^ > I’d write: > > … for font packages where upstream provides pre-compiled TrueType, > OpenType, etc. font files that merely need to be copied into place > > This is to distinguish from fonts that we build from a FontForge > (whatever it’s called today) source. Done! >> + ,@(let ((compression (resolve-module '(gnu packages compression)))) >> + (map (match-lambda >> + ((name package) >> + (list name (module-ref compression package)))) >> + `(("tar" tar) >> + ("gzip" gzip) >> + ("bzip2" bzip2) >> + ("xz" xz)))))) > > This works, but since ‘tar’ is defined in (gnu packages base), it’s > better to take it from there. Done! I have also included "unzip" because several font packages come as zip archives. WDYT? > Also, prefer ‘resolve-interface’ over ‘resolve-module’: the former > provides access to public/exported bindings only, whereas the latter > provides access to both public and private bindings. Done! > Do some of the candidate packages provide Type1 fonts? If not, this is > perfect; if we do, then in a future patch we can extend it to support > Type1 as well. I haven't come across Type1 fonts yet. After pushing these patches (after I hear your thoughts on "unzip"), I'll start migrating the other font packages. When I come across Type1 fonts, I'll extend the font-build-system as well. [-- Attachment #2: series.patch --] [-- Type: text/x-patch, Size: 20589 bytes --] From a0bda2fc48c6d2c7809805251154c49e8be76d67 Mon Sep 17 00:00:00 2001 From: Arun Isaac <arunisaac@systemreboot.net> Date: Mon, 15 May 2017 20:08:57 +0530 Subject: [PATCH 1/5] build-system: Add 'font-build-system'. * Makefile.am (MODULES): Add 'guix/build-system/font.scm' and 'guix/build/font-build-system.scm'. * guix/build-system/font.scm: New file. * guix/build/font-build-system.scm: New file. * doc/guix.texi (Build Systems): Add 'font-build-system'. --- Makefile.am | 2 + doc/guix.texi | 8 +++ guix/build-system/font.scm | 130 +++++++++++++++++++++++++++++++++++++++ guix/build/font-build-system.scm | 71 +++++++++++++++++++++ 4 files changed, 211 insertions(+) create mode 100644 guix/build-system/font.scm create mode 100644 guix/build/font-build-system.scm diff --git a/Makefile.am b/Makefile.am index c2fc2642a..3925f3e2d 100644 --- a/Makefile.am +++ b/Makefile.am @@ -76,6 +76,7 @@ MODULES = \ guix/build-system/cmake.scm \ guix/build-system/dub.scm \ guix/build-system/emacs.scm \ + guix/build-system/font.scm \ guix/build-system/asdf.scm \ guix/build-system/glib-or-gtk.scm \ guix/build-system/gnu.scm \ @@ -101,6 +102,7 @@ MODULES = \ guix/build/cmake-build-system.scm \ guix/build/dub-build-system.scm \ guix/build/emacs-build-system.scm \ + guix/build/font-build-system.scm \ guix/build/asdf-build-system.scm \ guix/build/git.scm \ guix/build/hg.scm \ diff --git a/doc/guix.texi b/doc/guix.texi index 0d389261a..7cbfdecba 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -3627,6 +3627,14 @@ package is installed in its own directory under @file{share/emacs/site-lisp/guix.d}. @end defvr +@defvr {Scheme Variable} font-build-system +This variable is exported by @code{(guix build-system font)}. It +implements an installation procedure for font packages where upstream +provides pre-compiled TrueType, OpenType, etc. font files that merely +need to be copied into place. It copies font files to standard +locations in the output directory. +@end defvr + Lastly, for packages that do not need anything as sophisticated, a ``trivial'' build system is provided. It is trivial in the sense that it provides basically no support: it does not pull any implicit inputs, diff --git a/guix/build-system/font.scm b/guix/build-system/font.scm new file mode 100644 index 000000000..f448c302c --- /dev/null +++ b/guix/build-system/font.scm @@ -0,0 +1,130 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net> +;;; +;;; 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 <http://www.gnu.org/licenses/>. + +(define-module (guix build-system font) + #:use-module (guix utils) + #:use-module (guix packages) + #:use-module (guix derivations) + #:use-module (guix search-paths) + #:use-module (guix build-system) + #:use-module (guix build-system gnu) + #:use-module (ice-9 match) + #:export (%font-build-system-modules + font-build + font-build-system)) + +;; Commentary: +;; +;; Standard build procedure for fonts. This is implemented as an extension of +;; 'gnu-build-system'. +;; +;; Code: + +(define %font-build-system-modules + ;; Build-side modules imported by default. + `((guix build font-build-system) + ,@%gnu-build-system-modules)) + +(define* (lower name + #:key source inputs native-inputs outputs system target + #:allow-other-keys + #:rest arguments) + "Return a bag for NAME." + (define private-keywords + '(#:target #:inputs #:native-inputs)) + + (bag + (name name) + (system system) + (host-inputs `(,@(if source + `(("source" ,source)) + '()) + ,@inputs + ,(list "tar" (module-ref (resolve-interface '(gnu packages base)) 'tar)) + ,(list "unzip" (module-ref (resolve-interface '(gnu packages zip)) 'unzip)) + ,@(let ((compression (resolve-interface '(gnu packages compression)))) + (map (match-lambda + ((name package) + (list name (module-ref compression package)))) + `(("gzip" gzip) + ("bzip2" bzip2) + ("xz" xz)))))) + (build-inputs native-inputs) + (outputs outputs) + (build font-build) + (arguments (strip-keyword-arguments private-keywords arguments)))) + +(define* (font-build store name inputs + #:key source + (tests? #t) + (test-target "test") + (configure-flags ''()) + (phases '(@ (guix build font-build-system) + %standard-phases)) + (outputs '("out")) + (search-paths '()) + (system (%current-system)) + (guile #f) + (imported-modules %font-build-system-modules) + (modules '((guix build font-build-system) + (guix build utils)))) + "Build SOURCE with INPUTS." + (define builder + `(begin + (use-modules ,@modules) + (font-build #:name ,name + #:source ,(match (assoc-ref inputs "source") + (((? derivation? source)) + (derivation->output-path source)) + ((source) + source) + (source + source)) + #:configure-flags ,configure-flags + #:system ,system + #:test-target ,test-target + #:tests? ,tests? + #:phases ,phases + #:outputs %outputs + #:search-paths ',(map search-path-specification->sexp + search-paths) + #:inputs %build-inputs))) + + (define guile-for-build + (match guile + ((? package?) + (package-derivation store guile system #:graft? #f)) + (#f ; the default + (let* ((distro (resolve-interface '(gnu packages commencement))) + (guile (module-ref distro 'guile-final))) + (package-derivation store guile system #:graft? #f))))) + + (build-expression->derivation store name builder + #:inputs inputs + #:system system + #:modules imported-modules + #:outputs outputs + #:guile-for-build guile-for-build)) + +(define font-build-system + (build-system + (name 'font) + (description "The build system for font packages") + (lower lower))) + +;;; font.scm ends here diff --git a/guix/build/font-build-system.scm b/guix/build/font-build-system.scm new file mode 100644 index 000000000..cca1e93f0 --- /dev/null +++ b/guix/build/font-build-system.scm @@ -0,0 +1,71 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net> +;;; +;;; 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 <http://www.gnu.org/licenses/>. + +(define-module (guix build font-build-system) + #:use-module ((guix build gnu-build-system) #:prefix gnu:) + #:use-module (guix build utils) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-26) + #:export (%standard-phases + font-build)) + +;; Commentary: +;; +;; Builder-side code of the build procedure for font packages. +;; +;; Code: + +(define gnu:unpack (assoc-ref gnu:%standard-phases 'unpack)) + +(define* (unpack #:key source #:allow-other-keys) + "Unpack SOURCE into the build directory. SOURCE may be a compressed +archive, or a font file." + (if (any (cut string-suffix? <> source) + (list ".ttf" ".otf")) + (begin + (mkdir "source") + (chdir "source") + (copy-file source (strip-store-file-name source)) + #t) + (gnu:unpack #:source source))) + +(define* (install #:key outputs #:allow-other-keys) + "Install the package contents." + (let* ((out (assoc-ref outputs "out")) + (source (getcwd)) + (fonts (string-append out "/share/fonts"))) + (for-each (cut install-file <> (string-append fonts "/truetype")) + (find-files source "\\.ttf$")) + (for-each (cut install-file <> (string-append fonts "/opentype")) + (find-files source "\\.otf$")) + #t)) + +(define %standard-phases + (modify-phases gnu:%standard-phases + (replace 'unpack unpack) + (delete 'configure) + (delete 'check) + (delete 'build) + (replace 'install install))) + +(define* (font-build #:key inputs (phases %standard-phases) + #:allow-other-keys #:rest args) + "Build the given font package, applying all of PHASES in order." + (apply gnu:gnu-build #:inputs inputs #:phases phases args)) + +;;; font-build-system.scm ends here -- 2.12.2 From 0e2f27328064e9d2fdf3e6d618f2433d70fca2c8 Mon Sep 17 00:00:00 2001 From: Arun Isaac <arunisaac@systemreboot.net> Date: Mon, 15 May 2017 20:16:04 +0530 Subject: [PATCH 2/5] gnu: font-inconsolata: Use 'font-build-system'. * gnu/packages/fonts.scm (font-inconsolata): Switch to 'font-build-system'. --- gnu/packages/fonts.scm | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/gnu/packages/fonts.scm b/gnu/packages/fonts.scm index 03a1f6f79..8e938819e 100644 --- a/gnu/packages/fonts.scm +++ b/gnu/packages/fonts.scm @@ -42,6 +42,7 @@ #:use-module (guix packages) #:use-module (guix download) #:use-module (guix git-download) + #:use-module (guix build-system font) #:use-module (guix build-system gnu) #:use-module (guix build-system trivial) #:use-module (gnu packages base) @@ -64,18 +65,7 @@ (sha256 (base32 "06js6znbcf7swn8y3b8ki416bz96ay7d3yvddqnvi88lqhbfcq8m")))) - (build-system trivial-build-system) - (arguments - `(#:modules ((guix build utils)) - #:builder (begin - (use-modules (guix build utils)) - (let ((font-dir (string-append %output - "/share/fonts/opentype")) - (source (assoc-ref %build-inputs "source"))) - (mkdir-p font-dir) - (copy-file source - (string-append font-dir "/" "inconsolata.otf")))))) - (native-inputs `(("source" ,source))) + (build-system font-build-system) (home-page "http://levien.com/type/myfonts/inconsolata.html") (synopsis "Monospace font") (description "A monospace font, designed for code listings and the like, -- 2.12.2 From a9e020690af63b06efee2fc16ddcf5e89a08fa50 Mon Sep 17 00:00:00 2001 From: Arun Isaac <arunisaac@systemreboot.net> Date: Mon, 15 May 2017 20:18:08 +0530 Subject: [PATCH 3/5] gnu: font-ubuntu: Use 'font-build-system'. * gnu/packages/fonts.scm (font-ubuntu): Switch to 'font-build-system'. --- gnu/packages/fonts.scm | 29 +---------------------------- 1 file changed, 1 insertion(+), 28 deletions(-) diff --git a/gnu/packages/fonts.scm b/gnu/packages/fonts.scm index 8e938819e..cf9855496 100644 --- a/gnu/packages/fonts.scm +++ b/gnu/packages/fonts.scm @@ -84,34 +84,7 @@ in print. With attention to detail for high resolution rendering.") (sha256 (base32 "0hjvq2x758dx0sfwqhzflns0ns035qm7h6ygskbx1svzg517sva5")))) - (build-system trivial-build-system) - (arguments - `(#:modules ((guix build utils)) - #:builder (begin - (use-modules (guix build utils) - (srfi srfi-26)) - - (let ((PATH (string-append (assoc-ref %build-inputs - "unzip") - "/bin")) - (font-dir (string-append %output - "/share/fonts/truetype")) - (doc-dir (string-append %output "/share/doc/" - ,name "-" ,version))) - (setenv "PATH" PATH) - (system* "unzip" (assoc-ref %build-inputs "source")) - - (mkdir-p font-dir) - (mkdir-p doc-dir) - (chdir (string-append "ubuntu-font-family-" ,version)) - (for-each (lambda (ttf) - (install-file ttf font-dir)) - (find-files "." "\\.ttf$")) - (for-each (lambda (doc) - (install-file doc doc-dir)) - (find-files "." "\\.txt$")))))) - (native-inputs `(("source" ,source) - ("unzip" ,unzip))) + (build-system font-build-system) (home-page "http://font.ubuntu.com/") (synopsis "The Ubuntu Font Family") (description "The Ubuntu Font Family is a unique, custom designed font -- 2.12.2 From 55a7d8a1aa2ea5c4d6a5a121db28f14162f5ea75 Mon Sep 17 00:00:00 2001 From: Arun Isaac <arunisaac@systemreboot.net> Date: Mon, 15 May 2017 20:19:33 +0530 Subject: [PATCH 4/5] gnu: font-dejavu: Use 'font-build-system'. * gnu/packages/fonts.scm (font-dejavu): Switch to 'font-build-system'. --- gnu/packages/fonts.scm | 43 ++++++++----------------------------------- 1 file changed, 8 insertions(+), 35 deletions(-) diff --git a/gnu/packages/fonts.scm b/gnu/packages/fonts.scm index cf9855496..fcc31deeb 100644 --- a/gnu/packages/fonts.scm +++ b/gnu/packages/fonts.scm @@ -108,42 +108,15 @@ TrueType (TTF) files.") (base32 "1mqpds24wfs5cmfhj57fsfs07mji2z8812i5c4pi5pbi738s977s")))) (build-system trivial-build-system) + (build-system font-build-system) (arguments - `(#:modules ((guix build utils)) - #:builder (begin - (use-modules (guix build utils)) - - (let ((tar (string-append (assoc-ref %build-inputs - "tar") - "/bin/tar")) - (PATH (string-append (assoc-ref %build-inputs - "bzip2") - "/bin")) - (font-dir (string-append - %output "/share/fonts/truetype")) - (conf-dir (string-append - %output "/share/fontconfig/conf.avail")) - (doc-dir (string-append - %output "/share/doc/" ,name "-" ,version))) - (setenv "PATH" PATH) - (system* tar "xvf" (assoc-ref %build-inputs "source")) - - (mkdir-p font-dir) - (mkdir-p conf-dir) - (mkdir-p doc-dir) - (chdir (string-append "dejavu-fonts-ttf-" ,version)) - (for-each (lambda (ttf) - (install-file ttf font-dir)) - (find-files "ttf" "\\.ttf$")) - (for-each (lambda (conf) - (install-file conf conf-dir)) - (find-files "fontconfig" "\\.conf$")) - (for-each (lambda (doc) - (install-file doc doc-dir)) - (find-files "." "\\.txt$|^[A-Z][A-Z]*$")))))) - (native-inputs `(("source" ,source) - ("tar" ,tar) - ("bzip2" ,bzip2))) + `(#:phases + (modify-phases %standard-phases + (add-after 'install 'install-conf + (lambda* (#:key outputs #:allow-other-keys) + (let ((conf-dir (string-append (assoc-ref outputs "out") + "/share/fontconfig/conf.avail"))) + (copy-recursively "fontconfig" conf-dir))))))) (home-page "http://dejavu-fonts.org/") (synopsis "Vera font family derivate with additional characters") (description "DejaVu provides an expanded version of the Vera font family -- 2.12.2 From c7fc2b4c75b96e476d85806ef975b92fdbbad582 Mon Sep 17 00:00:00 2001 From: Arun Isaac <arunisaac@systemreboot.net> Date: Mon, 15 May 2017 20:20:26 +0530 Subject: [PATCH 5/5] gnu: font-bitstream-vera: Use 'font-build-system'. * gnu/packages/fonts.scm (font-bitstream-vera): Switch to 'font-build-system'. --- gnu/packages/fonts.scm | 33 +-------------------------------- 1 file changed, 1 insertion(+), 32 deletions(-) diff --git a/gnu/packages/fonts.scm b/gnu/packages/fonts.scm index fcc31deeb..954c58818 100644 --- a/gnu/packages/fonts.scm +++ b/gnu/packages/fonts.scm @@ -140,38 +140,7 @@ provide serif, sans and monospaced variants.") (sha256 (base32 "1p3qs51x5327gnk71yq8cvmxc6wgx79sqxfvxcv80cdvgggjfnyv")))) - (build-system trivial-build-system) - (arguments - `(#:modules ((guix build utils)) - #:builder (begin - (use-modules (guix build utils) - (srfi srfi-26)) - - (let ((tar (string-append (assoc-ref %build-inputs - "tar") - "/bin/tar")) - (PATH (string-append (assoc-ref %build-inputs - "bzip2") - "/bin")) - (font-dir (string-append %output - "/share/fonts/truetype")) - (doc-dir (string-append %output "/share/doc/" - ,name "-" ,version))) - (setenv "PATH" PATH) - (system* tar "xvf" (assoc-ref %build-inputs "source")) - - (mkdir-p font-dir) - (mkdir-p doc-dir) - (chdir (string-append "ttf-bitstream-vera-" ,version)) - (for-each (lambda (ttf) - (install-file ttf font-dir)) - (find-files "." "\\.ttf$")) - (for-each (lambda (doc) - (install-file doc doc-dir)) - (find-files "." "\\.TXT$")))))) - (native-inputs `(("source" ,source) - ("tar" ,tar) - ("bzip2" ,bzip2))) + (build-system font-build-system) (home-page "http://www.gnome.org/fonts/") (synopsis "Bitstream Vera sans-serif typeface") (description "Vera is a sans-serif typeface from Bitstream, Inc. This -- 2.12.2 ^ permalink raw reply related [flat|nested] 34+ messages in thread
* User-Friendlyness of Guix and non-scaryness, printing messages 2017-05-27 18:37 ` Arun Isaac @ 2017-05-28 18:44 ` Danny Milosavljevic 2017-05-28 19:01 ` Danny Milosavljevic ` (2 more replies) 0 siblings, 3 replies; 34+ messages in thread From: Danny Milosavljevic @ 2017-05-28 18:44 UTC (permalink / raw) To: guix-devel Hi, so bug#26941 (which is only tangentially related) has made me think about a long-standing usability wart of Guix: The verbosity of Guix messages is really off-putting for regular users. Ideally, a successful build & installation of a package should look like this: $ guix package -i foobar $ Nothing else. If you can't help it, then: $ guix package -i foobar Package foobar in version 2.3.2 has been successfully installed into your profile. $ For a successful installation it should *never* print (as it does now): $ guix package -i foobar ...aphics/opentype -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/graphics/transforms -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/mediastream -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/mediastream/libwebrtc -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/mock -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/mock/mediasource -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/network -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/sql -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/text -I/tmp/guix-build-webkitgtk-2.16 .3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/text/icu -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/plugins -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/ Source/WebCore/rendering -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/rendering/line -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/rendering/mathml -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/rendering/shapes -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/rendering/style -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/rendering/svg -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/replay -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/storage -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/style -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/svg -I/tmp/guix-b uild-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/svg/animation -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/svg/graphics -I/tmp/guix-build-webkitgtk-2.16.3.drv -0/webkitgtk-2.16.3/Source/WebCore/svg/graphics/filters -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/svg/properties -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/websockets -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/workers -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/xml -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/xml/parser -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/build/DerivedSources/WebCore -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/build/DerivedSources/ForwardingHeaders/ANGLE -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/graphics/gpu -I/tmp/guix-b uild-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/ThirdParty/woff2/src -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/mediastream/openwebrtc -I/tmp/guix-build-we bkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/graphics/gstreamer -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/graphics/gstreamer/mse -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/graphics/gstreamer/eme -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/audio/gstreamer -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/image-decoders -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/image-decoders/bmp -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/image-decoders/gif -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/image-decoders/ico -I/tmp/gui x-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/image-decoders/jpeg -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/image-decoders/png -I/tm p/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/image-decoders/webp -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/linux -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/graphics/texmap -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/page/scrolling/coordinatedgraphics -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/graphics/texmap/coordinated -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/ThirdParty/ANGLE -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/ThirdParty/ANGLE/include/KHR -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/accessibility/atk -I/tmp/guix-build-webkitgtk-2.1 6.3.drv-0/webkitgtk-2.16.3/Source/WebCore/editing/atk -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/page/gtk -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Sour ce/WebCore/platform/cairo -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/gamepad/glib -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/geoclue -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/gtk -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/graphics/cairo -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/graphics/egl -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/graphics/glx -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/graphics/gtk -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/graphics/freetype -I/tmp/guix-build-we bkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/graphics/opengl -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/graphics/wayland -I/tmp/guix-build-web kitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/graphics/x11 -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/mediastream/gtk -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/network/gtk -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/network/soup -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/text/gtk -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/bindings/gobject -isystem /gnu/store/0wps368gx0cn3ynrkbhzq5pxf75rng7y-glib-2.50.3/include/glib-2.0 -isystem /gnu/store/0wps368gx0cn3ynrkbhzq5pxf75rng7y-glib-2.50.3/lib/glib-2.0/include -isystem /gnu/store/228dcbvw787gbz1kslwjcaz5qnfcgn2v-gstreamer-1.12.0/include/gstreamer-1 .0 -isystem /gnu/store/jkx9mkw8j34jfnv0dqdbbzxdcx3mlfdg-atk-2.22.0/include/atk-1.0 -isystem /gnu/store/i0bjwdqvn0wixcwfpw254w0az17iysga-cairo-1.14.8/include/cairo -isystem /gnu/store/92scvk1jj5fnsbw y4nichgg0hdl235dz-enchant-1.6.0/include/enchant -isystem /gnu/store/b837wr8ffw2ppbx1744a2xll70bh8h4c-freetype-2.7.1/include/freetype2/freetype -isystem /gnu/store/b837wr8ffw2ppbx1744a2xll70bh8h4c-freetype-2.7.1/include/freetype2 -isystem /gnu/store/0wps368gx0cn3ynrkbhzq5pxf75rng7y-glib-2.50.3/include/gio-unix-2.0 -isystem /gnu/store/k6jkr6p94xlsddgiy8abicm2b36gkdh6-harfbuzz-1.4.3/include/harfbuzz -isystem /gnu/store/iclywgva6yjrxyblxrxcisrpqc2x8m5s-libsecret-0.18.5/include/libsecret-1 -isystem /gnu/store/4wr3mq3n7wvgkpy6384rsrrq5kiwwihq-libsoup-2.56.0/include/libsoup-2.4 -isystem /gnu/store/8h3gg0hj7lwimcdn2r912vv2mnh6yx0n-libxml2-2.9.4/include/libxml2 -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/ Source/JavaScriptCore/.. -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/API -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/Forwardin gHeaders -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/assembler -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/b3 -I/tmp/guix-build-webkitgtk-2.16 .3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/b3/air -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/bindings -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/builtins -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/bytecode -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/bytecompiler -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/dfg -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/disassembler -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/disassembler/udis86 -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/disassembler/ARM64 -I/tmp/gu ix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/domjit -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/ftl -I/tmp/guix-build-webkitgtk-2.16.3.d rv-0/webkitgtk-2.16.3/Source/JavaScriptCore/heap -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/debugger -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/inspector -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/inspector/agents -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/inspector/augmentable -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/inspector/remote -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/interpreter -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/jit -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/llint -I/tmp/guix-b uild-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/parser -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/profiler -I/tmp/guix-build-webkitgtk-2.16.3. drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/replay -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/runtime -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/tools -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/wasm -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/wasm/js -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/yarr -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/build/DerivedSources/ForwardingHeaders -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/build/DerivedSources/JavaScriptCore -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/build/DerivedSources/JavaScriptCore/inspector -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/bmallo c -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WTF -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/build/DerivedSources -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/ ThirdParty -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/PAL -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/PAL/pal -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/PAL/pal/crypto -fno-exceptions -fno-strict-aliasing -fno-rtti -std=c++1y -O3 -DNDEBUG -Wall -Wextra -Wcast-align -Wformat-security -Wmissing-format-attribute -Wpointer-arith -Wundef -Wwrite-strings -fPIC -o CMakeFiles/WebCore.dir/svg/SVGFEImageElement.cpp.o -c /tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/svg/SVGFEImageElement.cpp [... 20 pages of cryptic text] Package foobar has been successfully installed into your profile. $ I think that a line containing something like "36pqsgbqi7kkkkn89sqrp2hyk3gxm8zv" (like install-file would print, too) should never appear in front of the user in normal operation. Some programmer (!) colleagues of mine actually remarked something like "what is THAT? Looks scary" when they looked at what guix prints when I install something in Guix. Really, printing that much noise is an usability bug. Arun mentioned that he wants to see that something is still happening and therefore wants something printed. I agree - but it should only print and update one line total. For example, if we wanted a progress monitor, that could look like this (this should include all the dependencies in the same progress display): $ guix package -i foobar Installing... [20%] \ ^ Spinner that spins, say, every time a line is added to the log file. And later when progress is 100%, changing to $ guix package -i foobar Installation successful $ I think that the detailed messages are good to have in the event that an installation fails. But even then it should just print a message like this (and here, it really should print it): $ guix package -i foobar Installation failed. For more details, you can invoke "guix build --log-file `guix build -d foobar`" (without double quotes). In order to report a bug, please send a message to <bug-guix@gnu.org>. $ Or it could invoke "guix build --log-file `guix build -d foobar`" on its own and just print the resulting name. It should NOT print the detailed messages automatically. So all in all I'd really like much less verbosity on the console. I actually use guix behind a wrapper script of mine that supresses all non-error messages for common cases (it redirects stdout to /dev/null) - and it's *still* pretty bad. I think that's because all the build output is printed to stderr by build.scm , regardless of whether the container printed it to stdout or stderr. Is that correct? Could we please make "guix package -i" use "guix build -q" to make stdout and stderr go into the log files only? Furthermore, I think even the guix download lines are too noisy in the successful case. Guix should really just update one line for the entire thing, downloading, building, profile updating, everything. The usual UNIX design, too, is that if everything works, UNIX prints nothing. As soon as something is printed my first feeling is that it's something bad (especially with 20 pages :P). And really, no one cares what the current gcc command is - as long as it works. If UNIX printed everything it did it would look very noisy and be very slow (printing takes time). I think "guix pull" is nice in this regard. It just shows a progress bar. Nothing else. Because a normal user doesn't care that now it compiles gnu/foo/bar.scm into e5y35334436743987463464363-foo/lib/afrewtew/tw/teww. WDYT? ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: User-Friendlyness of Guix and non-scaryness, printing messages 2017-05-28 18:44 ` User-Friendlyness of Guix and non-scaryness, printing messages Danny Milosavljevic @ 2017-05-28 19:01 ` Danny Milosavljevic 2017-05-28 20:35 ` Danny Milosavljevic 2017-05-28 19:20 ` Leo Famulari 2017-05-28 19:30 ` ng0 2 siblings, 1 reply; 34+ messages in thread From: Danny Milosavljevic @ 2017-05-28 19:01 UTC (permalink / raw) To: guix-devel Aha, much better: diff --git a/guix/scripts/package.scm b/guix/scripts/package.scm index f050fad97..e4a3a98a1 100644 --- a/guix/scripts/package.scm +++ b/guix/scripts/package.scm @@ -196,6 +196,7 @@ specified in MANIFEST, a manifest object." (when (equal? profile %current-profile) (ensure-default-profile)) + (parameterize ((current-build-output-port (%make-void-port "w"))) (let* ((prof-drv (run-with-store store (profile-derivation manifest #:hooks (if bootstrap? @@ -230,7 +231,7 @@ specified in MANIFEST, a manifest object." count) count) (display-search-paths entries (list profile) - #:kind 'prefix)))))))) + #:kind 'prefix))))))))) ^L ;;; As I understand it, for failed builds, it will still retain the log file and all the log messages even after this, right? Now to adapt guix system, too - looks more difficult. Would it be possible to make a custom port that just waits for a line to be printed, then prints some custom text to stderr only, and so on? For the spinner, like: In pseudo-code: class port: while True: line = port.readline() sys.stderr.write("\\") line = port.readline() sys.stderr.write("|") line = port.readline() sys.stderr.write("/") line = port.readline() sys.stderr.write("-") ^ permalink raw reply related [flat|nested] 34+ messages in thread
* Re: User-Friendlyness of Guix and non-scaryness, printing messages 2017-05-28 19:01 ` Danny Milosavljevic @ 2017-05-28 20:35 ` Danny Milosavljevic 2017-05-28 20:58 ` Danny Milosavljevic 0 siblings, 1 reply; 34+ messages in thread From: Danny Milosavljevic @ 2017-05-28 20:35 UTC (permalink / raw) To: guix-devel And the spinner implementation: (define p (let ((index 0) (spinner-chars "|\\-/")) (define (spin) (set! index (+ index 1)) (if (>= index (string-length spinner-chars)) (set! index 0)) (display (array-ref spinner-chars index)) (display "\b")) (make-soft-port (vector (lambda (c) (if (char=? c #\newline) (spin) (write c))) ; putc (lambda (s) (if (string-contains s "\n") (spin))) ; puts (lambda () #t) ; flush (lambda () #f) ; getc (lambda () #t)) ; close "w"))) (define (f) (display "\n" p) (f)) (f) ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: User-Friendlyness of Guix and non-scaryness, printing messages 2017-05-28 20:35 ` Danny Milosavljevic @ 2017-05-28 20:58 ` Danny Milosavljevic 2017-05-30 15:11 ` Ludovic Courtès 0 siblings, 1 reply; 34+ messages in thread From: Danny Milosavljevic @ 2017-05-28 20:58 UTC (permalink / raw) To: guix-devel And also the spinner integrated: diff --git a/guix/scripts/package.scm b/guix/scripts/package.scm index f050fad97..d9ac61122 100644 --- a/guix/scripts/package.scm +++ b/guix/scripts/package.scm @@ -46,6 +46,7 @@ #:use-module (srfi srfi-34) #:use-module (srfi srfi-35) #:use-module (srfi srfi-37) + #:use-module (rnrs io ports) #:use-module (gnu packages) #:autoload (gnu packages base) (canonical-package) #:autoload (gnu packages guile) (guile-2.0) @@ -187,6 +188,27 @@ denote ranges as interpreted by 'matching-generations'." (else (leave (G_ "invalid syntax: ~a~%") pattern))))) +(define previous-output-port (current-error-port)) + +(define spinner-port + (let ((index 0) + (spinner-chars "|\\-/")) + (define (spin) + (set! index (+ index 1)) + (if (>= index (string-length spinner-chars)) + (set! index 0)) + (display (array-ref spinner-chars index) previous-output-port) + (display #\backspace previous-output-port) + (flush-output-port previous-output-port)) + (make-soft-port + (vector + (lambda (c) (if (char=? c #\newline) (spin))) ; putc + (lambda (s) (if (string-contains s "\n") (spin))) ; puts + (lambda () #t) ; flush + (lambda () #f) ; getc + (lambda () #t)) ; close + "w"))) + (define* (build-and-use-profile store profile manifest #:key bootstrap? use-substitutes? @@ -196,6 +218,7 @@ specified in MANIFEST, a manifest object." (when (equal? profile %current-profile) (ensure-default-profile)) + (parameterize ((current-build-output-port spinner-port)) (let* ((prof-drv (run-with-store store (profile-derivation manifest #:hooks (if bootstrap? @@ -230,7 +253,7 @@ specified in MANIFEST, a manifest object." count) count) (display-search-paths entries (list profile) - #:kind 'prefix)))))))) + #:kind 'prefix))))))))) ^L ;;; ^ permalink raw reply related [flat|nested] 34+ messages in thread
* Re: User-Friendlyness of Guix and non-scaryness, printing messages 2017-05-28 20:58 ` Danny Milosavljevic @ 2017-05-30 15:11 ` Ludovic Courtès 0 siblings, 0 replies; 34+ messages in thread From: Ludovic Courtès @ 2017-05-30 15:11 UTC (permalink / raw) To: Danny Milosavljevic; +Cc: guix-devel Hi Danny, Danny Milosavljevic <dannym@scratchpost.org> skribis: > And also the spinner integrated: > > diff --git a/guix/scripts/package.scm b/guix/scripts/package.scm > index f050fad97..d9ac61122 100644 > --- a/guix/scripts/package.scm > +++ b/guix/scripts/package.scm > @@ -46,6 +46,7 @@ > #:use-module (srfi srfi-34) > #:use-module (srfi srfi-35) > #:use-module (srfi srfi-37) > + #:use-module (rnrs io ports) > #:use-module (gnu packages) > #:autoload (gnu packages base) (canonical-package) > #:autoload (gnu packages guile) (guile-2.0) > @@ -187,6 +188,27 @@ denote ranges as interpreted by 'matching-generations'." > (else > (leave (G_ "invalid syntax: ~a~%") pattern))))) > > +(define previous-output-port (current-error-port)) > + > +(define spinner-port > + (let ((index 0) > + (spinner-chars "|\\-/")) > + (define (spin) > + (set! index (+ index 1)) > + (if (>= index (string-length spinner-chars)) > + (set! index 0)) > + (display (array-ref spinner-chars index) previous-output-port) > + (display #\backspace previous-output-port) > + (flush-output-port previous-output-port)) > + (make-soft-port > + (vector > + (lambda (c) (if (char=? c #\newline) (spin))) ; putc > + (lambda (s) (if (string-contains s "\n") (spin))) ; puts > + (lambda () #t) ; flush > + (lambda () #f) ; getc > + (lambda () #t)) ; close > + "w"))) Nice hack! I don’t think we should incorporate it just right now; I would prefer something that writes “building foo” or “downloading bar” in addition to the spinner, like ‘wip-ui’ tries to do. WDYT? Ludo’. ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: User-Friendlyness of Guix and non-scaryness, printing messages 2017-05-28 18:44 ` User-Friendlyness of Guix and non-scaryness, printing messages Danny Milosavljevic 2017-05-28 19:01 ` Danny Milosavljevic @ 2017-05-28 19:20 ` Leo Famulari 2017-05-28 19:40 ` Danny Milosavljevic ` (2 more replies) 2017-05-28 19:30 ` ng0 2 siblings, 3 replies; 34+ messages in thread From: Leo Famulari @ 2017-05-28 19:20 UTC (permalink / raw) To: Danny Milosavljevic; +Cc: guix-devel [-- Attachment #1: Type: text/plain, Size: 3542 bytes --] On Sun, May 28, 2017 at 08:44:44PM +0200, Danny Milosavljevic wrote: > Ideally, a successful build & installation of a package should look > like this: > > $ guix package -i foobar > $ Silence is golden! > Nothing else. If you can't help it, then: > > $ guix package -i foobar > Package foobar in version 2.3.2 has been successfully installed into your profile. > $ [...] > For a successful installation it should *never* print (as it does now): > > $ guix package -i foobar > ...aphics/opentype -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/graphics/transforms -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/mediastream -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/mediastream/libwebrtc -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/mock -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/mock/mediasource -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/network -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/sql -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/text -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/text/icu -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/plugins -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/ This sample omits the most useful output, which is the summary of what will be done. In my opinion, a successful run of `guix package` should either print this summary and the name of the new generation, or be as verbose as it is now. > I think that a line containing something like > "36pqsgbqi7kkkkn89sqrp2hyk3gxm8zv" (like install-file would print, > too) should never appear in front of the user in normal operation. > Perhaps for `guix package`, but I disagree for `guix build` and others. It prints *only* the new store items on stdout, and this makes it very easy to compose Guix commands. We should not break this. > Some programmer (!) colleagues of mine actually remarked something > like "what is THAT? Looks scary" when they looked at what guix prints > when I install something in Guix. I understand that your colleagues share your opinion, but they are few, and don't even use Guix, so we should not take this small sample too seriously. We can all look at the interfaces of software or machines that we don't use and feel confused, but this feeling doesn't mean very much, in my opinion. I remember being mystified by car dashboards as child. Since I learned to drive, I never think twice about them, and I drive different cars and trucks often. Command-line interfaces are not suitable for usage by "non-technical users" anyways; they demand a GUI. Most of us are comfortable on the command-line, but we should not forget that we are in an extremely small minority. It would be great if everyone could learn to use their computers with the command-line, which offers great power and flexibility, but it's not a realistic goal, especially as new computer users eschew "real" computers in favor of mobile phones. So, I'm wary of sacrificing a flexible and powerful CLI on behalf of users who really will never use a CLI. Now, I'm not saying there is nothing to improve. Rather, I'm saying that the existing Guix CLI is pretty good, and we should be careful about changing it. [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: User-Friendlyness of Guix and non-scaryness, printing messages 2017-05-28 19:20 ` Leo Famulari @ 2017-05-28 19:40 ` Danny Milosavljevic 2017-05-28 19:47 ` Leo Famulari ` (2 more replies) 2017-05-30 1:47 ` "guix system" summary output? Danny Milosavljevic 2017-05-30 8:17 ` User-Friendlyness of Guix and non-scaryness, printing messages Roel Janssen 2 siblings, 3 replies; 34+ messages in thread From: Danny Milosavljevic @ 2017-05-28 19:40 UTC (permalink / raw) To: Leo Famulari; +Cc: guix-devel Hi Leo, On Sun, 28 May 2017 15:20:58 -0400 Leo Famulari <leo@famulari.name> wrote: > This sample omits the most useful output, which is the summary of what > will be done. That's because even my huge xterm scrollback buffer doesn't contain it anymore. I couldn't include it because I never saw it in the first place - and I can't reach it anymore. > Perhaps for `guix package`, but I disagree for `guix build` and others. > It prints *only* the new store items on stdout, and this makes it very > easy to compose Guix commands. We should not break this. I agree. guix build is different. Its whole point is to do that. The scripts I mean are: - guix package - guix system > Command-line interfaces are not suitable for usage by "non-technical > users" anyways; they demand a GUI. Yes, but these were technical users - the deepest technical users, too. Previously, I thought that the reason that guix prints so much is that it doesn't log it to a file. But it turns out that it does log it (at least it has a build log per derivation), also in the failure case. Why print it then when there's no failure? It doesn't help the user at all. He's not gonna frame the output and hang it on a wall :) For the failure case, he can just be directed to the build log (by the failing command!) - if he or a developer wants to know, he can check it. > So, I'm wary of sacrificing a flexible and powerful CLI on behalf of > users who really will never use a CLI. Now, I'm not saying there is > nothing to improve. Rather, I'm saying that the existing Guix CLI is > pretty good, and we should be careful about changing it. I agree. Let's talk about it first :) Also, I agree about not touching "guix build". That one is mostly for package authors and it makes sense that it prints the stuff immediately. ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: User-Friendlyness of Guix and non-scaryness, printing messages 2017-05-28 19:40 ` Danny Milosavljevic @ 2017-05-28 19:47 ` Leo Famulari 2017-05-28 21:12 ` Ludovic Courtès 2017-05-30 8:24 ` Ricardo Wurmus 2 siblings, 0 replies; 34+ messages in thread From: Leo Famulari @ 2017-05-28 19:47 UTC (permalink / raw) To: Danny Milosavljevic; +Cc: guix-devel [-- Attachment #1: Type: text/plain, Size: 1303 bytes --] On Sun, May 28, 2017 at 09:40:29PM +0200, Danny Milosavljevic wrote: > On Sun, 28 May 2017 15:20:58 -0400 > Leo Famulari <leo@famulari.name> wrote: > The scripts I mean are: > > Command-line interfaces are not suitable for usage by "non-technical > > users" anyways; they demand a GUI. > > Yes, but these were technical users - the deepest technical users, too. Right, but my point was that new tools are unfamiliar and intimidating even to technical users. I might know how to use GCC, but I will still find the interface and output of another language's compiler strange and basically useless until I learn how to use it. > > So, I'm wary of sacrificing a flexible and powerful CLI on behalf of > > users who really will never use a CLI. Now, I'm not saying there is > > nothing to improve. Rather, I'm saying that the existing Guix CLI is > > pretty good, and we should be careful about changing it. > > I agree. Let's talk about it first :) > > Also, I agree about not touching "guix build". That one is mostly for > package authors and it makes sense that it prints the stuff > immediately. Okay :) By the way, I know that my tastes are old-school and that I am very conservative about changing things. We should think about this sort of change before Guix 1.0. [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: User-Friendlyness of Guix and non-scaryness, printing messages 2017-05-28 19:40 ` Danny Milosavljevic 2017-05-28 19:47 ` Leo Famulari @ 2017-05-28 21:12 ` Ludovic Courtès 2017-05-31 22:26 ` Danny Milosavljevic 2017-05-30 8:24 ` Ricardo Wurmus 2 siblings, 1 reply; 34+ messages in thread From: Ludovic Courtès @ 2017-05-28 21:12 UTC (permalink / raw) To: Danny Milosavljevic; +Cc: guix-devel Hello, Danny Milosavljevic <dannym@scratchpost.org> skribis: >> Perhaps for `guix package`, but I disagree for `guix build` and others. >> It prints *only* the new store items on stdout, and this makes it very >> easy to compose Guix commands. We should not break this. > > I agree. guix build is different. Its whole point is to do that. > > The scripts I mean are: > - guix package > - guix system Agreed for these. Danny, your suggestions go a bit further than what I had in mind :-), which was to write (roughly) one progress line per item built or downloaded. I’ve just pushed an old experiment as ‘wip-ui’ to give an idea of what I mean. If it still works, ‘guix package’ shows N line about the ongoing progress, where N is the number of parallel jobs (--max-jobs). It could be as concise as this: <http://nim-lang.org/news/e029_version_0_16_0.html>. The easiest way to do that is to “parse” what goes to ‘current-build-output-port’ and to filter and format the relevant info in the client. ‘wip-ui’ is a very first stab at this. The new (guix status) module maintains a representation of the on-going builds and downloads, which can be used by the UI. When max-jobs is 1, it’s easy because we can print things sequentially, and the patch does that well (modulo cosmetic improvements that can be made). But what should be the UI when max-jobs is greater than 1? I was thinking that if there are, say, 2 builds and 2 downloads in parallel, we could display 4 lines, one for each of these. Thus at each refresh, we’d need to use ANSI codes to erase the previous lines and write the updated lines. However, this wouldn’t work with dumb terminals (like shell-mode :-)) so we’d probably need a fallback mode. Anyway, food for thought. We should also come up with more mockups of the ideal thing, or pointers to screenshots of existing UIs. Also, parsing the build logs like this branch does is far from ideal. We might need to rework the daemon protocol to have more structured messages, and better routing/labeling of build logs. Thanks, Ludo’. ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: User-Friendlyness of Guix and non-scaryness, printing messages 2017-05-28 21:12 ` Ludovic Courtès @ 2017-05-31 22:26 ` Danny Milosavljevic 2017-06-01 21:41 ` Ludovic Courtès 0 siblings, 1 reply; 34+ messages in thread From: Danny Milosavljevic @ 2017-05-31 22:26 UTC (permalink / raw) To: Ludovic Courtès; +Cc: guix-devel Hi Ludo, On Sun, 28 May 2017 23:12:44 +0200 ludo@gnu.org (Ludovic Courtès) wrote: > Hello, > > Danny Milosavljevic <dannym@scratchpost.org> skribis: > > >> Perhaps for `guix package`, but I disagree for `guix build` and others. > >> It prints *only* the new store items on stdout, and this makes it very > >> easy to compose Guix commands. We should not break this. > > > > I agree. guix build is different. Its whole point is to do that. > > > > The scripts I mean are: > > - guix package > > - guix system > > Agreed for these. I forgot guix environment. > I’ve just pushed an old experiment as ‘wip-ui’ to give an idea of what I > mean. If it still works, ‘guix package’ shows N line about the ongoing I'll check it out... > progress, where N is the number of parallel jobs (--max-jobs). It could > be as concise as this: > <http://nim-lang.org/news/e029_version_0_16_0.html>. Hmm, is that the correct URL ? :) ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: User-Friendlyness of Guix and non-scaryness, printing messages 2017-05-31 22:26 ` Danny Milosavljevic @ 2017-06-01 21:41 ` Ludovic Courtès 0 siblings, 0 replies; 34+ messages in thread From: Ludovic Courtès @ 2017-06-01 21:41 UTC (permalink / raw) To: Danny Milosavljevic; +Cc: guix-devel Danny Milosavljevic <dannym@scratchpost.org> skribis: > On Sun, 28 May 2017 23:12:44 +0200 > ludo@gnu.org (Ludovic Courtès) wrote: > >> Hello, >> >> Danny Milosavljevic <dannym@scratchpost.org> skribis: >> >> >> Perhaps for `guix package`, but I disagree for `guix build` and others. >> >> It prints *only* the new store items on stdout, and this makes it very >> >> easy to compose Guix commands. We should not break this. >> > >> > I agree. guix build is different. Its whole point is to do that. >> > >> > The scripts I mean are: >> > - guix package >> > - guix system >> >> Agreed for these. > > I forgot guix environment. > >> I’ve just pushed an old experiment as ‘wip-ui’ to give an idea of what I >> mean. If it still works, ‘guix package’ shows N line about the ongoing > > I'll check it out... > >> progress, where N is the number of parallel jobs (--max-jobs). It could >> be as concise as this: >> <http://nim-lang.org/news/e029_version_0_16_0.html>. > > Hmm, is that the correct URL ? :) It was correct once upon a time. :-) Here’s the current one: <https://nim-lang.org/blog/2017/01/08/version-0160-released.html>. Ludo’. ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: User-Friendlyness of Guix and non-scaryness, printing messages 2017-05-28 19:40 ` Danny Milosavljevic 2017-05-28 19:47 ` Leo Famulari 2017-05-28 21:12 ` Ludovic Courtès @ 2017-05-30 8:24 ` Ricardo Wurmus 2017-06-16 11:42 ` Danny Milosavljevic 2 siblings, 1 reply; 34+ messages in thread From: Ricardo Wurmus @ 2017-05-30 8:24 UTC (permalink / raw) To: Danny Milosavljevic; +Cc: guix-devel > Previously, I thought that the reason that guix prints so much is that > it doesn't log it to a file. But it turns out that it does log it (at > least it has a build log per derivation), also in the failure case. > Why print it then when there's no failure? It doesn't help the user > at all. [They’re] not gonna frame the output and hang it on a wall :) I agree that Guix is too verbose by default. It would be sufficient if Guix told the user that it is building from source for some reason. Upon failure it can print the location of the build log. -- Ricardo GPG: BCA6 89B6 3655 3801 C3C6 2150 197A 5888 235F ACAC https://elephly.net ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: User-Friendlyness of Guix and non-scaryness, printing messages 2017-05-30 8:24 ` Ricardo Wurmus @ 2017-06-16 11:42 ` Danny Milosavljevic 2017-06-17 20:16 ` Ludovic Courtès 0 siblings, 1 reply; 34+ messages in thread From: Danny Milosavljevic @ 2017-06-16 11:42 UTC (permalink / raw) To: Ricardo Wurmus; +Cc: guix-devel Hi, On Tue, 30 May 2017 10:24:34 +0200 Ricardo Wurmus <rekado@elephly.net> wrote: > Upon failure it can print the location of the build log. I'm trying to get this to work but guix build --log-file foo doesn't seem to print the location of the build log in the failure case... Is it possible to get to it somehow? Apparently the log files go into log/guix/drvs - but I can't find the place where the build log is created in the first place... ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: User-Friendlyness of Guix and non-scaryness, printing messages 2017-06-16 11:42 ` Danny Milosavljevic @ 2017-06-17 20:16 ` Ludovic Courtès 0 siblings, 0 replies; 34+ messages in thread From: Ludovic Courtès @ 2017-06-17 20:16 UTC (permalink / raw) To: Danny Milosavljevic; +Cc: guix-devel Hello, Danny Milosavljevic <dannym@scratchpost.org> skribis: > On Tue, 30 May 2017 10:24:34 +0200 > Ricardo Wurmus <rekado@elephly.net> wrote: > >> Upon failure it can print the location of the build log. > > I'm trying to get this to work but > > guix build --log-file foo > > doesn't seem to print the location of the build log in the failure case... It should work (for local builds at least). Perhaps you also need --no-grafts? Or maybe there’s a bug. > Is it possible to get to it somehow? Sure, just look for in in /var/log/guix/drvs. > Apparently the log files go into log/guix/drvs - but I can't find the place where the build log is created in the first place... The logs are named after the derivation; see ‘log-file’ in (guix store). HTH! Ludo’. ^ permalink raw reply [flat|nested] 34+ messages in thread
* "guix system" summary output? 2017-05-28 19:20 ` Leo Famulari 2017-05-28 19:40 ` Danny Milosavljevic @ 2017-05-30 1:47 ` Danny Milosavljevic 2017-05-30 11:05 ` Danny Milosavljevic 2017-05-30 15:47 ` Ludovic Courtès 2017-05-30 8:17 ` User-Friendlyness of Guix and non-scaryness, printing messages Roel Janssen 2 siblings, 2 replies; 34+ messages in thread From: Danny Milosavljevic @ 2017-05-30 1:47 UTC (permalink / raw) To: Leo Famulari, guix-devel > This sample omits the most useful output, which is the summary of what > will be done. Just tested with the spinner so I could actually (potentially) see the summary. It seems that "guix package" prints such a summary (yay!), but "guix system reconfigure" doesn't. The latter just starts downloading stuff and then builds stuff - no summary anywhere: ;;; note: source file /x/home/dannym/src/guix/guix/ui.scm ;;; newer than compiled /x/home/dannym/src/guix/guix/ui.go guix system: warning: Your Guix installation is 476 days old. guix system: warning: Consider running 'guix pull' followed by 'guix system reconfigure' to get up-to-date packages and security updates. substitute: updating list of substitutes from 'https://bayfront.guixsd.org'... 100.0% substitute: updating list of substitutes from 'https://mirror.hydra.gnu.org'... 100.0% substitute: updating list of substitutes from 'https://bayfront.guixsd.org'... 100.0% substitute: updating list of substitutes from 'https://mirror.hydra.gnu.org'... 100.0% substitute: updating list of substitutes from 'https://mirror.hydra.gnu.org'... 100.0% updating list of substitutes from 'https://bayfront.guixsd.org'... 100.0% updating list of substitutes from 'https://mirror.hydra.gnu.org'... 100.0% Downloading https://mirror.hydra.gnu.org/guix/nar/zv7rfn8wj4g0nrjzfqgpdnibwy8rjq9q-adwaita-icon-theme-3.24.0.tar.xz (19.8MiB installed)... adwaita-icon-theme-3.24.0.tar.xz 19.8MiB 1.2MiB/s 00:16 [####################] 100.0% updating list of substitutes from 'https://bayfront.guixsd.org'... 100.0% Downloading https://mirror.hydra.gnu.org/guix/nar/b06kc32xcs4kmidi82p4agrmnypri935-cups-2.2.1-source.tar.gz (9.0MiB installed)... cups-2.2.1-source.tar.gz 9.0MiB 1.6MiB/s 00:06 [####################] 100.0% | ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: "guix system" summary output? 2017-05-30 1:47 ` "guix system" summary output? Danny Milosavljevic @ 2017-05-30 11:05 ` Danny Milosavljevic 2017-05-30 15:47 ` Ludovic Courtès 1 sibling, 0 replies; 34+ messages in thread From: Danny Milosavljevic @ 2017-05-30 11:05 UTC (permalink / raw) To: Leo Famulari, guix-devel On Tue, 30 May 2017 03:47:46 +0200 Danny Milosavljevic <dannym@scratchpost.org> wrote: > > This sample omits the most useful output, which is the summary of what > > will be done. > > Just tested with the spinner so I could actually (potentially) see the summary. > > It seems that "guix package" prints such a summary (yay!), but "guix system reconfigure" doesn't. The latter just starts downloading stuff and then builds stuff - no summary anywhere: And now it does print the summary. I've got no idea what's different now. guix system: warning: Your Guix installation is 477 days old. guix system: warning: Consider running 'guix pull' followed by 'guix system reconfigure' to get up-to-date packages and security updates. The following derivations will be built: /gnu/store/0sm3cp68x056gq23a93l37bb725vhfi4-system.drv /gnu/store/jmnp4mfa5iv8ra01gzndb4xlf7kkw2ji-grub.cfg.drv /gnu/store/lmwi7z6s8601swnyyygv9ycdq6bjcmy8-m4-1.4.18.tar.xz.drv ... \ ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: "guix system" summary output? 2017-05-30 1:47 ` "guix system" summary output? Danny Milosavljevic 2017-05-30 11:05 ` Danny Milosavljevic @ 2017-05-30 15:47 ` Ludovic Courtès 1 sibling, 0 replies; 34+ messages in thread From: Ludovic Courtès @ 2017-05-30 15:47 UTC (permalink / raw) To: Danny Milosavljevic; +Cc: guix-devel Danny Milosavljevic <dannym@scratchpost.org> skribis: >> This sample omits the most useful output, which is the summary of what >> will be done. > > Just tested with the spinner so I could actually (potentially) see the summary. > > It seems that "guix package" prints such a summary (yay!), but "guix system reconfigure" doesn't. The latter just starts downloading stuff and then builds stuff - no summary anywhere: Probably this relates to grafts: store items need to be substitutable/available so we can determine whether they need to be grafted. What happens with ‘guix system … --no-grafts’? Thanks, Ludo’. ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: User-Friendlyness of Guix and non-scaryness, printing messages 2017-05-28 19:20 ` Leo Famulari 2017-05-28 19:40 ` Danny Milosavljevic 2017-05-30 1:47 ` "guix system" summary output? Danny Milosavljevic @ 2017-05-30 8:17 ` Roel Janssen 2017-05-30 13:56 ` Arun Isaac 2 siblings, 1 reply; 34+ messages in thread From: Roel Janssen @ 2017-05-30 8:17 UTC (permalink / raw) To: Leo Famulari; +Cc: guix-devel Leo Famulari writes: > On Sun, May 28, 2017 at 08:44:44PM +0200, Danny Milosavljevic wrote: >> Ideally, a successful build & installation of a package should look >> like this: >> >> $ guix package -i foobar >> $ > > Silence is golden! > >> Nothing else. If you can't help it, then: >> >> $ guix package -i foobar >> Package foobar in version 2.3.2 has been successfully installed into your profile. >> $ > > [...] > >> For a successful installation it should *never* print (as it does now): >> >> $ guix package -i foobar >> ...aphics/opentype -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/graphics/transforms -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/mediastream -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/mediastream/libwebrtc -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/mock -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/mock/mediasource -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/network -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/sql -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/text -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/text/icu -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/plugins -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/ > > This sample omits the most useful output, which is the summary of what > will be done. In my opinion, a successful run of `guix package` should > either print this summary and the name of the new generation, or be as > verbose as it is now. > >> I think that a line containing something like >> "36pqsgbqi7kkkkn89sqrp2hyk3gxm8zv" (like install-file would print, >> too) should never appear in front of the user in normal operation. >> > Perhaps for `guix package`, but I disagree for `guix build` and others. > It prints *only* the new store items on stdout, and this makes it very > easy to compose Guix commands. We should not break this. I agree. 'guix build' should be as verbose as it is now. It is actually very useful for detecting little things like missing dependencies or wrong configuration options when building a package. But I think 'guix package' can be made a lot more user-friendly by not showing the build output (by default). The summary of what will be installed, and some progress indicator or at least something moving to show the user it's doing something, and eventually the success or failure message is enough. You know what would be cool? A progress indicator like so: Building derivation 6 of 110.. With '6' progressing up to '110' as soon as a build succeeds. It would be much more useful to me than to see these g++ commands (when installing programs). >> Some programmer (!) colleagues of mine actually remarked something >> like "what is THAT? Looks scary" when they looked at what guix prints >> when I install something in Guix. > > I understand that your colleagues share your opinion, but they are few, > and don't even use Guix, so we should not take this small sample too > seriously. We can all look at the interfaces of software or machines > that we don't use and feel confused, but this feeling doesn't mean very > much, in my opinion. I remember being mystified by car dashboards as > child. Since I learned to drive, I never think twice about them, and I > drive different cars and trucks often. > > Command-line interfaces are not suitable for usage by "non-technical > users" anyways; they demand a GUI. Most of us are comfortable on the > command-line, but we should not forget that we are in an extremely small > minority. It would be great if everyone could learn to use their > computers with the command-line, which offers great power and > flexibility, but it's not a realistic goal, especially as new computer > users eschew "real" computers in favor of mobile phones. But at least we can try to make them more non-technical-user-friendly wherever it doesn't hurt us. And I think 'guix package' is such a case. We are also hiding a lot of information on 'guix package --list-generations', because we only display the difference between two generations. I think it looks much better in practice than it did before. > So, I'm wary of sacrificing a flexible and powerful CLI on behalf of > users who really will never use a CLI. Now, I'm not saying there is > nothing to improve. Rather, I'm saying that the existing Guix CLI is > pretty good, and we should be careful about changing it. I don't think we are making the CLI less powerful by not showing the build output in the 'guix package' command. When the build fails, you can review the build log. And a failure is something you don't expect when you are installing packages. That's something we use 'guix build' for. Kind regards, Roel Janssen ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: User-Friendlyness of Guix and non-scaryness, printing messages 2017-05-30 8:17 ` User-Friendlyness of Guix and non-scaryness, printing messages Roel Janssen @ 2017-05-30 13:56 ` Arun Isaac 2017-05-30 14:32 ` Christopher Allan Webber 2017-05-30 15:13 ` Ludovic Courtès 0 siblings, 2 replies; 34+ messages in thread From: Arun Isaac @ 2017-05-30 13:56 UTC (permalink / raw) To: guix-devel > But I think 'guix package' can be made a lot more user-friendly by not > showing the build output (by default). The summary of what will be > installed, and some progress indicator or at least something moving to > show the user it's doing something, and eventually the success or > failure message is enough. Is it possible to have `guix package' NOT build from source? I really hate it when big packages like icecat, epiphany, or libreoffice start building on my machine. It takes about a day for each one of these packages to build on my machine, and they generally swap so much into HDD, that I can hardly do anything else when building. Because of this inconvenience, I keep postponing upgrading my packages. Also, sometimes having to "--fallback" to building source is such a pain. I think the end user needs a Debian-like experience (or like other conventional non-source distros) where they can ALWAYS download the latest packages from the repos. ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: User-Friendlyness of Guix and non-scaryness, printing messages 2017-05-30 13:56 ` Arun Isaac @ 2017-05-30 14:32 ` Christopher Allan Webber 2017-05-30 15:58 ` Arun Isaac 2017-05-30 15:13 ` Ludovic Courtès 1 sibling, 1 reply; 34+ messages in thread From: Christopher Allan Webber @ 2017-05-30 14:32 UTC (permalink / raw) To: Arun Isaac; +Cc: guix-devel Arun Isaac writes: >> But I think 'guix package' can be made a lot more user-friendly by not >> showing the build output (by default). The summary of what will be >> installed, and some progress indicator or at least something moving to >> show the user it's doing something, and eventually the success or >> failure message is enough. > > Is it possible to have `guix package' NOT build from source? I really > hate it when big packages like icecat, epiphany, or libreoffice start > building on my machine. It takes about a day for each one of these > packages to build on my machine, and they generally swap so much into > HDD, that I can hardly do anything else when building. Because of this > inconvenience, I keep postponing upgrading my packages. > > Also, sometimes having to "--fallback" to building source is such a > pain. I think the end user needs a Debian-like experience (or like other > conventional non-source distros) where they can ALWAYS download the > latest packages from the repos. There's a bug I opened about adding an --only-substitutes option: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=26608 Ludo seems to support it, so I guess really someone just needs to implement it. It would result in a lot less churn for a lot of us :) ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: User-Friendlyness of Guix and non-scaryness, printing messages 2017-05-30 14:32 ` Christopher Allan Webber @ 2017-05-30 15:58 ` Arun Isaac 0 siblings, 0 replies; 34+ messages in thread From: Arun Isaac @ 2017-05-30 15:58 UTC (permalink / raw) To: guix-devel Christopher Allan Webber writes: > There's a bug I opened about adding an --only-substitutes option: > https://debbugs.gnu.org/cgi/bugreport.cgi?bug=26608 > > Ludo seems to support it, so I guess really someone just needs to > implement it. It would result in a lot less churn for a lot of us :) Great! Nice to see that this in the pipeline... ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: User-Friendlyness of Guix and non-scaryness, printing messages 2017-05-30 13:56 ` Arun Isaac 2017-05-30 14:32 ` Christopher Allan Webber @ 2017-05-30 15:13 ` Ludovic Courtès 1 sibling, 0 replies; 34+ messages in thread From: Ludovic Courtès @ 2017-05-30 15:13 UTC (permalink / raw) To: Arun Isaac; +Cc: guix-devel Arun Isaac <arunisaac@systemreboot.net> skribis: > Is it possible to have `guix package' NOT build from source? We should definitely add an option for this. See also <https://bugs.gnu.org/26608>. Ludo’. ^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: User-Friendlyness of Guix and non-scaryness, printing messages 2017-05-28 18:44 ` User-Friendlyness of Guix and non-scaryness, printing messages Danny Milosavljevic 2017-05-28 19:01 ` Danny Milosavljevic 2017-05-28 19:20 ` Leo Famulari @ 2017-05-28 19:30 ` ng0 2 siblings, 0 replies; 34+ messages in thread From: ng0 @ 2017-05-28 19:30 UTC (permalink / raw) To: Danny Milosavljevic; +Cc: guix-devel Hi, Danny Milosavljevic transcribed 15K bytes: > Hi, > > so bug#26941 (which is only tangentially related) has made me think about a long-standing usability wart of Guix: > > The verbosity of Guix messages is really off-putting for regular users. > > Ideally, a successful build & installation of a package should look like this: > > $ guix package -i foobar > $ > > Nothing else. If you can't help it, then: > > $ guix package -i foobar > Package foobar in version 2.3.2 has been successfully installed into your profile. > $ > > For a successful installation it should *never* print (as it does now): > > $ guix package -i foobar > [... 20 pages of cryptic text] > Package foobar has been successfully installed into your profile. > $ > > I think that a line containing something like "36pqsgbqi7kkkkn89sqrp2hyk3gxm8zv" (like install-file would print, too) should never appear in front of the user in normal operation. > > Some programmer (!) colleagues of mine actually remarked something like "what is THAT? Looks scary" when they looked at what guix prints when I install something in Guix. > > Really, printing that much noise is an usability bug. > > Arun mentioned that he wants to see that something is still happening and therefore wants something printed. I agree - but it should only print and update one line total. > > For example, if we wanted a progress monitor, that could look like this (this should include all the dependencies in the same progress display): > > $ guix package -i foobar > Installing... [20%] \ > ^ Spinner that spins, say, every time a line is added to the log file. > > And later when progress is 100%, changing to > > $ guix package -i foobar > Installation successful > $ > > I think that the detailed messages are good to have in the event that an installation fails. But even then it should just print a message like this (and here, it really should print it): > > $ guix package -i foobar > Installation failed. For more details, you can invoke "guix build --log-file `guix build -d foobar`" (without double quotes). In order to report a bug, please send a message to <bug-guix@gnu.org>. > $ > > Or it could invoke "guix build --log-file `guix build -d foobar`" on its own and just print the resulting name. > > It should NOT print the detailed messages automatically. > > So all in all I'd really like much less verbosity on the console. I actually use guix behind a wrapper script of mine that supresses all non-error messages for common cases (it redirects stdout to /dev/null) - and it's *still* pretty bad. I think that's because all the build output is printed to stderr by build.scm , regardless of whether the container printed it to stdout or stderr. Is that correct? > > Could we please make "guix package -i" use "guix build -q" to make stdout and stderr go into the log files only? > > Furthermore, I think even the guix download lines are too noisy in the successful case. Guix should really just update one line for the entire thing, downloading, building, profile updating, everything. > > The usual UNIX design, too, is that if everything works, UNIX prints nothing. As soon as something is printed my first feeling is that it's something bad (especially with 20 pages :P). And really, no one cares what the current gcc command is - as long as it works. > > If UNIX printed everything it did it would look very noisy and be very slow (printing takes time). > > I think "guix pull" is nice in this regard. It just shows a progress bar. Nothing else. Because a normal user doesn't care that now it compiles gnu/foo/bar.scm into e5y35334436743987463464363-foo/lib/afrewtew/tw/teww. > > WDYT? > > I agree to some extent. From a daily usage perspective, it is not nice. Especially looking at it from where I originally started, slackware and slackware based systems, it is too much. Simplicity is better than noise. As a developer I appreciate the verbosity, seeing exactly *why* the build failed. I don't want that for people who just want to work with Guix or GuixSD. But as a developer I want the default to be to print exactly this noise, so I must be able to override it globally or for the process I run. ^ permalink raw reply [flat|nested] 34+ messages in thread
[parent not found: <9591bf82.AEUAKjfDcSkAAAAAAAAAAAOzWv8AAAACwQwAAAAAAAW9WABZKceD@mailjet.com>]
* bug#26941: New font-build-system [not found] ` <9591bf82.AEUAKjfDcSkAAAAAAAAAAAOzWv8AAAACwQwAAAAAAAW9WABZKceD@mailjet.com> @ 2017-05-28 12:38 ` Ludovic Courtès 2017-05-28 13:15 ` Arun Isaac [not found] ` <37b2bd65.AEMAKxmsz0MAAAAAAAAAAAOzWv8AAAACwQwAAAAAAAW9WABZKs1c@mailjet.com> 0 siblings, 2 replies; 34+ messages in thread From: Ludovic Courtès @ 2017-05-28 12:38 UTC (permalink / raw) To: Arun Isaac; +Cc: 26941 Arun Isaac <arunisaac@systemreboot.net> skribis: >>> A side issue: I feel that the `install-file' procedure should print out >>> what it's doing to stdout (or some log port). Something like: >>> >>> (format #t "~a -> ~a~%" source destination) >>> >>> This would save us the trouble of implementing this log printing >>> everywhere `install-file' is called. For example, this could be very >>> useful in the 'install' phase of the font-build-sytem. WDYT? >> >> Do we really need to print something in the first place? :-) Some >> procedures in (guix build utils) do that, indeed, but I’m not sure it’s >> useful for something as simple as ‘install-file’. Thoughts? > > Yes, I think it is really important. Without the verbose output, one > will have to stare at a blank screen, guessing at what is > happening. Long verbose output feels reassuring that something is going > on. :-) Also, verbose output for `install-file' might help in debugging > correct source/destination paths. OK. I’m not entirely convinced, because I think that either the build completes and it’s easy to check that the files are where you wanted them to be, or it fails, and you get an exception. I’m not strongly opposed either, so perhaps something to consider in the next ‘core-updates’ cycle. >>> + ,@(let ((compression (resolve-module '(gnu packages compression)))) >>> + (map (match-lambda >>> + ((name package) >>> + (list name (module-ref compression package)))) >>> + `(("tar" tar) >>> + ("gzip" gzip) >>> + ("bzip2" bzip2) >>> + ("xz" xz)))))) >> >> This works, but since ‘tar’ is defined in (gnu packages base), it’s >> better to take it from there. > > Done! I have also included "unzip" because several font packages come as > zip archives. WDYT? Makes sense! > From a0bda2fc48c6d2c7809805251154c49e8be76d67 Mon Sep 17 00:00:00 2001 > From: Arun Isaac <arunisaac@systemreboot.net> > Date: Mon, 15 May 2017 20:08:57 +0530 > Subject: [PATCH 1/5] build-system: Add 'font-build-system'. > > * Makefile.am (MODULES): Add 'guix/build-system/font.scm' and > 'guix/build/font-build-system.scm'. > * guix/build-system/font.scm: New file. > * guix/build/font-build-system.scm: New file. > * doc/guix.texi (Build Systems): Add 'font-build-system'. Alright, OK for this and the following patches. Thank you! Ludo’. ^ permalink raw reply [flat|nested] 34+ messages in thread
* bug#26941: New font-build-system 2017-05-28 12:38 ` bug#26941: New font-build-system Ludovic Courtès @ 2017-05-28 13:15 ` Arun Isaac 2017-05-30 21:19 ` Ricardo Wurmus [not found] ` <37b2bd65.AEMAKxmsz0MAAAAAAAAAAAOzWv8AAAACwQwAAAAAAAW9WABZKs1c@mailjet.com> 1 sibling, 1 reply; 34+ messages in thread From: Arun Isaac @ 2017-05-28 13:15 UTC (permalink / raw) To: Ludovic Courtès; +Cc: 26941 >>>> A side issue: I feel that the `install-file' procedure should print out >>>> what it's doing to stdout (or some log port). Something like: >>>> >>>> (format #t "~a -> ~a~%" source destination) >>>> >>>> This would save us the trouble of implementing this log printing >>>> everywhere `install-file' is called. For example, this could be very >>>> useful in the 'install' phase of the font-build-sytem. WDYT? >>> >>> Do we really need to print something in the first place? :-) Some >>> procedures in (guix build utils) do that, indeed, but I’m not sure it’s >>> useful for something as simple as ‘install-file’. Thoughts? >> >> Yes, I think it is really important. Without the verbose output, one >> will have to stare at a blank screen, guessing at what is >> happening. Long verbose output feels reassuring that something is going >> on. :-) Also, verbose output for `install-file' might help in debugging >> correct source/destination paths. > > OK. I’m not entirely convinced, because I think that either the build > completes and it’s easy to check that the files are where you wanted > them to be, or it fails, and you get an exception. I’m not strongly > opposed either, so perhaps something to consider in the next > ‘core-updates’ cycle. Should I send a patch for this? >> From a0bda2fc48c6d2c7809805251154c49e8be76d67 Mon Sep 17 00:00:00 2001 >> From: Arun Isaac <arunisaac@systemreboot.net> >> Date: Mon, 15 May 2017 20:08:57 +0530 >> Subject: [PATCH 1/5] build-system: Add 'font-build-system'. >> >> * Makefile.am (MODULES): Add 'guix/build-system/font.scm' and >> 'guix/build/font-build-system.scm'. >> * guix/build-system/font.scm: New file. >> * guix/build/font-build-system.scm: New file. >> * doc/guix.texi (Build Systems): Add 'font-build-system'. > > Alright, OK for this and the following patches. I'll push these shortly, and begin work on migrating the other font packages to the new font-build-system. ^ permalink raw reply [flat|nested] 34+ messages in thread
* bug#26941: New font-build-system 2017-05-28 13:15 ` Arun Isaac @ 2017-05-30 21:19 ` Ricardo Wurmus 0 siblings, 0 replies; 34+ messages in thread From: Ricardo Wurmus @ 2017-05-30 21:19 UTC (permalink / raw) To: Arun Isaac; +Cc: 26941-done Arun Isaac <arunisaac@systemreboot.net> writes: > I'll push these shortly, and begin work on migrating the other font > packages to the new font-build-system. Since this has been pushed I’m closing this bug now. Thanks! -- Ricardo GPG: BCA6 89B6 3655 3801 C3C6 2150 197A 5888 235F ACAC https://elephly.net ^ permalink raw reply [flat|nested] 34+ messages in thread
[parent not found: <37b2bd65.AEMAKxmsz0MAAAAAAAAAAAOzWv8AAAACwQwAAAAAAAW9WABZKs1c@mailjet.com>]
* bug#26941: New font-build-system [not found] ` <37b2bd65.AEMAKxmsz0MAAAAAAAAAAAOzWv8AAAACwQwAAAAAAAW9WABZKs1c@mailjet.com> @ 2017-05-29 8:51 ` Ludovic Courtès 0 siblings, 0 replies; 34+ messages in thread From: Ludovic Courtès @ 2017-05-29 8:51 UTC (permalink / raw) To: Arun Isaac; +Cc: 26941 Arun Isaac <arunisaac@systemreboot.net> skribis: >>>>> A side issue: I feel that the `install-file' procedure should print out >>>>> what it's doing to stdout (or some log port). Something like: >>>>> >>>>> (format #t "~a -> ~a~%" source destination) >>>>> >>>>> This would save us the trouble of implementing this log printing >>>>> everywhere `install-file' is called. For example, this could be very >>>>> useful in the 'install' phase of the font-build-sytem. WDYT? >>>> >>>> Do we really need to print something in the first place? :-) Some >>>> procedures in (guix build utils) do that, indeed, but I’m not sure it’s >>>> useful for something as simple as ‘install-file’. Thoughts? >>> >>> Yes, I think it is really important. Without the verbose output, one >>> will have to stare at a blank screen, guessing at what is >>> happening. Long verbose output feels reassuring that something is going >>> on. :-) Also, verbose output for `install-file' might help in debugging >>> correct source/destination paths. >> >> OK. I’m not entirely convinced, because I think that either the build >> completes and it’s easy to check that the files are where you wanted >> them to be, or it fails, and you get an exception. I’m not strongly >> opposed either, so perhaps something to consider in the next >> ‘core-updates’ cycle. > > Should I send a patch for this? Maybe we should see if there’s support for this. If you could get a couple of “+1”s, that’d be good. :-) >>> From a0bda2fc48c6d2c7809805251154c49e8be76d67 Mon Sep 17 00:00:00 2001 >>> From: Arun Isaac <arunisaac@systemreboot.net> >>> Date: Mon, 15 May 2017 20:08:57 +0530 >>> Subject: [PATCH 1/5] build-system: Add 'font-build-system'. >>> >>> * Makefile.am (MODULES): Add 'guix/build-system/font.scm' and >>> 'guix/build/font-build-system.scm'. >>> * guix/build-system/font.scm: New file. >>> * guix/build/font-build-system.scm: New file. >>> * doc/guix.texi (Build Systems): Add 'font-build-system'. >> >> Alright, OK for this and the following patches. > > I'll push these shortly, and begin work on migrating the other font > packages to the new font-build-system. Awesome! Ludo’. ^ permalink raw reply [flat|nested] 34+ messages in thread
* bug#26941: New font-build-system 2017-05-15 15:06 bug#26941: New font-build-system Arun Isaac 2017-05-16 20:17 ` Ludovic Courtès @ 2017-06-01 13:17 ` Brendan Tildesley 2017-06-01 15:15 ` Arun Isaac 1 sibling, 1 reply; 34+ messages in thread From: Brendan Tildesley @ 2017-06-01 13:17 UTC (permalink / raw) To: 26941 Arun Isaac 於 2017-05-16 01:06 寫道: > Here is a WIP patchset creating a 'font-build-system', and packaging a > few font packages with it. I just copied the emacs-build-system and made > necessary changes. Please review and provide feedback. > > Currently, the font-build-system only installs ttf and otf files to > /share/fonts/truetype and /share/fonts/opentype respectively. It does > not install any documentation. But, do we really need to install README > files, a copy of the license, etc.? > I notice font-build-system displays this error. It may require adding glibc-utf8-locales as a dependency. starting phase `install-locale' warning: failed to install 'en_US.utf8' locale: Invalid argument ^ permalink raw reply [flat|nested] 34+ messages in thread
* bug#26941: New font-build-system 2017-06-01 13:17 ` Brendan Tildesley @ 2017-06-01 15:15 ` Arun Isaac 0 siblings, 0 replies; 34+ messages in thread From: Arun Isaac @ 2017-06-01 15:15 UTC (permalink / raw) To: Brendan Tildesley; +Cc: 26941 > I notice font-build-system displays this error. It may require adding > glibc-utf8-locales as a dependency. > > starting phase `install-locale' > warning: failed to install 'en_US.utf8' locale: Invalid argument While building which package do you get this error? ^ permalink raw reply [flat|nested] 34+ messages in thread
end of thread, other threads:[~2017-06-17 20:16 UTC | newest] Thread overview: 34+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2017-05-15 15:06 bug#26941: New font-build-system Arun Isaac 2017-05-16 20:17 ` Ludovic Courtès 2017-05-19 20:41 ` Arun Isaac [not found] ` <fcac084e.AEEAKxWCyNIAAAAAAAAAAAOzWv8AAAACwQwAAAAAAAW9WABZH1iD@mailjet.com> 2017-05-23 11:33 ` Ludovic Courtès 2017-05-27 18:37 ` Arun Isaac 2017-05-28 18:44 ` User-Friendlyness of Guix and non-scaryness, printing messages Danny Milosavljevic 2017-05-28 19:01 ` Danny Milosavljevic 2017-05-28 20:35 ` Danny Milosavljevic 2017-05-28 20:58 ` Danny Milosavljevic 2017-05-30 15:11 ` Ludovic Courtès 2017-05-28 19:20 ` Leo Famulari 2017-05-28 19:40 ` Danny Milosavljevic 2017-05-28 19:47 ` Leo Famulari 2017-05-28 21:12 ` Ludovic Courtès 2017-05-31 22:26 ` Danny Milosavljevic 2017-06-01 21:41 ` Ludovic Courtès 2017-05-30 8:24 ` Ricardo Wurmus 2017-06-16 11:42 ` Danny Milosavljevic 2017-06-17 20:16 ` Ludovic Courtès 2017-05-30 1:47 ` "guix system" summary output? Danny Milosavljevic 2017-05-30 11:05 ` Danny Milosavljevic 2017-05-30 15:47 ` Ludovic Courtès 2017-05-30 8:17 ` User-Friendlyness of Guix and non-scaryness, printing messages Roel Janssen 2017-05-30 13:56 ` Arun Isaac 2017-05-30 14:32 ` Christopher Allan Webber 2017-05-30 15:58 ` Arun Isaac 2017-05-30 15:13 ` Ludovic Courtès 2017-05-28 19:30 ` ng0 [not found] ` <9591bf82.AEUAKjfDcSkAAAAAAAAAAAOzWv8AAAACwQwAAAAAAAW9WABZKceD@mailjet.com> 2017-05-28 12:38 ` bug#26941: New font-build-system Ludovic Courtès 2017-05-28 13:15 ` Arun Isaac 2017-05-30 21:19 ` Ricardo Wurmus [not found] ` <37b2bd65.AEMAKxmsz0MAAAAAAAAAAAOzWv8AAAACwQwAAAAAAAW9WABZKs1c@mailjet.com> 2017-05-29 8:51 ` Ludovic Courtès 2017-06-01 13:17 ` Brendan Tildesley 2017-06-01 15:15 ` Arun Isaac
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.