grafts: Run with a UTF-8 locale.
Fixes <https://issues.guix.gnu.org/55968>. Reported by Maxime Devos <maximedevos@telenet.be>. * guix/grafts.scm (%graft-with-utf8-locale?): New parameter. (graft-derivation/shallow)[glibc-locales, set-utf8-locale]: New variables. [build]: Use 'set-utf8-locale'. * tests/gexp.scm, tests/grafts.scm, tests/packages.scm: Set '%graft-with-utf8-locale?' to #f.
This commit is contained in:
		
							parent
							
								
									8c0c223fab
								
							
						
					
					
						commit
						19206eee69
					
				
					 4 changed files with 34 additions and 2 deletions
				
			
		|  | @ -40,7 +40,9 @@ | |||
|             graft-replacement-output | ||||
| 
 | ||||
|             graft-derivation | ||||
|             graft-derivation/shallow) | ||||
|             graft-derivation/shallow | ||||
| 
 | ||||
|             %graft-with-utf8-locale?) | ||||
|   #:re-export (%graft?                            ;for backward compatibility | ||||
|                without-grafting | ||||
|                set-grafting | ||||
|  | @ -79,6 +81,12 @@ | |||
|     (($ <graft> (? string? item)) | ||||
|      item))) | ||||
| 
 | ||||
| (define %graft-with-utf8-locale? | ||||
|   ;; Whether to install a UTF-8 locale for grafting.  This parameter exists | ||||
|   ;; for the sole purpose of being able to run tests without having to build | ||||
|   ;; 'glibc-utf8-locales'. | ||||
|   (make-parameter #t)) | ||||
| 
 | ||||
| (define* (graft-derivation/shallow drv grafts | ||||
|                                    #:key | ||||
|                                    (name (derivation-name drv)) | ||||
|  | @ -88,6 +96,10 @@ | |||
|   "Return a derivation called NAME, which applies GRAFTS to the specified | ||||
| OUTPUTS of DRV.  This procedure performs \"shallow\" grafting in that GRAFTS | ||||
| are not recursively applied to dependencies of DRV." | ||||
|   (define glibc-locales | ||||
|     (module-ref (resolve-interface '(gnu packages commencement)) | ||||
|                 'glibc-utf8-locales-final)) | ||||
| 
 | ||||
|   (define mapping | ||||
|     ;; List of store item pairs. | ||||
|     (map (lambda (graft) | ||||
|  | @ -98,6 +110,15 @@ are not recursively applied to dependencies of DRV." | |||
|                        (graft-replacement-output graft))))) | ||||
|          grafts)) | ||||
| 
 | ||||
|   (define set-utf8-locale | ||||
|     (and (%graft-with-utf8-locale?) | ||||
|          #~(begin | ||||
|              ;; Let Guile interpret file names as UTF-8. | ||||
|              (setenv "GUIX_LOCPATH" | ||||
|                      #+(file-append glibc-locales "/lib/locale")) | ||||
|              (setlocale LC_ALL "en_US.utf8")))) | ||||
| 
 | ||||
| 
 | ||||
|   (define build | ||||
|     (with-imported-modules '((guix build graft) | ||||
|                              (guix build utils) | ||||
|  | @ -111,6 +132,7 @@ are not recursively applied to dependencies of DRV." | |||
|           (define %outputs | ||||
|             (ungexp (outputs->gexp outputs))) | ||||
| 
 | ||||
|           #+set-utf8-locale | ||||
|           (let* ((old-outputs '(ungexp | ||||
|                                 (map (lambda (output) | ||||
|                                        (gexp ((ungexp output) | ||||
|  |  | |||
|  | @ -21,6 +21,7 @@ | |||
|   #:use-module (guix store) | ||||
|   #:use-module (guix monads) | ||||
|   #:use-module (guix gexp) | ||||
|   #:use-module ((guix grafts) #:select (%graft-with-utf8-locale?)) | ||||
|   #:use-module (guix derivations) | ||||
|   #:use-module (guix packages) | ||||
|   #:use-module (guix build-system trivial) | ||||
|  | @ -49,6 +50,9 @@ | |||
| ;; Globally disable grafts because they can trigger early builds. | ||||
| (%graft? #f) | ||||
| 
 | ||||
| ;; When grafting, do not add dependency on 'glibc-utf8-locales'. | ||||
| (%graft-with-utf8-locale? #f) | ||||
| 
 | ||||
| ;; For white-box testing. | ||||
| (define (gexp-inputs x) | ||||
|   ((@@ (guix gexp) gexp-inputs) x)) | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2014-2019, 2022 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2021 Mark H Weaver <mhw@netris.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
|  | @ -35,6 +35,9 @@ | |||
| (define %store | ||||
|   (open-connection-for-tests)) | ||||
| 
 | ||||
| ;; When grafting, do not add dependency on 'glibc-utf8-locales'. | ||||
| (%graft-with-utf8-locale? #f) | ||||
| 
 | ||||
| (define (bootstrap-binary name) | ||||
|   (let ((bin (search-bootstrap-binary name (%current-system)))) | ||||
|     (and %store | ||||
|  |  | |||
|  | @ -75,6 +75,9 @@ | |||
| ;; can trigger builds early.) | ||||
| (%graft? #f) | ||||
| 
 | ||||
| ;; When grafting, do not add dependency on 'glibc-utf8-locales'. | ||||
| (%graft-with-utf8-locale? #f) | ||||
| 
 | ||||
|  | ||||
| (test-begin "packages") | ||||
| 
 | ||||
|  |  | |||
		Reference in a new issue