unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
* 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; 11+ 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] 11+ 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; 11+ 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] 11+ 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; 11+ 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] 11+ messages in thread

* 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; 11+ 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] 11+ messages in thread

* bug#26941: New font-build-system
  2017-05-23 11:33     ` Ludovic Courtès
@ 2017-05-27 18:37       ` Arun Isaac
       [not found]       ` <9591bf82.AEUAKjfDcSkAAAAAAAAAAAOzWv8AAAACwQwAAAAAAAW9WABZKceD@mailjet.com>
  1 sibling, 0 replies; 11+ 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] 11+ messages in thread

* 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; 11+ 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] 11+ messages in thread

* bug#26941: New font-build-system
  2017-05-28 12:38         ` 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; 11+ 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] 11+ messages in thread

* bug#26941: New font-build-system
       [not found]           ` <37b2bd65.AEMAKxmsz0MAAAAAAAAAAAOzWv8AAAACwQwAAAAAAAW9WABZKs1c@mailjet.com>
@ 2017-05-29  8:51             ` Ludovic Courtès
  0 siblings, 0 replies; 11+ 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] 11+ 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; 11+ 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] 11+ 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; 11+ 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] 11+ 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; 11+ 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] 11+ messages in thread

end of thread, other threads:[~2017-06-01 15:16 UTC | newest]

Thread overview: 11+ 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
     [not found]       ` <9591bf82.AEUAKjfDcSkAAAAAAAAAAAOzWv8AAAACwQwAAAAAAAW9WABZKceD@mailjet.com>
2017-05-28 12:38         ` 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 public inbox

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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).