From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Subject: [PATCH 1/2] gnu: glibc: Honor 'GUIX_LOCPATH'. Date: Thu, 1 Oct 2015 23:58:35 +0200 Message-ID: <1443736716-8578-2-git-send-email-ludo@gnu.org> References: <1443736716-8578-1-git-send-email-ludo@gnu.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------2.5.0" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:36534) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZhlsF-0002Gf-KA for guix-devel@gnu.org; Thu, 01 Oct 2015 17:58:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZhlsD-00028a-1f for guix-devel@gnu.org; Thu, 01 Oct 2015 17:58:47 -0400 In-Reply-To: <1443736716-8578-1-git-send-email-ludo@gnu.org> In-Reply-To: References: List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org Sender: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org To: guix-devel@gnu.org Cc: beffa@ieee.org This is a multi-part message in MIME format. --------------2.5.0 Content-Type: text/plain; charset=UTF-8; format=fixed Content-Transfer-Encoding: 8bit * gnu/packages/patches/glibc-guix-locpath.patch: New file. * gnu-system.am (dist_patch_DATA): Add it. * gnu/packages/base.scm (glibc)[source]: Use it. [native-search-paths]: Use 'GUIX_LOCPATH' instead of 'LOCPATH'. * doc/guix.texi (Application Setup): Introduce the term "foreign distro". Document 'GUIX_LOCPATH'. --- doc/guix.texi | 23 +++++++++++----- gnu-system.am | 1 + gnu/packages/base.scm | 7 +++-- gnu/packages/patches/glibc-guix-locpath.patch | 38 +++++++++++++++++++++++++++ 4 files changed, 60 insertions(+), 9 deletions(-) create mode 100644 gnu/packages/patches/glibc-guix-locpath.patch --------------2.5.0 Content-Type: text/x-patch; name="0001-gnu-glibc-Honor-GUIX_LOCPATH.patch" Content-Transfer-Encoding: 8bit Content-Disposition: attachment; filename="0001-gnu-glibc-Honor-GUIX_LOCPATH.patch" diff --git a/doc/guix.texi b/doc/guix.texi index 68ee451..1ad4229 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -933,24 +933,24 @@ daemons on the same machine. @node Application Setup @section Application Setup -When using Guix on top of GNU/Linux distribution other than GuixSD, a -few additional steps are needed to get everything in place. Here are -some of them. +When using Guix on top of GNU/Linux distribution other than GuixSD---a +so-called @dfn{foreign distro}---a few additional steps are needed to +get everything in place. Here are some of them. @subsection Locales @anchor{locales-and-locpath} @cindex locales, when not on GuixSD @vindex LOCPATH +@vindex GUIX_LOCPATH Packages installed @i{via} Guix will not use the host system's locale data. Instead, you must first install one of the locale packages -available with Guix and then define the @code{LOCPATH} environment -variable (@pxref{Locale Names, @code{LOCPATH},, libc, The GNU C Library -Reference Manual}): +available with Guix and then define the @code{GUIX_LOCPATH} environment +variable: @example $ guix package -i glibc-locales -$ export LOCPATH=$HOME/.guix-profile/lib/locale +$ export GUIX_LOCPATH=$HOME/.guix-profile/lib/locale @end example Note that the @code{glibc-locales} package contains data for all the @@ -958,6 +958,15 @@ locales supported by the GNU@tie{}libc and weighs in at around 110@tie{}MiB. Alternately, the @code{glibc-utf8-locales} is smaller but limited to a few UTF-8 locales. +The @code{GUIX_LOCPATH} variable plays the exact same role as +@code{LOCPATH} (@pxref{Locale Names, @code{LOCPATH},, libc, The GNU C +Library Reference Manual}). However, since it is honored only by Guix's +libc, and not by the libc provided by foreign distros, using +@code{GUIX_LOCPATH} allows you to make sure the the foreign distro's +programs will not end up loading incompatible locale data. This is +important because the locale data format used by different libc versions +may be incompatible. + @subsection X11 Fonts The majority of graphical applications use Fontconfig to locate and diff --git a/gnu-system.am b/gnu-system.am index f2f7e17..aba8f8d 100644 --- a/gnu-system.am +++ b/gnu-system.am @@ -469,6 +469,7 @@ dist_patch_DATA = \ gnu/packages/patches/glib-tests-timer.patch \ gnu/packages/patches/glib-tests-gapplication.patch \ gnu/packages/patches/glibc-bootstrap-system.patch \ + gnu/packages/patches/glibc-guix-locpath.patch \ gnu/packages/patches/glibc-ldd-x86_64.patch \ gnu/packages/patches/glibc-locales.patch \ gnu/packages/patches/glibc-o-largefile.patch \ diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm index a7d9459..337fdae 100644 --- a/gnu/packages/base.scm +++ b/gnu/packages/base.scm @@ -476,6 +476,7 @@ store.") (modules '((guix build utils))) (patches (map search-patch '("glibc-ldd-x86_64.patch" + "glibc-guix-locpath.patch" "glibc-o-largefile.patch"))))) (build-system gnu-build-system) @@ -606,9 +607,11 @@ store.") (native-search-paths ;; Search path for packages that provide locale data. This is useful - ;; primarily in build environments. + ;; primarily in build environments. Use 'GUIX_LOCPATH' rather than + ;; 'LOCPATH' to avoid interference with the host system's libc on foreign + ;; distros. (list (search-path-specification - (variable "LOCPATH") + (variable "GUIX_LOCPATH") (files '("lib/locale"))))) (synopsis "The GNU C Library") diff --git a/gnu/packages/patches/glibc-guix-locpath.patch b/gnu/packages/patches/glibc-guix-locpath.patch new file mode 100644 index 0000000..2a814a3 --- /dev/null +++ b/gnu/packages/patches/glibc-guix-locpath.patch @@ -0,0 +1,38 @@ +Honor a special 'GUIX_LOCPATH' environment variable. + +This is most useful when using Guix on top of another distro, which uses an +different libc version with incompatible locale data. In this case, setting +'GUIX_LOCPATH' rather than 'LOCPATH' allows users to tell Guix's libc where to +look for its locale data without breaking programs that use the other libc. + +See for +some background information. + +--- a/locale/newlocale.c ++++ b/locale/newlocale.c +@@ -102,7 +102,9 @@ __newlocale (int category_mask, const char *locale, __locale_t base) + locale_path = NULL; + locale_path_len = 0; + +- locpath_var = getenv ("LOCPATH"); ++ locpath_var = getenv ("GUIX_LOCPATH"); ++ if (locpath_var == NULL || locpath_var[0] == '\0') ++ locpath_var = getenv ("LOCPATH"); + if (locpath_var != NULL && locpath_var[0] != '\0') + { + if (__argz_create_sep (locpath_var, ':', +diff --git a/locale/setlocale.c b/locale/setlocale.c +index ead030d..ca2337d 100644 +--- a/locale/setlocale.c ++++ b/locale/setlocale.c +@@ -251,7 +251,9 @@ setlocale (int category, const char *locale) + locale_path = NULL; + locale_path_len = 0; + +- locpath_var = getenv ("LOCPATH"); ++ locpath_var = getenv ("GUIX_LOCPATH"); ++ if (locpath_var == NULL || locpath_var[0] == '\0') ++ locpath_var = getenv ("LOCPATH"); + if (locpath_var != NULL && locpath_var[0] != '\0') + { + if (__argz_create_sep (locpath_var, ':', --------------2.5.0--