summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--guix/profiles.scm25
-rw-r--r--guix/scripts/environment.scm3
-rw-r--r--guix/scripts/package.scm3
-rw-r--r--tests/packages.scm3
-rw-r--r--tests/profiles.scm18
5 files changed, 35 insertions, 17 deletions
diff --git a/guix/profiles.scm b/guix/profiles.scm
index 82d8b33c09..e7707b6543 100644
--- a/guix/profiles.scm
+++ b/guix/profiles.scm
@@ -919,10 +919,14 @@ files for the truetype fonts of the @var{manifest} entries."
 (define* (profile-derivation manifest
                              #:key
                              (hooks %default-profile-hooks)
+                             (locales? #t)
                              system)
   "Return a derivation that builds a profile (aka. 'user environment') with
 the given MANIFEST.  The profile includes additional derivations returned by
-the monadic procedures listed in HOOKS--such as an Info 'dir' file, etc."
+the monadic procedures listed in HOOKS--such as an Info 'dir' file, etc.
+
+When LOCALES? is true, the build is performed under a UTF-8 locale; this adds
+a dependency on the 'glibc-utf8-locales' package."
   (mlet %store-monad ((system (if system
                                   (return system)
                                   (current-system)))
@@ -943,6 +947,15 @@ the monadic procedures listed in HOOKS--such as an Info 'dir' file, etc."
       (module-ref (resolve-interface '(gnu packages base))
                   'glibc-utf8-locales))
 
+    (define set-utf8-locale
+      ;; Some file names (e.g., in 'nss-certs') are UTF-8 encoded so
+      ;; install a UTF-8 locale.
+      #~(begin
+          (setenv "LOCPATH"
+                  #$(file-append glibc-utf8-locales "/lib/locale/"
+                                 (package-version glibc-utf8-locales)))
+          (setlocale LC_ALL "en_US.utf8")))
+
     (define builder
       (with-imported-modules '((guix build profiles)
                                (guix build union)
@@ -957,12 +970,7 @@ the monadic procedures listed in HOOKS--such as an Info 'dir' file, etc."
             (setvbuf (current-output-port) _IOLBF)
             (setvbuf (current-error-port) _IOLBF)
 
-            ;; Some file names (e.g., in 'nss-certs') are UTF-8 encoded so
-            ;; install a UTF-8 locale.
-            (setenv "LOCPATH"
-                    (string-append #+glibc-utf8-locales "/lib/locale/"
-                                   #+(package-version glibc-utf8-locales)))
-            (setlocale LC_ALL "en_US.utf8")
+            #+(if locales? set-utf8-locale #t)
 
             (define search-paths
               ;; Search paths of MANIFEST's packages, converted back to their
@@ -1110,7 +1118,8 @@ case when generations have been deleted (there are \"holes\")."
   "Link GENERATION, a string, to the empty profile.  An error is raised if
 that fails."
   (let* ((drv  (run-with-store store
-                 (profile-derivation (manifest '()))))
+                 (profile-derivation (manifest '())
+                                     #:locales? #f)))
          (prof (derivation->output-path drv "out")))
     (build-derivations store (list drv))
     (switch-symlinks generation prof)))
diff --git a/guix/scripts/environment.scm b/guix/scripts/environment.scm
index 6dea67ca22..7201d98fea 100644
--- a/guix/scripts/environment.scm
+++ b/guix/scripts/environment.scm
@@ -323,7 +323,8 @@ profile."
                       #:system system
                       #:hooks (if bootstrap?
                                   '()
-                                  %default-profile-hooks)))
+                                  %default-profile-hooks)
+                      #:locales? (not bootstrap?)))
 
 (define requisites* (store-lift requisites))
 
diff --git a/guix/scripts/package.scm b/guix/scripts/package.scm
index 96a22f6fab..90e7fa2298 100644
--- a/guix/scripts/package.scm
+++ b/guix/scripts/package.scm
@@ -200,7 +200,8 @@ specified in MANIFEST, a manifest object."
                      (profile-derivation manifest
                                          #:hooks (if bootstrap?
                                                      '()
-                                                     %default-profile-hooks))))
+                                                     %default-profile-hooks)
+                                         #:locales? (not bootstrap?))))
          (prof     (derivation->output-path prof-drv)))
     (show-what-to-build store (list prof-drv)
                         #:use-substitutes? use-substitutes?
diff --git a/tests/packages.scm b/tests/packages.scm
index 47e76b53e9..247f75cc43 100644
--- a/tests/packages.scm
+++ b/tests/packages.scm
@@ -968,7 +968,8 @@
                  (profile-derivation
                   (manifest (map package->manifest-entry
                                  (list p1 p2)))
-                  #:hooks '())
+                  #:hooks '()
+                  #:locales? #f)
                  #:guile-for-build (%guile-for-build))))
     (build-derivations %store (list prof))
     (string-match (format #f "^export XML_CATALOG_FILES=\"~a/xml/+bar/baz/catalog\\.xml\"\n"
diff --git a/tests/profiles.scm b/tests/profiles.scm
index f9c2f5499e..5536364889 100644
--- a/tests/profiles.scm
+++ b/tests/profiles.scm
@@ -195,7 +195,8 @@
       ((entry ->   (package->manifest-entry %bootstrap-guile))
        (guile      (package->derivation %bootstrap-guile))
        (drv        (profile-derivation (manifest (list entry))
-                                       #:hooks '()))
+                                       #:hooks '()
+                                       #:locales? #f))
        (profile -> (derivation->output-path drv))
        (bindir ->  (string-append profile "/bin"))
        (_          (built-derivations (list drv))))
@@ -207,7 +208,8 @@
   (mlet* %store-monad
       ((entry ->   (package->manifest-entry packages:glibc "debug"))
        (drv        (profile-derivation (manifest (list entry))
-                                       #:hooks '())))
+                                       #:hooks '()
+                                       #:locales? #f)))
     (return (derivation-inputs drv))))
 
 (test-assert "package->manifest-entry defaults to \"out\""
@@ -228,7 +230,8 @@
                       (package-native-search-paths packages:guile-2.0))))
        (entry ->   (package->manifest-entry guile))
        (drv        (profile-derivation (manifest (list entry))
-                                       #:hooks '()))
+                                       #:hooks '()
+                                       #:locales? #f))
        (profile -> (derivation->output-path drv)))
     (mbegin %store-monad
       (built-derivations (list drv))
@@ -259,7 +262,8 @@
                       (package-native-search-paths packages:guile-2.0))))
        (entry ->   (package->manifest-entry guile))
        (drv        (profile-derivation (manifest (list entry))
-                                       #:hooks '()))
+                                       #:hooks '()
+                                       #:locales? #f))
        (profile -> (derivation->output-path drv)))
     (mbegin %store-monad
       (built-derivations (list drv))
@@ -293,7 +297,8 @@
                               (display "foo!" port))))))))
        (entry ->   (package->manifest-entry thing))
        (drv        (profile-derivation (manifest (list entry))
-                                       #:hooks '()))
+                                       #:hooks '()
+                                       #:locales? #f))
        (profile -> (derivation->output-path drv)))
     (mbegin %store-monad
       (built-derivations (list drv))
@@ -321,7 +326,8 @@
                               (display "foo!" port))))))))
        (entry ->   (package->manifest-entry thing))
        (drv        (profile-derivation (manifest (list entry))
-                                       #:hooks '()))
+                                       #:hooks '()
+                                       #:locales? #f))
        (profile -> (derivation->output-path drv)))
     (mbegin %store-monad
       (built-derivations (list drv))