mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-20 19:50:24 +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 -*-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
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
/* 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
|
||||||
|
@ -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 */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue