-/* Copyright (C) 1996,1997,2000,2001, 2006 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 2.1 of the License, or (at your option) any later version.
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 3 of
+ * the License, or (at your option) any later version.
*
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * This library is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
*/
/* This is the 'main' function for the `guile' executable. It is not
#include <libguile/scmconfig.h>
#endif
#include <ltdl.h>
+#include <locale.h>
#ifdef HAVE_WINSOCK2_H
#include <winsock2.h>
#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 unset,
+ or set to a nonzero value, we should install the locale via
+ setlocale(). */
+ return get_integer_from_environment ("GUILE_INSTALL_LOCALE", 1);
+}
+
int
main (int argc, char **argv)
{
-#if !defined (__MINGW32__)
- /* libtool automagically inserts this variable into your executable... */
- extern const lt_dlsymlist lt_preloaded_symbols[];
- lt_dlpreload_default (lt_preloaded_symbols);
-#endif
+ /* 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 */
}