~ruther/guix-local

87c8b92f50c852de05eab2a0a50217adf8897c65 — Ludovic Courtès 11 years ago b479c3d
gnu: commencement: Make UTF-8 locales available right after 'guile-final'.

In <http://hydra.gnu.org/build/263170>, we see:

   153: 12 [patch-usr-bin-file #:native-inputs #f ...]

  [...]

     ?: 1 [regexp-exec # ...]
  In ice-9/boot-9.scm:
   106: 0 [#<procedure 1998ec0 at ice-9/boot-9.scm:97:6 (thrown-k . args)> encoding-error ...]

  ice-9/boot-9.scm:106:20: In procedure #<procedure 1998ec0 at ice-9/boot-9.scm:97:6 (thrown-k . args)>:
  ice-9/boot-9.scm:106:20: Throw to key `encoding-error' with args `("scm_to_stringn" "cannot convert narrow string to output locale" 84 #f #f)'.

This is due to that fact that 'patch-/usr/bin/file' read a line
containing a byte sequence with bytes > 127 (namely a copyright sign.)
But this build was running with a C locale, and so those bytes cannot be
represented in that locale, hence this error.

This commit makes the UTF-8 locales available earlier such that
everything can be represented in locale encoding.

* gnu/packages/commencement.scm (glibc-utf8-locales-final): Move
  earlier; change "gzip" input to GZIP built with %BOOT4-INPUTS.
  (%boot5-inputs): Define to %BOOT4-INPUTS plus
  GLIBC-UTF8-LOCALES-FINAL.
  (gnu-make-final, coreutils-final, grep-final): Use it instead of
  %BOOT4-INPUTS.
  (gzip-final): Remove.
  (%boot6-inputs): New variable.
  (%final-inputs): Use it instead of %BOOT5-INPUTS.  Don't rely on
  GZIP-FINAL.
1 files changed, 26 insertions(+), 17 deletions(-)

M gnu/packages/commencement.scm
M gnu/packages/commencement.scm => gnu/packages/commencement.scm +26 -17
@@ 616,12 616,31 @@ store.")
                                 (current-source-location)
                                 #:guile %bootstrap-guile)))

(define glibc-utf8-locales-final
  ;; Now that we have GUILE-FINAL, build the UTF-8 locales.  They are needed
  ;; by the build processes afterwards so their 'scm_to_locale_string' works
  ;; with the full range of Unicode codepoints (remember
  ;; 'scm_to_locale_string' is called every time a string is passed to a C
  ;; function.)
  (package
    (inherit glibc-utf8-locales)
    (inputs `(("glibc" ,glibc-final)
              ("gzip"
               ,(package-with-explicit-inputs gzip %boot4-inputs
                                              (current-source-location)
                                              #:guile %bootstrap-guile))))))

(define %boot5-inputs
  ;; Now with UTF-8 locale.
  `(("locales" ,glibc-utf8-locales-final)
    ,@%boot4-inputs))

(define gnu-make-final
  ;; The final GNU Make, which uses the final Guile.
  (package-with-bootstrap-guile
   (package-with-explicit-inputs gnu-make
                                 `(("guile" ,guile-final)
                                   ,@%boot4-inputs)
                                   ,@%boot5-inputs)
                                 (current-source-location))))

(define-public ld-wrapper


@@ 638,7 657,7 @@ store.")
  ;; Findutils, keep a reference to the Coreutils they were built with.
  (package-with-bootstrap-guile
   (package-with-explicit-inputs coreutils
                                 %boot4-inputs
                                 %boot5-inputs
                                 (current-source-location)

                                 ;; Use the final Guile, linked against the


@@ 652,25 671,15 @@ store.")
  ;; built before gzip.
  (package-with-bootstrap-guile
   (package-with-explicit-inputs grep
                                 %boot4-inputs
                                 %boot5-inputs
                                 (current-source-location)
                                 #:guile guile-final)))

(define %boot5-inputs
(define %boot6-inputs
  ;; Now use the final Coreutils.
  `(("coreutils" ,coreutils-final)
    ("grep" ,grep-final)
    ,@%boot4-inputs))

(define gzip-final
  (package-with-explicit-inputs gzip %boot5-inputs
                                (current-source-location)))

(define glibc-utf8-locales-final
  (package
    (inherit glibc-utf8-locales)
    (inputs `(("glibc" ,glibc-final)
              ("gzip" ,gzip-final)))))
    ,@%boot5-inputs))

(define-public %final-inputs
  ;; Final derivations used as implicit inputs by 'gnu-build-system'.  We


@@ 678,12 687,13 @@ store.")
  ;; used for origins that have patches, thereby avoiding circular
  ;; dependencies.
  (let ((finalize (compose package-with-bootstrap-guile
                           (cut package-with-explicit-inputs <> %boot5-inputs
                           (cut package-with-explicit-inputs <> %boot6-inputs
                                (current-source-location)))))
    `(,@(map (match-lambda
              ((name package)
               (list name (finalize package))))
             `(("tar" ,tar)
               ("gzip" ,gzip)
               ("bzip2" ,bzip2)
               ("xz" ,xz)
               ("file" ,file)


@@ 692,7 702,6 @@ store.")
               ("sed" ,sed)
               ("findutils" ,findutils)
               ("gawk" ,gawk)))
      ("gzip" ,gzip-final)
      ("grep" ,grep-final)
      ("coreutils" ,coreutils-final)
      ("make" ,gnu-make-final)