1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-20 11:40:18 +02:00

Install the current locale if GUILE_INSTALL_LOCALE is nonzero.

* libguile/guile.c (get_integer_from_environment)
  (should_install_locale): New functions.
  (main): Add `setlocale' call.

* doc/ref/guile-invoke.texi (Environment Variables): Add documentation.
This commit is contained in:
Ludovic Courtès 2011-11-22 12:11:48 +01:00 committed by Andy Wingo
parent 1b787ef9ec
commit 7f893030ab
2 changed files with 56 additions and 3 deletions

View file

@ -1,6 +1,6 @@
@c -*-texinfo-*- @c -*-texinfo-*-
@c This is part of the GNU Guile Reference Manual. @c This is part of the GNU Guile Reference Manual.
@c Copyright (C) 1996, 1997, 2000, 2001, 2002, 2003, 2004, 2005, 2010, 2011 @c Copyright (C) 1996, 1997, 2000, 2001, 2002, 2003, 2004, 2005, 2010, 2011, 2013
@c Free Software Foundation, Inc. @c Free Software Foundation, Inc.
@c See the file guile.texi for copying conditions. @c See the file guile.texi for copying conditions.
@ -291,6 +291,22 @@ This variable names the file that holds the Guile REPL command history.
You can specify a different history file by setting this environment You can specify a different history file by setting this environment
variable. By default, the history file is @file{$HOME/.guile_history}. variable. By default, the history file is @file{$HOME/.guile_history}.
@item GUILE_INSTALL_LOCALE
@vindex GUILE_INSTALL_LOCALE
This is a flag that can be used to tell Guile whether or not to install
the current locale at startup, via a call to @code{(setlocale LC_ALL
"")}. @xref{Locales}, for more information on locales.
You may explicitly indicate that you do not want to install
the locale by setting @env{GUILE_INSTALL_LOCALE} to @code{0}, or
explicitly enable it by setting the variable to @code{1}.
Usually, installing the current locale is the right thing to do. It
allows Guile to correctly parse and print strings with non-ASCII
characters. However, for compatibility with previous Guile 2.0
releases, this option is off by default. The next stable release series
of Guile (the 2.2 series) will install locales by default.
@item GUILE_LOAD_COMPILED_PATH @item GUILE_LOAD_COMPILED_PATH
@vindex GUILE_LOAD_COMPILED_PATH @vindex GUILE_LOAD_COMPILED_PATH
This variable may be used to augment the path that is searched for This variable may be used to augment the path that is searched for

View file

@ -1,5 +1,6 @@
/* Copyright (C) 1996,1997,2000,2001, 2006, 2008, 2011 Free Software Foundation, Inc. /* Copyright (C) 1996, 1997, 2000, 2001, 2006, 2008,
* * 2011, 2013 Free Software Foundation, Inc.
*
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License * modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; either version 3 of * as published by the Free Software Foundation; either version 3 of
@ -36,6 +37,7 @@
#include <libguile/scmconfig.h> #include <libguile/scmconfig.h>
#endif #endif
#include <ltdl.h> #include <ltdl.h>
#include <locale.h>
#ifdef HAVE_WINSOCK2_H #ifdef HAVE_WINSOCK2_H
#include <winsock2.h> #include <winsock2.h>
@ -64,9 +66,44 @@ inner_main (void *closure SCM_UNUSED, int argc, char **argv)
#endif /* __MINGW32__ */ #endif /* __MINGW32__ */
} }
static int
get_integer_from_environment (const char *var, int def)
{
char *end = 0;
char *val = getenv (var);
long res = def;
if (!val)
return def;
res = strtol (val, &end, 10);
if (end == val)
{
fprintf (stderr, "guile: warning: invalid %s: %s\n", var, val);
return def;
}
return res;
}
static int
should_install_locale (void)
{
/* If the GUILE_INSTALL_LOCALE environment variable is set to a
nonzero value, we should install the locale via setlocale(). This
behavior is off by default for compatibility with previous 2.0.x
releases. It will be on by default in 2.2. */
return get_integer_from_environment ("GUILE_INSTALL_LOCALE", 0);
}
int int
main (int argc, char **argv) main (int argc, char **argv)
{ {
/* If we should install a locale, do it right at the beginning so that
string conversion for command-line arguments, along with possible
error messages, use the right locale. See
<https://lists.gnu.org/archive/html/guile-devel/2011-11/msg00041.html>
for the rationale. */
if (should_install_locale () && setlocale (LC_ALL, "") == NULL)
fprintf (stderr, "guile: warning: failed to install locale\n");
scm_install_gmp_memory_functions = 1; scm_install_gmp_memory_functions = 1;
scm_boot_guile (argc, argv, inner_main, 0); scm_boot_guile (argc, argv, inner_main, 0);
return 0; /* never reached */ return 0; /* never reached */