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:
parent
1b787ef9ec
commit
7f893030ab
2 changed files with 56 additions and 3 deletions
|
@ -1,6 +1,6 @@
|
|||
@c -*-texinfo-*-
|
||||
@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 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
|
||||
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
|
||||
@vindex GUILE_LOAD_COMPILED_PATH
|
||||
This variable may be used to augment the path that is searched for
|
||||
|
|
|
@ -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
|
||||
* modify it under the terms of the GNU Lesser General Public License
|
||||
* as published by the Free Software Foundation; either version 3 of
|
||||
|
@ -36,6 +37,7 @@
|
|||
#include <libguile/scmconfig.h>
|
||||
#endif
|
||||
#include <ltdl.h>
|
||||
#include <locale.h>
|
||||
|
||||
#ifdef HAVE_WINSOCK2_H
|
||||
#include <winsock2.h>
|
||||
|
@ -64,9 +66,44 @@ inner_main (void *closure SCM_UNUSED, int argc, char **argv)
|
|||
#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
|
||||
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_boot_guile (argc, argv, inner_main, 0);
|
||||
return 0; /* never reached */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue