Simplify the interpreter for trivial inits and no letrec
[bpt/guile.git] / libguile / guile.c
index 133afc4..f827d26 100644 (file)
@@ -1,5 +1,5 @@
 /* Copyright (C) 1996, 1997, 2000, 2001, 2006, 2008,
- *   2011 Free Software Foundation, Inc.
+ *   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
 #include <winsock2.h>
 #endif
 
-/* Debugger interface (don't change the order of the following lines) */
-#define GDB_TYPE SCM
-#include <libguile/gdb_interface.h>
-GDB_INTERFACE;
-
 static void
 inner_main (void *closure SCM_UNUSED, int argc, char **argv)
 {
@@ -55,7 +50,6 @@ inner_main (void *closure SCM_UNUSED, int argc, char **argv)
   /* This is necessary to startup the Winsock API under Win32. */
   WSADATA WSAData;
   WSAStartup (0x0202, &WSAData);
-  GDB_INTERFACE_INIT;
 #endif /* __MINGW32__ */
 
   /* module initializations would go here */
@@ -66,15 +60,41 @@ 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 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)
 {
-  /* Install the locale right at the beginning so that string conversion
-     for command-line arguments, along with possible error messages, use
-     the right locale.  See
+  /* 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 (setlocale (LC_ALL, "") == NULL)
+  if (should_install_locale () && setlocale (LC_ALL, "") == NULL)
     fprintf (stderr, "guile: warning: failed to install locale\n");
 
   scm_install_gmp_memory_functions = 1;