diff patches/guile-2.0.7-mingw-localcharset.patch @ 6512:ccc20ae889ca default tip guix

mingw::guile-2.0.7 builds.
author Jan Nieuwenhuizen <janneke@gnu.org>
date Thu, 24 Mar 2016 08:03:39 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/guile-2.0.7-mingw-localcharset.patch	Thu Mar 24 08:03:39 2016 +0100
@@ -0,0 +1,194 @@
+--- guile-2.0.7/lib/localcharset.c	2010-12-07 03:32:46.000000000 +0100
++++ guile-2.0.7/lib/localcharset.c	2012-11-21 23:33:30.000000000 +0100
+@@ -30,11 +29,11 @@
+ #include <stdlib.h>
+
+ #if defined __APPLE__ && defined __MACH__ && HAVE_LANGINFO_CODESET
+-# define DARWIN7 /* Darwin 7 or newer, i.e. MacOS X 10.3 or newer */
++# define DARWIN7 /* Darwin 7 or newer, i.e. Mac OS X 10.3 or newer */
+ #endif
+
+ #if defined _WIN32 || defined __WIN32__
+-# define WIN32_NATIVE
++# define WINDOWS_NATIVE
+ #endif
+
+ #if defined __EMX__
+@@ -44,7 +43,7 @@
+ # endif
+ #endif
+
+-#if !defined WIN32_NATIVE
++#if !defined WINDOWS_NATIVE
+ # include <unistd.h>
+ # if HAVE_LANGINFO_CODESET
+ #  include <langinfo.h>
+@@ -57,7 +56,7 @@
+ #  define WIN32_LEAN_AND_MEAN
+ #  include <windows.h>
+ # endif
+-#elif defined WIN32_NATIVE
++#elif defined WINDOWS_NATIVE
+ # define WIN32_LEAN_AND_MEAN
+ # include <windows.h>
+ #endif
+@@ -83,7 +82,7 @@
+ #endif
+
+ #if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
+-  /* Win32, Cygwin, OS/2, DOS */
++  /* Native Windows, Cygwin, OS/2, DOS */
+ # define ISSLASH(C) ((C) == '/' || (C) == '\\')
+ #endif
+
+@@ -123,7 +122,7 @@
+   cp = charset_aliases;
+   if (cp == NULL)
+     {
+-#if !(defined DARWIN7 || defined VMS || defined WIN32_NATIVE || defined __CYGWIN__)
++#if !(defined DARWIN7 || defined VMS || defined WINDOWS_NATIVE || defined __CYGWIN__)
+       const char *dir;
+       const char *base = "charset.alias";
+       char *file_name;
+@@ -228,8 +227,7 @@
+                         {
+                           /* Out of memory. */
+                           res_size = 0;
+-                          if (old_res_ptr != NULL)
+-                            free (old_res_ptr);
++                          free (old_res_ptr);
+                           break;
+                         }
+                       strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1);
+@@ -309,7 +307,7 @@
+            "DECKOREAN" "\0" "EUC-KR" "\0";
+ # endif
+
+-# if defined WIN32_NATIVE || defined __CYGWIN__
++# if defined WINDOWS_NATIVE || defined __CYGWIN__
+       /* To avoid the troubles of installing a separate file in the same
+          directory as the DLL and of retrieving the DLL's directory at
+          runtime, simply inline the aliases here.  */
+@@ -361,7 +359,7 @@
+   const char *codeset;
+   const char *aliases;
+
+-#if !(defined WIN32_NATIVE || defined OS2)
++#if !(defined WINDOWS_NATIVE || defined OS2)
+
+ # if HAVE_LANGINFO_CODESET
+
+@@ -408,10 +406,10 @@
+             }
+         }
+
+-      /* Woe32 has a function returning the locale's codepage as a number:
+-         GetACP().  This encoding is used by Cygwin, unless the user has set
+-         the environment variable CYGWIN=codepage:oem (which very few people
+-         do).
++      /* The Windows API has a function returning the locale's codepage as a
++         number: GetACP().  This encoding is used by Cygwin, unless the user
++         has set the environment variable CYGWIN=codepage:oem (which very few
++         people do).
+          Output directed to console windows needs to be converted (to
+          GetOEMCP() if the console is using a raster font, or to
+          GetConsoleOutputCP() if it is using a TrueType font).  Cygwin does
+@@ -454,12 +452,12 @@
+
+ # endif
+
+-#elif defined WIN32_NATIVE
++#elif defined WINDOWS_NATIVE
+
+   static char buf[2 + 10 + 1];
+
+-  /* Woe32 has a function returning the locale's codepage as a number:
+-     GetACP().
++  /* The Windows API has a function returning the locale's codepage as a
++     number: GetACP().
+      When the output goes to a console window, it needs to be provided in
+      GetOEMCP() encoding if the console is using a raster font, or in
+      GetConsoleOutputCP() encoding if it is using a TrueType font.
+@@ -544,5 +542,82 @@
+   if (codeset[0] == '\0')
+     codeset = "ASCII";
+
++#ifdef DARWIN7
++  /* Mac OS X sets MB_CUR_MAX to 1 when LC_ALL=C, and "UTF-8"
++     (the default codeset) does not work when MB_CUR_MAX is 1.  */
++  if (strcmp (codeset, "UTF-8") == 0 && MB_CUR_MAX <= 1)
++    codeset = "ASCII";
++#endif
++
++  return codeset;
++}
++
++/* A variant of the above, without calls to `setlocale', `nl_langinfo',
++   etc.  */
++const char *
++environ_locale_charset (void)
++{
++  static char buf[2 + 10 + 1];
++  const char *codeset, *aliases;
++  const char *locale = NULL;
++
++  locale = getenv ("LC_ALL");
++  if (locale == NULL || locale[0] == '\0')
++    {
++      locale = getenv ("LC_CTYPE");
++      if (locale == NULL || locale[0] == '\0')
++	locale = getenv ("LANG");
++    }
++
++  if (locale != NULL && locale[0] != '\0')
++    {
++      /* If the locale name contains an encoding after the dot, return it.  */
++      const char *dot = strchr (locale, '.');
++
++      if (dot != NULL)
++        {
++          const char *modifier;
++
++          dot++;
++          /* Look for the possible @... trailer and remove it, if any.  */
++          modifier = strchr (dot, '@');
++          if (modifier == NULL)
++            return dot;
++          if (modifier - dot < sizeof (buf))
++            {
++              memcpy (buf, dot, modifier - dot);
++              buf [modifier - dot] = '\0';
++              return buf;
++            }
++        }
++      else if (strcmp (locale, "C") == 0)
++	{
++	  strcpy (buf, "ASCII");
++	  return buf;
++	}
++      else
++	codeset = "";
++    }
++  else
++    codeset = "";
++
++  /* Resolve alias. */
++  for (aliases = get_charset_aliases ();
++       *aliases != '\0';
++       aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1)
++    if (strcmp (codeset, aliases) == 0
++        || (aliases[0] == '*' && aliases[1] == '\0'))
++      {
++        codeset = aliases + strlen (aliases) + 1;
++        break;
++      }
++
++  /* Don't return an empty string.  GNU libc and GNU libiconv interpret
++     the empty string as denoting "the locale's character encoding",
++     thus GNU libiconv would call this function a second time.  */
++  if (codeset[0] == '\0')
++    /* Default to Latin-1, for backward compatibility with Guile 1.8.  */
++    codeset = "ISO-8859-1";
++
+   return codeset;
+ }