Subject: Re: [bug#30572] [PATCH 1/7] gnu: bootstrap: Add trivial packages for bash, mkdir, tar, and xz.

From: Chris Marusich <[email-masked]>
Date: Wed, 21 Mar 2018 05:19:07 +0100

Danny Milosavljevic <[email-masked]> writes:

> Hi Chris,
>
> On Tue, 20 Mar 2018 04:13:41 +0100
> Chris Marusich <[email-masked]> wrote:
>
>> module.  I don't know how that will interact with the rest of Guix; it
>> seems safer to just avoid adding that and accept this small discrepancy
>> in the bootstrap packages.  It is simpler.
>
> It would still be possible to do it using module-ref, but I'd advise
> against it.  How about just passing an explicit license to the
> bootstrap-binary procedure?

Yes, that sounds like the right way to me.

>>For example, the license of the
>>"bootstrap-binaries" package (i.e., the %bootstrap-coreutils&co)
>> defined to be gpl3+, even though it contains xz, which actually uses
>> gpl2+ and lgpl2.1+.
>
> Yeah, I don't like that either.
>
>>  Since (I suspect) these packages are intended for
>> internal use, and since the canonical versions of these packages do have
>> correct sources, licenses, and so forth, I'm not so sure we need to be
>> very concerned about minor discrepancies like this.
>
> Yeah, it's just a nitpick.  I'm fine with it being #f or with it being
> a parameter to bootstrap-binary.  But (license license:gpl3+) when it's
> not actually gpl3 is where I draw the line.  Wrong license like this is
> never going to be flagged again except by adversaries.

I understand.  It isn't hard to fix, so here's a new patch that adds
correct licenses.  How does it look?

-- 
Chris
From 5398d4d98decd9e74dbf557203c6523107ce559b Mon Sep 17 00:00:00 2001
From: Chris Marusich <[email-masked]>
Date: Sun, 11 Mar 2018 01:13:01 +0100
Subject: [PATCH 1/7] gnu: bootstrap: Add trivial packages for bash, mkdir,
 tar, and xz.

* gnu/packages/bootstrap.scm (bootstrap-binary): New procedure.
  (%bootstrap-bash, %bootstrap-mkdir, %bootstrap-tar, %bootstrap-xz):
  Use it to create these new packages, and export them.
---
 gnu/packages/bootstrap.scm | 34 ++++++++++++++++++++++++++++++++++
 1 file changed, 34 insertions(+)

diff --git a/gnu/packages/bootstrap.scm b/gnu/packages/bootstrap.scm
index 27f2053c4..1480880ae 100644
--- a/gnu/packages/bootstrap.scm
+++ b/gnu/packages/bootstrap.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <[email-masked]>
 ;;; Copyright © 2014, 2015 Mark H Weaver <[email-masked]>
 ;;; Copyright © 2017 Efraim Flashner <[email-masked]>
+;;; Copyright © 2018 Chris Marusich <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -43,6 +44,10 @@
             bootstrap-guile-origin
 
             %bootstrap-guile
+            %bootstrap-bash
+            %bootstrap-mkdir
+            %bootstrap-tar
+            %bootstrap-xz
             %bootstrap-coreutils&co
             %bootstrap-binutils
             %bootstrap-gcc
@@ -345,6 +350,35 @@ $out/bin/guile --version~%"
      (home-page #f)
      (license lgpl3+))))
 
+(define (bootstrap-binary program-name license)
+  (package
+    (name (string-append program-name "-bootstrap"))
+    ;; The version may differ depending on the program.
+    (version "unknown")
+    (source #f)
+    (build-system trivial-build-system)
+    (arguments
+     `(#:guile ,%bootstrap-guile
+       #:builder (let ((out (assoc-ref %outputs "out"))
+                       (program (assoc-ref %build-inputs ,program-name)))
+                   (mkdir out)
+                   (mkdir (string-append out "/bin"))
+                   (symlink program (string-append out "/bin/" ,program-name)))))
+    (inputs `((,program-name ,(search-bootstrap-binary program-name (%current-system)))))
+    (description (string-append "The bootstrap " program-name "."))
+    (synopsis (string-append "The bootstrap " program-name "."))
+    (license license)
+    (home-page #f)))
+
+;; These trivial packages provide individual binaries that are also included
+;; in %bootstrap-coreutils&co.  However, these packages are more minimal than
+;; %bootstrap-coreutils&co, and they do not require network access to build
+;; because these specific binaries are included in the Guix source tree.
+(define %bootstrap-bash (bootstrap-binary "bash" gpl3+))
+(define %bootstrap-mkdir (bootstrap-binary "mkdir" gpl3+))
+(define %bootstrap-tar (bootstrap-binary "tar" gpl3+))
+(define %bootstrap-xz (bootstrap-binary "xz" (list gpl2+ lgpl2.1+)))
+
 (define %bootstrap-coreutils&co
   (package-from-tarball "bootstrap-binaries"
                         (lambda (system)
-- 
2.15.1