]> git.ipfire.org Git - thirdparty/gettext.git/commitdiff
Improved OS/2 support.
authorBruno Haible <bruno@clisp.org>
Thu, 10 Jan 2002 14:23:16 +0000 (14:23 +0000)
committerBruno Haible <bruno@clisp.org>
Sun, 21 Jun 2009 22:55:25 +0000 (00:55 +0200)
17 files changed:
ChangeLog
Makefile.am
acconfig.h
intl/ChangeLog
intl/Makefile.in
intl/config.charset
intl/dcigettext.c
intl/localcharset.c
intl/os2compat.c
intl/osdep.c
lib/ChangeLog
lib/config.charset
lib/localcharset.c
os2/Makefile
os2/README.OS2
os2/configure.awk [new file with mode: 0644]
os2/iconv/iconv.c

index a9441a0de1eeec8d7db2a2acc6235d4754c86465..5c0c9228f5f9bb9218a3931cc95d2627387cc2a1 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2002-01-10  Bruno Haible  <bruno@clisp.org>
+
+       * acconfig.h [OS/2]: Include intl/os2compat.h, not os2/os2compat.h.
+       * Makefile.am (EXTRA_DIST): Remove os2/os2compat.h.
+
+2002-01-10  Andrew Zabolotny  <zap@cobra.ru>
+
+       * os2/README.OS2: Update.
+       * os2/Makefile: Heavily reworked.
+       * os2/iconv/iconv.c: Bug fixes.
+
 2002-01-07  Bruno Haible  <bruno@clisp.org>
 
        * config.rpath [IRIX]: Fix typo.
index 4ffc0427abe02791d4fc49f1843544f903419068..60695e7d823bc469310afd158e119aa4f96566bd 100644 (file)
@@ -1,5 +1,5 @@
 ## Makefile for the toplevel directory of the GNU NLS Utilities
-## Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
+## Copyright (C) 1995-1999, 2000-2002 Free Software Foundation, Inc.
 ##
 ## This program is free software; you can redistribute it and/or modify
 ## it under the terms of the GNU General Public License as published by
@@ -31,7 +31,7 @@ EXTRA_DIST = config.rpath BUGS DISCLAIM README.gemtext README-alpha \
              djgpp/config.bat djgpp/config.in djgpp/config.sed \
              djgpp/config.site djgpp/edtests.bat djgpp/fnchange.in \
              djgpp/fnchange.lst djgpp/tscript.sed \
-             os2/README.OS2 os2/Makefile os2/os2compat.h os2/backward.def \
+             os2/README.OS2 os2/Makefile os2/backward.def \
              os2/iconv/README os2/iconv/iconv.h os2/iconv/iconv.c
 
 ABOUT-NLS: $(srcdir)/doc/nls.texi $(srcdir)/doc/matrix.texi
index 994b6d976c6d4b330f84047450418281b464ca0b..2407bc32bd5591cacbdaebaab172fc56021b0c1a 100644 (file)
@@ -47,5 +47,5 @@
 
 /* Extra OS/2 (emx+gcc) defines.  */
 #ifdef __EMX__
-# include "os2/os2compat.h"
+# include "intl/os2compat.h"
 #endif
index d9e9a653b3856084d16a61ad1cf898a39e00cb5b..ddb7823a3b8482b37eb65a0aae32838064a3152a 100644 (file)
@@ -1,3 +1,16 @@
+2002-01-10  Andrew Zabolotny  <zap@cobra.ru>
+           Bruno Haible  <bruno@clisp.org>
+
+       * dcigettext.c (_nl_default_dirname): On OS/2, declare, not define.
+       * localcharset.c: Rework OS/2 support.
+       * config.charset: Add OS/2 support.
+       * os2compat.c: Renamed from os2.c.
+       (_nl_default_dirname): Define here.
+       * os2compat.h: Moved here from ../os2/.
+       * osdep.c: Update.
+       * Makefile.in (COMHDRS): Add os2compat.h.
+       (COMSRCS): Add os2compat.c, remove os2.c.
+
 2002-01-05  Bruno Haible  <bruno@clisp.org>
 
        * Makefile.in (libintl.la): Add -lc. Needed on AIX.
index a483f1d2980f47e01a4e38cca9c1420a0f8df6ed..9a8d294ddeff4823f47f1e4f69a3abcb5a9e0658 100644 (file)
@@ -60,12 +60,12 @@ LDFLAGS = @LDFLAGS@
 COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
 
 HEADERS = $(COMHDRS) libgnuintl.h loadinfo.h
-COMHDRS = gmo.h gettextP.h hash-string.h plural-exp.h plural-eval.c
+COMHDRS = gmo.h gettextP.h hash-string.h plural-exp.h plural-eval.c os2compat.h
 SOURCES = $(COMSRCS) intl-compat.c
 COMSRCS = bindtextdom.c dcgettext.c dgettext.c gettext.c \
 finddomain.c loadmsgcat.c localealias.c textdomain.c l10nflist.c \
 explodename.c dcigettext.c dcngettext.c dngettext.c ngettext.c plural.y \
-plural-exp.c localcharset.c localename.c osdep.c os2.c
+plural-exp.c localcharset.c localename.c osdep.c os2compat.c
 OBJECTS = @INTLOBJS@ bindtextdom.$lo dcgettext.$lo dgettext.$lo gettext.$lo \
 finddomain.$lo loadmsgcat.$lo localealias.$lo textdomain.$lo l10nflist.$lo \
 explodename.$lo dcigettext.$lo dcngettext.$lo dngettext.$lo ngettext.$lo \
index f4f2611c5ecbd837f86df20638b117e577e3a969..b91e0591b863dcc1448ebf914bf9ddd101f4d59a 100755 (executable)
@@ -1,7 +1,7 @@
 #! /bin/sh
 # Output a system dependent table of character encoding aliases.
 #
-#   Copyright (C) 2000-2001 Free Software Foundation, Inc.
+#   Copyright (C) 2000-2002 Free Software Foundation, Inc.
 #
 #   This program is free software; you can redistribute it and/or modify it
 #   under the terms of the GNU Library General Public License as published
@@ -235,10 +235,12 @@ case "$os" in
        #echo "sun_eu_greek ?" # what is this?
        echo "UTF-8 UTF-8"
        ;;
-    freebsd*)
+    freebsd* | os2*)
        # FreeBSD 4.2 doesn't have nl_langinfo(CODESET); therefore
        # localcharset.c falls back to using the full locale name
        # from the environment variables.
+       # Likewise for OS/2. OS/2 has XFree86 just like FreeBSD. Just
+       # reuse FreeBSD's locale data for OS/2.
        echo "C ASCII"
        echo "US-ASCII ASCII"
        for l in la_LN lt_LN; do
index e627b75a7566dd04415128e18405d352bbf04aea..de60d9fbf546be351754ecccd5a615bd77b6bb80 100644 (file)
@@ -1,5 +1,5 @@
 /* Implementation of the internal dcigettext function.
-   Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
+   Copyright (C) 1995-1999, 2000-2002 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify it
    under the terms of the GNU Library General Public License as published
@@ -265,7 +265,11 @@ const char _nl_default_default_domain[] = "messages";
 const char *_nl_current_default_domain = _nl_default_default_domain;
 
 /* Contains the default location of the message catalogs.  */
+#if defined __EMX__
+extern const char _nl_default_dirname[];
+#else
 const char _nl_default_dirname[] = LOCALEDIR;
+#endif
 
 /* List with bindings of specific domains created by bindtextdomain()
    calls.  */
index 624a808b5c6b5a11c081cd919014ebe016f532e0..bc5587bf6015ca1a45070736eb9630e2accaa7e4 100644 (file)
@@ -1,6 +1,6 @@
 /* Determine a canonical name for the current locale's character encoding.
 
-   Copyright (C) 2000-2001 Free Software Foundation, Inc.
+   Copyright (C) 2000-2002 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify it
    under the terms of the GNU Library General Public License as published
@@ -47,7 +47,7 @@
 # define OS2
 #endif
 
-#if !(defined WIN32 || defined OS2)
+#if !defined WIN32
 # if HAVE_LANGINFO_CODESET
 #  include <langinfo.h>
 # else
@@ -58,7 +58,8 @@
 #elif defined WIN32
 # define WIN32_LEAN_AND_MEAN
 # include <windows.h>
-#elif defined OS2
+#endif
+#if defined OS2
 # define INCL_DOS
 # include <os2.h>
 #endif
@@ -104,7 +105,7 @@ get_charset_aliases ()
   cp = charset_aliases;
   if (cp == NULL)
     {
-#if !(defined WIN32 || defined OS2)
+#if !defined WIN32
       FILE *fp;
       const char *dir = LIBDIR;
       const char *base = "charset.alias";
@@ -201,10 +202,6 @@ get_charset_aliases ()
 # if defined WIN32
       cp = "CP936" "\0" "GBK" "\0"
           "CP1361" "\0" "JOHAB" "\0";
-
-# elif defined OS2
-      cp = "";
-
 # endif
 #endif
 
@@ -266,7 +263,7 @@ locale_charset ()
 
 # endif
 
-#elif WIN32
+#elif defined WIN32
 
   static char buf[2 + 10 + 1];
 
@@ -274,19 +271,57 @@ locale_charset ()
   sprintf (buf, "CP%u", GetACP ());
   codeset = buf;
 
-#elif OS2
+#elif defined OS2
 
+  const char *locale;
   static char buf[2 + 10 + 1];
   ULONG cp[3];
   ULONG cplen;
 
-  /* OS/2 has a function returning the locale's codepage as a number.  */
-  if (DosQueryCp (sizeof (cp), cp, &cplen))
-    codeset = "";
+  /* Allow user to override the codeset, as set in the operating system,
+     with standard language environment variables.  */
+  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;
+           }
+       }
+
+      /* Resolve through the charset.alias file.  */
+      codeset = locale;
+    }
   else
     {
-      sprintf (buf, "CP%u", cp[0]);
-      codeset = buf;
+      /* OS/2 has a function returning the locale's codepage as a number.  */
+      if (DosQueryCp (sizeof (cp), cp, &cplen))
+       codeset = "";
+      else
+       {
+         sprintf (buf, "CP%u", cp[0]);
+         codeset = buf;
+       }
     }
 
 #endif
index ef62ea312638a06336c57cd018cc87e1b738e1e5..5959ef5c09724625e8e209daa13f8680dfc63f16 100644 (file)
@@ -1,5 +1,5 @@
 /* OS/2 compatibility functions.
-   Copyright (C) 2001 Free Software Foundation, Inc.
+   Copyright (C) 2001-2002 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify it
    under the terms of the GNU Library General Public License as published
@@ -37,6 +37,18 @@ _nl_getenv (const char *name)
     return value;
 }
 
+char _nl_default_dirname[] =   /* a 260+1 bytes large buffer */
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0"
+#define LOCALEDIR_MAX 260
+
 char *_os2_libdir = NULL;
 char *_os2_localealiaspath = NULL;
 char *_os2_localedir = NULL;
index c374c95d33324ac94798bd61f51e6f905890c4a5..b3725983818d3df65a2e20d4ce82e9041492bea4 100644 (file)
@@ -1,5 +1,5 @@
 /* OS dependent parts of libintl.
-   Copyright (C) 2001 Free Software Foundation, Inc.
+   Copyright (C) 2001-2002 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify it
    under the terms of the GNU Library General Public License as published
@@ -17,7 +17,7 @@
    USA.  */
 
 #if defined __EMX__
-# include "os2.c"
+# include "os2compat.c"
 #else
 /* Avoid AIX compiler warning.  */
 typedef int dummy;
index c263c4173a6bfdfc12454d7cb0d482ff4574ee43..04a8de9f1048790d7a6ea6d65cd09e8b4ebc34d3 100644 (file)
@@ -1,3 +1,9 @@
+2002-01-10  Andrew Zabolotny  <zap@cobra.ru>
+           Bruno Haible  <bruno@clisp.org>
+
+       * localcharset.c: Rework OS/2 support.
+       * config.charset: Add OS/2 support.
+
 2002-01-09  Bruno Haible  <bruno@clisp.org>
 
        * setenv.h: Make it possible to include this file from C++.
index f4f2611c5ecbd837f86df20638b117e577e3a969..b91e0591b863dcc1448ebf914bf9ddd101f4d59a 100755 (executable)
@@ -1,7 +1,7 @@
 #! /bin/sh
 # Output a system dependent table of character encoding aliases.
 #
-#   Copyright (C) 2000-2001 Free Software Foundation, Inc.
+#   Copyright (C) 2000-2002 Free Software Foundation, Inc.
 #
 #   This program is free software; you can redistribute it and/or modify it
 #   under the terms of the GNU Library General Public License as published
@@ -235,10 +235,12 @@ case "$os" in
        #echo "sun_eu_greek ?" # what is this?
        echo "UTF-8 UTF-8"
        ;;
-    freebsd*)
+    freebsd* | os2*)
        # FreeBSD 4.2 doesn't have nl_langinfo(CODESET); therefore
        # localcharset.c falls back to using the full locale name
        # from the environment variables.
+       # Likewise for OS/2. OS/2 has XFree86 just like FreeBSD. Just
+       # reuse FreeBSD's locale data for OS/2.
        echo "C ASCII"
        echo "US-ASCII ASCII"
        for l in la_LN lt_LN; do
index 624a808b5c6b5a11c081cd919014ebe016f532e0..bc5587bf6015ca1a45070736eb9630e2accaa7e4 100644 (file)
@@ -1,6 +1,6 @@
 /* Determine a canonical name for the current locale's character encoding.
 
-   Copyright (C) 2000-2001 Free Software Foundation, Inc.
+   Copyright (C) 2000-2002 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify it
    under the terms of the GNU Library General Public License as published
@@ -47,7 +47,7 @@
 # define OS2
 #endif
 
-#if !(defined WIN32 || defined OS2)
+#if !defined WIN32
 # if HAVE_LANGINFO_CODESET
 #  include <langinfo.h>
 # else
@@ -58,7 +58,8 @@
 #elif defined WIN32
 # define WIN32_LEAN_AND_MEAN
 # include <windows.h>
-#elif defined OS2
+#endif
+#if defined OS2
 # define INCL_DOS
 # include <os2.h>
 #endif
@@ -104,7 +105,7 @@ get_charset_aliases ()
   cp = charset_aliases;
   if (cp == NULL)
     {
-#if !(defined WIN32 || defined OS2)
+#if !defined WIN32
       FILE *fp;
       const char *dir = LIBDIR;
       const char *base = "charset.alias";
@@ -201,10 +202,6 @@ get_charset_aliases ()
 # if defined WIN32
       cp = "CP936" "\0" "GBK" "\0"
           "CP1361" "\0" "JOHAB" "\0";
-
-# elif defined OS2
-      cp = "";
-
 # endif
 #endif
 
@@ -266,7 +263,7 @@ locale_charset ()
 
 # endif
 
-#elif WIN32
+#elif defined WIN32
 
   static char buf[2 + 10 + 1];
 
@@ -274,19 +271,57 @@ locale_charset ()
   sprintf (buf, "CP%u", GetACP ());
   codeset = buf;
 
-#elif OS2
+#elif defined OS2
 
+  const char *locale;
   static char buf[2 + 10 + 1];
   ULONG cp[3];
   ULONG cplen;
 
-  /* OS/2 has a function returning the locale's codepage as a number.  */
-  if (DosQueryCp (sizeof (cp), cp, &cplen))
-    codeset = "";
+  /* Allow user to override the codeset, as set in the operating system,
+     with standard language environment variables.  */
+  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;
+           }
+       }
+
+      /* Resolve through the charset.alias file.  */
+      codeset = locale;
+    }
   else
     {
-      sprintf (buf, "CP%u", cp[0]);
-      codeset = buf;
+      /* OS/2 has a function returning the locale's codepage as a number.  */
+      if (DosQueryCp (sizeof (cp), cp, &cplen))
+       codeset = "";
+      else
+       {
+         sprintf (buf, "CP%u", cp[0]);
+         codeset = buf;
+       }
     }
 
 #endif
index 94e11f6596b11d627742b33fa0d615828a5f9253..a598737abcf988c76a5d48203ab401d5f87e8fb5 100644 (file)
-# OS/2 GNU Makefile for building gettext with GNU Make and GNU C compiler
-#
-# OS/2 still supports the regular configure/make building mechanism, but its
-# way more clumsy, complicated and error prone. It is highly recommended to
-# use this makefile instead, because :
-# - this makefile builds an optimized static and dynamic version of the
-#   library
-# - it is able to build both optimized and debug versions of the library
-#   without any reconfiguring
-# - it is able to generate a complete OS/2 binary distribution (make distr)
-# - besides its simply alot faster than configure generated makefiles
-#
-# The makefile is designed to be more or less gettext version independent,
-# so it is likely to work with future versions of gettext as well. However,
-# please inspect the pre-built config.h file (if you haven't built one with
-# configure) so that VERSION macro contains the correct value.
-#
-
-# Use CMD.EXE as shell since its way faster
-SHELL = $(COMSPEC)
-# An Unix-like shell (needed for running config.charset)
-UNIXSHELL = sh.exe
-
-# Debug mode (1) or optimize mode (0)
-DEBUG = 0
-
-# The version of INTL.DLL (the name suffix)
-INTLDLLVER =
-
-# Pack the DLL and executables with lxlite
-LXLITE = 1
-
-# Output directory
-OUT = out/$(OUT.SUFFIX)/
-# Root package directory
-ROOT = ../
-# The base directory for distribution archive (emx/ or usr/)
-INST = emx/
-# A shortcut for emx/src/gettext-version/
-INSTSRC = $(INST)src/gettext-$(VERSION)/
-
-# Tools
-CC = gcc -c
-CFLAGS = -Wall -Zmt $(INCLUDE) $(DEFS)
-INCLUDE = -I. -I$(ROOT) -I$(ROOT)intl -I$(ROOT)src -I$(ROOT)lib
-DEFS = -DHAVE_CONFIG_H -DLIBDIR=\"/usr/lib\" \
-  -DLOCALEDIR=\"/usr/share/locale\" -DLOCALE_ALIAS_PATH=\"/usr/share/locale\"
-
-LD = gcc
-LDFLAGS = -Zmt -Zcrtdll
-LDFLAGS.SHARED = -Zmt -Zcrtdll -Zdll
-LIBS = -liberty -lgcc
-
-AR = ar
-ARFLAGS = crs
-
-MKDIR = mkdir.exe -p
-COPY = cp -p
-
-LINKINTL = $(OUT)intl.a
-
-ifeq ($(DEBUG),0)
-  CFLAGS += -s -O2
-  LDFLAGS += -s -Zexe
-  LDFLAGS.SHARED += -s
-  OUT.SUFFIX = release
-else
-  CFLAGS += -g -Zomf
-  LDFLAGS += -g -Zexe -Zomf
-  LDFLAGS.SHARED += -g -Zomf
-  OUT.SUFFIX = debug
-  LXLITE := 0
-  LINKINTL = $(OUT)intl_s.a
-endif
-
-# The list of languages to be included in binary distribution
-LINGUAS = cs da de el es fr gl id it nl nn no pl pt pt_BR ru sl sv tr
-# The following languages don't work with OS/2 iconv:
-#en@boldquot en@quot et ja ko zh
-
-VERSION = $(shell sed config.h -ne "/VERSION/{" -e "s/.*VERSION[       ]*//" -e 's/"//g' -e "p" -e "}")
-
-# Fetch the list of source files for libintl from intl/Makefile.in
-INTL.SOURCES = $(addprefix $(ROOT)intl/,\
-  $(subst $$lo,c,\
-  $(subst @INTLOS2OBJS@,os2compat.c,\
-  $(subst @INTLOBJS@,intl-compat.c,\
-  $(subst OBJECTS = ,,\
-  $(subst \,,\
-  $(shell sed $(ROOT)intl/Makefile.in -ne "/^OBJECTS =/,/[^\]$$/p")))))))
-INTL.OBJECTS = $(addprefix $(OUT),$(subst $(ROOT),,$(INTL.SOURCES:.c=.o)))
-
-PROGRAMS = gettext ngettext msgcmp msgfmt msgmerge msgunfmt xgettext msgcomm
-PROGRAMS.EXE = $(addprefix $(OUT),$(addsuffix .exe,$(PROGRAMS)))
-SRC.SOURCES = $(filter-out $(addprefix $(ROOT)src/,$(addsuffix .c,$(PROGRAMS))),\
-  $(wildcard $(ROOT)src/*.c))
-SRC.OBJECTS = $(addprefix $(OUT),$(subst $(ROOT),,$(SRC.SOURCES:.c=.o)))
-LIB.SOURCES = $(addprefix $(ROOT)lib/,basename.c error.c stpcpy.c stpncpy.c \
-  concatpath.c mbswidth.c fstrcmp.c hash.c printf-prs.c c-ctype.c linebreak.c \
-  getline.c)
-LIB.OBJECTS = $(addprefix $(OUT),$(subst $(ROOT),,$(LIB.SOURCES:.c=.o)))
-
-OUTDIRS = $(OUT) $(sort $(dir $(INTL.OBJECTS) $(SRC.OBJECTS) $(LIB.OBJECTS) $(INSTALL.FILES)))
-
-INSTALL.FILES = $(addprefix $(INST)bin/,$(addsuffix .exe,$(PROGRAMS))) \
-  $(INST)lib/intl.a $(INST)lib/intl_s.a $(INST)dll/intl.dll $(INST)include/libintl.h \
-  $(INST)share/locale/charset.alias $(INST)share/locale/locale.alias \
-  $(INST)doc/gettext-$(VERSION)/README.OS2 \
-  $(INST)doc/gettext-$(VERSION)/COPYING $(INST)doc/gettext-$(VERSION)/README \
-  $(INST)include/iconv.h $(INST)include/langinfo.h \
-  $(addsuffix /LC_MESSAGES/gettext.mo,$(addprefix $(INST)share/locale/,$(LINGUAS))) \
-  $(INSTALL.DIFF)
-
-# The diff and source files which we want in binary distribution (do we?)
-INSTALL.DIFF = $(INSTSRC)gettext-$(VERSION).diff \
-  $(addprefix $(INSTSRC)os2/,$(wildcard *.c *.h *.def) Makefile README.OS2) \
-  $(INSTSRC)intl/os2compat.c
-
-.SUFFIXES:
-.SUFFIXES: .o .a .def .exe .dll .po .mo
-.PRECIOUS: $(OUT)%.o
-
-.PHONY: all depend clean distr rmzip
-
-$(OUT)%.o: $(ROOT)%.c
-       $(CC) $(CFLAGS) -o $@ $<
-
-# To avoid playing with object file lists for every program we will build
-# instead a library containing all the object files from src directory, and
-# then link the library against the main program module, so that linker can
-# pull all the required functions from there
-$(OUT)%.exe: $(OUT)src/%.o $(OUT)util.a $(LINKINTL)
-       $(LD) $(LDFLAGS) -o $@ $^ $(LIBS)
-ifeq ($(LXLITE),1)
-       lxlite $@
-endif
-
-all: $(OUTDIRS) $(ROOT)src/po-gram-gen2.h $(ROOT)intl/libintl.h \
-  $(OUT)intl.a $(OUT)intl_s.a $(OUT)intl$(INTLDLLVER).dll $(PROGRAMS.EXE)
-
-depend: $(INTL.SOURCES) $(SRC.SOURCES)
-       makedep $(INCLUDE) $(DEFS) -p $$(OUT) -r $^
-
-clean:
-       rm -rf out emx
-
-distr: all rmzip gettext-os2-$(VERSION)-bin.zip
-
-rmzip:
-       rm -f gettext-os2-$(VERSION)-bin.zip
-
-$(OUTDIRS):
-       $(MKDIR) $(@:/=)
-
-$(OUT)intl_s.a: $(INTL.OBJECTS)
-       $(AR) $(ARFLAGS) $@ $^
-
-$(OUT)intl.def: $(INTL.OBJECTS)
-       @echo LIBRARY INTL$(INTLDLLVER) INITINSTANCE TERMINSTANCE>$@
-       @echo DESCRIPTION "GNU gettext internationalization library version $(VERSION)">>$@
-       @echo DATA MULTIPLE NONSHARED>>$@
-       @echo EXPORTS>>$@
-       type backward.def>>$@
-       emxexp $^ >>$@
-
-$(OUT)intl$(INTLDLLVER).dll: $(INTL.OBJECTS) $(OUT)intl.def
-       @echo *********************************************************
-       @echo *** YOU CAN SAFELY IGNORE WARNINGS FROM EMXBIND BELOW ***
-       @echo *********************************************************
-       $(LD) $(LDFLAGS.SHARED) -o $@ $^ $(LIBS)
-ifeq ($(LXLITE),1)
-       lxlite $@
-endif
-
-# Remove the ordinals from exports so that newer programs import by name
-$(OUT)intl.a: $(OUT)intl.def
-       emximp -o $@ $<
-
-$(OUT)util.a: $(SRC.OBJECTS) $(LIB.OBJECTS)
-       $(AR) $(ARFLAGS) $@ $^
-
-$(ROOT)src/po-gram-gen2.h: $(ROOT)src/po-gram-gen.h
-       sed -e "s/[yY][yY]/po_gram_/g" $< > $@
-
-$(ROOT)intl/libintl.h: $(ROOT)intl/libgnuintl.h 
-       $(COPY) $< $@
-
-gettext-os2-$(VERSION)-bin.zip: $(INSTALL.FILES)
-       @rm -f $@
-       zip -9XD $@ $^
-
-# The following rules are for `make distr' target only
-
-$(INST)share/locale/charset.alias: $(ROOT)lib/config.charset
-       $(UNIXSHELL) $< i386-pc-os2-emx >$@
-$(INST)share/locale/locale.alias: $(ROOT)intl/locale.alias
-       $(COPY) $< $@
-$(INST)bin/% $(INST)lib/% $(INST)dll/%: $(OUT)%
-       $(COPY) $< $@
-$(INST)include/%: $(ROOT)intl/%
-       $(COPY) $< $@
-$(INST)doc/gettext-$(VERSION)/%: $(ROOT)%
-       $(COPY) $< $@
-$(INST)doc/gettext-$(VERSION)/% $(INSTSRC)% $(INSTSRC)os2/% $(INST)include/%: %
-       $(COPY) $< $@
-$(INSTSRC)%: $(ROOT)%
-       $(COPY) $< $@
-$(INST)share/locale/%/LC_MESSAGES/gettext.mo: $(ROOT)po/%.po
-       $(MKDIR) $(dir $@)
-       $(COMSPEC) /c "$(subst /,\\,set BEGINLIBPATH=$(OUT:/=) && \
-         $(OUT)msgfmt.exe) --statistics --verbose -o $@ $<"
-
-# DO NOT DELETE this line -- makedep depends on it
-
-$(OUT)intl-compat.o: ../intl/libgnuintl.h ../intl/gettextP.h \
-  ../intl/loadinfo.h ../intl/gettext.h
-$(OUT)bindtextdom.o: ../intl/libgnuintl.h ../intl/gettextP.h \
-  ../intl/loadinfo.h ../intl/gettext.h
-$(OUT)dcgettext.o: ../intl/gettextP.h ../intl/loadinfo.h \
-  ../intl/gettext.h ../intl/libgnuintl.h
-$(OUT)dgettext.o: ../intl/gettextP.h ../intl/loadinfo.h \
-  ../intl/gettext.h ../intl/libgnuintl.h
-$(OUT)gettext.o: ../intl/gettextP.h ../intl/loadinfo.h \
-  ../intl/gettext.h ../intl/libgnuintl.h
-$(OUT)finddomain.o: ../intl/gettextP.h ../intl/loadinfo.h \
-  ../intl/gettext.h ../intl/libgnuintl.h
-$(OUT)loadmsgcat.o: ../intl/gettext.h ../intl/gettextP.h \
-  ../intl/loadinfo.h
-$(OUT)localealias.o: ../intl/gettextP.h ../intl/loadinfo.h \
-  ../intl/gettext.h
-$(OUT)textdomain.o: ../intl/libgnuintl.h ../intl/gettextP.h \
-  ../intl/loadinfo.h ../intl/gettext.h
-$(OUT)l10nflist.o: ../intl/loadinfo.h
-$(OUT)explodename.o: ../intl/loadinfo.h
-$(OUT)dcigettext.o: ../intl/gettextP.h ../intl/loadinfo.h \
-  ../intl/gettext.h ../intl/libgnuintl.h ../intl/hash-string.h
-$(OUT)dcngettext.o: ../intl/gettextP.h ../intl/loadinfo.h \
-  ../intl/gettext.h ../intl/libgnuintl.h
-$(OUT)dngettext.o: ../intl/gettextP.h ../intl/loadinfo.h \
-  ../intl/gettext.h ../intl/libgnuintl.h
-$(OUT)ngettext.o: ../intl/gettextP.h ../intl/loadinfo.h \
-  ../intl/gettext.h ../intl/libgnuintl.h
-$(OUT)plural.o: ../intl/gettextP.h ../intl/loadinfo.h \
-  ../intl/gettext.h
-$(OUT)os2compat.o: ../os2/iconv.c
-$(OUT)dir-list.o: ../lib/system.h ../src/dir-list.h \
-  ../src/str-list.h
-$(OUT)message.o: ../lib/fstrcmp.h ../src/message.h ../src/str-list.h \
-  ../src/pos.h ../lib/system.h
-$(OUT)open-po.o: ../src/open-po.h ../src/dir-list.h ../lib/error.h \
-  ../lib/system.h ../lib/gettext.h
-$(OUT)po-gram-gen.o: ../src/po-lex.h ../lib/error.h ../src/pos.h \
-  ../src/po-gram.h ../lib/system.h ../lib/gettext.h \
-  ../src/po.h
-$(OUT)po-hash-gen.o: ../src/po-hash.h ../src/po.h ../src/po-lex.h \
-  ../lib/error.h ../src/pos.h
-$(OUT)po-lex.o: ../lib/gettext.h ../src/po-lex.h ../lib/error.h \
-  ../src/pos.h ../src/open-po.h ../src/po-gram-gen2.h
-$(OUT)po.o: ../src/po.h ../src/po-lex.h ../lib/error.h \
-  ../src/pos.h ../src/po-hash.h ../lib/mbswidth.h \
-  ../lib/gettext.h
-$(OUT)str-list.o: ../src/str-list.h
-$(OUT)write-po.o: ../src/write-po.h ../src/message.h \
-  ../src/str-list.h ../src/pos.h ../lib/c-ctype.h \
-  ../lib/linebreak.h ../lib/error.h ../lib/gettext.h
-$(OUT)xget-lex.o: ../src/dir-list.h ../lib/error.h \
-  ../lib/gettext.h ../lib/hash.h ../src/str-list.h \
-  ../src/xget-lex.h
+#\r
+# OS/2 GNU Makefile for building gettext with GNU Make and GNU C compiler\r
+#\r
+# OS/2 still supports the regular configure/make building mechanism, but its\r
+# way more clumsy, complicated and error prone. It is highly recommended to\r
+# use this makefile instead, because :\r
+# - this makefile builds an optimized static and dynamic version of the\r
+#   library\r
+# - it is able to build both optimized and debug versions of the library\r
+#   without any reconfiguring\r
+# - this makefile builds an backward compatible DLL. When building with\r
+#   configure you will get a DLL which is compatible only with the 0.10.40\r
+#   and later DLLs of gettext; this makefile builds a DLL which is binary\r
+#   compatible with gettext 0.10.35 (exports by ordinal matter).\r
+# - it is able to generate a complete OS/2 binary distribution (make distr)\r
+# - besides its simply alot faster than configure generated makefiles\r
+#\r
+# The makefile is designed to be more or less gettext version independent,\r
+# so it is likely to work with future versions of gettext as well.\r
+#\r
+\r
+# Use CMD.EXE as shell since its way faster\r
+SHELL = $(COMSPEC)\r
+# An Unix-like shell (needed for running config.charset)\r
+UNIXSHELL = sh.exe\r
+\r
+# Debug mode (1) or optimize mode (0)\r
+DEBUG = 0\r
+\r
+# The version of INTL.DLL (the name suffix)\r
+INTLDLLVER =\r
+\r
+# Pack the DLL and executables with lxlite\r
+LXLITE = 1\r
+\r
+# Output directory\r
+OUT = out/$(OUT.SUFFIX)/\r
+# Root package directory\r
+ROOT = ../\r
+# The base directory for distribution archive (emx/ or usr/)\r
+INST = emx/\r
+\r
+# Tools\r
+CC = gcc -c\r
+CFLAGS = -Wall -Zmt $(INCLUDE) $(DEFS)\r
+INCLUDE = -I. -I$(ROOT) -I$(ROOT)intl -I$(ROOT)src -I$(ROOT)lib\r
+DEFS = -DHAVE_CONFIG_H -DLIBDIR=\"/usr/lib\" \\r
+  -DLOCALEDIR=\"/usr/share/locale\" -DLOCALE_ALIAS_PATH=\"/usr/share/locale\" \\r
+  -DPROJECTSDIR=\"/usr/share/gettext/projects\" \\r
+  -DGETTEXTJAR=\"/usr/share/gettext/gettext.jar\"\r
+\r
+LD = gcc\r
+LDFLAGS = -Zmt -Zcrtdll\r
+LDFLAGS.SHARED = -Zmt -Zcrtdll -Zdll\r
+LIBS = -liberty -lgcc\r
+\r
+AR = ar\r
+ARFLAGS = crs\r
+\r
+MKDIR = mkdir.exe -p\r
+COPY = cp -p\r
+\r
+LINKINTL = $(OUT)intl.a\r
+\r
+ifeq ($(DEBUG),0)\r
+  CFLAGS += -s -O2\r
+  LDFLAGS += -s -Zexe\r
+  LDFLAGS.SHARED += -s\r
+  OUT.SUFFIX = release\r
+else\r
+  CFLAGS += -g\r
+  LDFLAGS += -g -Zexe\r
+  LDFLAGS.SHARED += -g\r
+  OUT.SUFFIX = debug\r
+  LXLITE := 0\r
+  LINKINTL = $(OUT)intl_s.a\r
+endif\r
+\r
+# Languages with encodings unsupported by OS/2 API (BIG5)\r
+BAD.LINGUAS=zh\r
+\r
+# The list of languages to be included in binary distribution\r
+LINGUAS = $(filter-out $(BAD.LINGUAS),$(shell sed -e "/^\#/d" $(ROOT)po/LINGUAS))\r
+\r
+# Fetch version number from configure.in\r
+VERSION = $(shell sed ../configure.in -ne "/AM_INIT_AUTOMAKE/{" -e "s/.*(gettext, *\\(.*\\))/\\1/" -e "p" -e "}")\r
+\r
+# Fetch the list of source files for libintl from intl/Makefile.in\r
+INTL.SOURCES = $(addprefix $(ROOT)intl/,\\r
+  $(subst $$lo,c,\\r
+  $(subst @INTLOBJS@,intl-compat.c,\\r
+  $(subst OBJECTS = ,,\\r
+  $(subst \,,\\r
+  $(shell sed $(ROOT)intl/Makefile.in -ne "/^OBJECTS =/,/[^\]$$/p"))))))\r
+INTL.OBJECTS = $(addprefix $(OUT),$(subst $(ROOT),,$(INTL.SOURCES:.c=.o)))\r
+\r
+PROGRAMS = $(addsuffix .exe,$(subst bin_PROGRAMS = ,,\\r
+  $(subst \,,\\r
+  $(shell sed $(ROOT)src/Makefile.am -ne "/^bin_PROGRAMS =/,/[^\]$$/p"))))\r
+PROGRAMS.EXE = $(addprefix $(OUT),$(PROGRAMS))\r
+SRC.SOURCES = $(filter-out $(addprefix $(ROOT)src/,$(PROGRAMS:.exe=.c)),\\r
+  $(wildcard $(ROOT)src/*.c))\r
+SRC.OBJECTS = $(addprefix $(OUT),$(subst $(ROOT),,$(SRC.SOURCES:.c=.o)))\r
+LIB.SOURCES = $(addprefix $(ROOT)lib/, error.c stpcpy.c stpncpy.c mkdtemp.c getline.c \\r
+  $(subst libgettextlib_la_SOURCES = ,,\\r
+  $(subst \,,\\r
+  $(patsubst getopt%.c,,\\r
+  $(shell sed $(ROOT)lib/Makefile.am -ne "/^libgettextlib_la_SOURCES =/,/[^\]$$/p")))))\r
+LIB.OBJECTS = $(addprefix $(OUT),$(subst $(ROOT),,$(LIB.SOURCES:.c=.o)))\r
+\r
+OUTDIRS = $(OUT) $(sort $(dir $(INTL.OBJECTS) $(SRC.OBJECTS) $(LIB.OBJECTS) $(INSTALL.FILES)))\r
+\r
+INSTALL.FILES = $(addprefix $(INST)bin/,$(PROGRAMS)) \\r
+  $(INST)lib/intl.a $(INST)lib/intl_s.a $(INST)lib/iconv.a \\r
+  $(INST)include/libintl.h $(INST)include/iconv.h $(INST)dll/intl.dll \\r
+  $(INST)share/locale/charset.alias $(INST)share/locale/locale.alias \\r
+  $(INST)doc/gettext-$(VERSION)/README.OS2 \\r
+  $(INST)doc/gettext-$(VERSION)/COPYING $(INST)doc/gettext-$(VERSION)/README \\r
+  $(addsuffix /LC_MESSAGES/gettext.mo,$(addprefix $(INST)share/locale/,$(LINGUAS))) \\r
+  $(INSTALL.DIFF)\r
+\r
+.SUFFIXES:\r
+.SUFFIXES: .o .a .def .exe .dll .po .mo\r
+.PRECIOUS: $(OUT)%.o $(OUT)%.a\r
+\r
+.PHONY: all depend clean distr rmzip\r
+\r
+$(OUT)%.o: $(ROOT)%.c\r
+       $(CC) $(CFLAGS) -o $@ $<\r
+\r
+# To avoid playing with object file lists for every program we will build\r
+# instead a library containing all the object files from src directory, and\r
+# then link the library against the main program module, so that linker can\r
+# pull all the required functions from there\r
+$(OUT)%.exe: $(OUT)src/%.o $(OUT)util.a $(LINKINTL)\r
+       $(LD) $(LDFLAGS) -o $@ $^ $(LIBS)\r
+ifeq ($(LXLITE),1)\r
+       lxlite /b- $@\r
+endif\r
+\r
+all: config.h $(OUTDIRS) $(ROOT)src/po-gram-gen2.h $(ROOT)intl/libintl.h \\r
+  $(OUT)intl.a $(OUT)intl_s.a $(OUT)intl$(INTLDLLVER).dll $(PROGRAMS.EXE)\r
+\r
+define MAKEDEP\r
+       echo $(OUT)PATH = FILENAME\r
+       makedep $(INCLUDE) $(DEFS) -p $$(OUT)PATH -r -a FILENAME\r
+\r
+endef\r
+\r
+depend: $(INTL.SOURCES) $(SRC.SOURCES)\r
+# Remove all dependencies\r
+       @makedep os2compat.h\r
+# Build dependencies, by one file (to avoid 1024 chars command line length limit)\r
+       @$(foreach fn,$^,$(subst PATH,$(subst ../,,$(dir $(fn))),$(subst FILENAME,$(fn),$(MAKEDEP))))\r
+       @rm -f __tmp__\r
+\r
+clean:\r
+       rm -rf out emx\r
+\r
+distr: all rmzip gettext-os2-$(VERSION)-bin.zip\r
+\r
+rmzip:\r
+       rm -f gettext-os2-$(VERSION)-bin.zip\r
+\r
+# How to configure without configure...\r
+config.h: ../config.h.in ./configure.awk\r
+       gawk -f configure.awk -v PACKAGE=gettext -v VERSION=$(VERSION) $< >config.h\r
+\r
+$(OUTDIRS):\r
+       $(MKDIR) $(@:/=)\r
+\r
+$(OUT)intl_s.a: $(INTL.OBJECTS)\r
+       $(AR) $(ARFLAGS) $@ $^\r
+\r
+$(OUT)intl.def: $(INTL.OBJECTS)\r
+       @echo LIBRARY INTL$(INTLDLLVER) INITINSTANCE TERMINSTANCE>$@\r
+       @echo DESCRIPTION "GNU gettext internationalization library version $(VERSION)">>$@\r
+       @echo DATA MULTIPLE NONSHARED>>$@\r
+       @echo EXPORTS>>$@\r
+       type backward.def>>$@\r
+       emxexp $^ >>$@\r
+\r
+$(OUT)intl$(INTLDLLVER).dll: $(INTL.OBJECTS) $(OUT)intl.def\r
+       @echo *********************************************************\r
+       @echo *** YOU CAN SAFELY IGNORE WARNINGS FROM EMXBIND BELOW ***\r
+       @echo *********************************************************\r
+       $(LD) $(LDFLAGS.SHARED) -o $@ $^ $(LIBS)\r
+ifeq ($(LXLITE),1)\r
+       lxlite $@\r
+endif\r
+\r
+# How to build an import library from a .DEF file\r
+$(OUT)%.a: $(OUT)%.def\r
+       emximp -o $@ $<\r
+\r
+# iconv.a is just a subset of intl.a (imports from INTL.DLL)\r
+$(OUT)iconv.def:\r
+       @echo LIBRARY INTL$(INTLDLLVER) INITINSTANCE TERMINSTANCE>$@\r
+       @echo EXPORTS>>$@\r
+       @echo iconv_open>>$@\r
+       @echo iconv>>$@\r
+       @echo iconv_close>>$@\r
+\r
+$(OUT)util.a: $(SRC.OBJECTS) $(LIB.OBJECTS)\r
+       $(AR) $(ARFLAGS) $@ $^\r
+\r
+$(ROOT)src/po-gram-gen2.h: $(ROOT)src/po-gram-gen.h\r
+       sed -e "s/[yY][yY]/po_gram_/g" $< > $@\r
+\r
+$(ROOT)intl/libintl.h: $(ROOT)intl/libgnuintl.h \r
+       $(COPY) $< $@\r
+\r
+gettext-os2-$(VERSION)-bin.zip: $(INSTALL.FILES)\r
+       @rm -f $@\r
+       zip -9XD $@ $^\r
+\r
+# The following rules are for `make distr' target only\r
+\r
+$(INST)share/locale/charset.alias: $(ROOT)lib/config.charset\r
+       $(UNIXSHELL) $< i386-pc-os2-emx >$@\r
+$(INST)share/locale/locale.alias: $(ROOT)intl/locale.alias\r
+       $(COPY) $< $@\r
+$(INST)bin/% $(INST)lib/% $(INST)dll/%: $(OUT)%\r
+       $(COPY) $< $@\r
+$(INST)include/%: $(ROOT)intl/%\r
+       $(COPY) $< $@\r
+$(INST)doc/gettext-$(VERSION)/%: $(ROOT)%\r
+       $(COPY) $< $@\r
+$(INST)doc/gettext-$(VERSION)/% $(INST)include/%: %\r
+       $(COPY) $< $@\r
+$(INST)share/locale/%/LC_MESSAGES/gettext.mo: $(ROOT)po/%.po\r
+       $(MKDIR) $(dir $@)\r
+       $(COMSPEC) /c "$(subst /,\\,set BEGINLIBPATH=$(OUT:/=) && \\r
+         $(OUT)msgfmt.exe) --statistics --verbose -o $@ $<"\r
+\r
+# DO NOT DELETE this line -- makedep depends on it!\r
+\r
+$(OUT)intl/intl-compat.o: ../intl/libgnuintl.h ../intl/gettextP.h \\r
+  ../intl/loadinfo.h ../intl/gettext.h\r
+\r
+$(OUT)intl/bindtextdom.o: ../intl/libgnuintl.h ../intl/gettextP.h \\r
+  ../intl/loadinfo.h ../intl/gettext.h\r
+\r
+$(OUT)intl/dcgettext.o: ../intl/gettextP.h ../intl/loadinfo.h \\r
+  ../intl/gettext.h ../intl/libgnuintl.h\r
+\r
+$(OUT)intl/dgettext.o: ../intl/gettextP.h ../intl/loadinfo.h \\r
+  ../intl/gettext.h ../intl/libgnuintl.h\r
+\r
+$(OUT)intl/gettext.o: ../intl/gettextP.h ../intl/loadinfo.h ../intl/gettext.h \\r
+  ../intl/libgnuintl.h\r
+\r
+$(OUT)intl/finddomain.o: ../intl/gettextP.h ../intl/loadinfo.h \\r
+  ../intl/gettext.h ../intl/libgnuintl.h\r
+\r
+$(OUT)intl/loadmsgcat.o: ../intl/gettext.h ../intl/gettextP.h \\r
+  ../intl/loadinfo.h ../intl/plural-exp.h\r
+\r
+$(OUT)intl/localealias.o: ../intl/gettextP.h ../intl/loadinfo.h \\r
+  ../intl/gettext.h\r
+\r
+$(OUT)intl/textdomain.o: ../intl/libgnuintl.h ../intl/gettextP.h \\r
+  ../intl/loadinfo.h ../intl/gettext.h\r
+\r
+$(OUT)intl/l10nflist.o: ../intl/loadinfo.h\r
+\r
+$(OUT)intl/explodename.o: ../intl/loadinfo.h\r
+\r
+$(OUT)intl/dcigettext.o: ../intl/gettextP.h ../intl/loadinfo.h \\r
+  ../intl/gettext.h ../intl/plural-exp.h ../intl/libgnuintl.h \\r
+  ../intl/hash-string.h ../intl/plural-eval.c\r
+\r
+$(OUT)intl/dcngettext.o: ../intl/gettextP.h ../intl/loadinfo.h \\r
+  ../intl/gettext.h ../intl/libgnuintl.h\r
+\r
+$(OUT)intl/dngettext.o: ../intl/gettextP.h ../intl/loadinfo.h \\r
+  ../intl/gettext.h ../intl/libgnuintl.h\r
+\r
+$(OUT)intl/ngettext.o: ../intl/gettextP.h ../intl/loadinfo.h \\r
+  ../intl/gettext.h ../intl/libgnuintl.h\r
+\r
+$(OUT)intl/plural.o: ../intl/plural-exp.h\r
+\r
+$(OUT)intl/plural-exp.o: ../intl/plural-exp.h\r
+\r
+$(OUT)intl/osdep.o: os2compat.c iconv.c iconv.h\r
+\r
+$(OUT)src/dir-list.o: config.h ../os2/os2compat.h ../src/dir-list.h \\r
+  ../lib/system.h ../src/str-list.h\r
+\r
+$(OUT)src/file-list.o: config.h ../os2/os2compat.h ../src/file-list.h \\r
+  ../src/str-list.h ../lib/error.h ../lib/system.h ../lib/getline.h \\r
+  ../intl/libgettext.h\r
+\r
+$(OUT)src/format-c.o: ../src/format.h ../src/pos.h ../src/message.h \\r
+  ../src/str-list.h ../lib/hash.h ../lib/xmalloc.h ../lib/error.h \\r
+  ../lib/progname.h ../intl/libgettext.h\r
+\r
+$(OUT)src/format-java.o: ../src/format.h ../src/pos.h ../src/message.h \\r
+  ../src/str-list.h ../lib/hash.h ../lib/c-ctype.h ../lib/xmalloc.h \\r
+  ../lib/error.h ../lib/progname.h ../intl/libgettext.h\r
+\r
+$(OUT)src/format-librep.o: ../src/format.h ../src/pos.h ../src/message.h \\r
+  ../src/str-list.h ../lib/hash.h ../lib/xmalloc.h ../lib/error.h \\r
+  ../lib/progname.h ../intl/libgettext.h\r
+\r
+$(OUT)src/format-lisp.o: ../src/format.h ../src/pos.h ../src/message.h \\r
+  ../src/str-list.h ../lib/hash.h ../lib/c-ctype.h ../lib/gcd.h \\r
+  ../lib/xmalloc.h ../lib/system.h ../lib/error.h ../lib/progname.h \\r
+  ../intl/libgettext.h\r
+\r
+$(OUT)src/format-pascal.o: ../src/format.h ../src/pos.h ../src/message.h \\r
+  ../src/str-list.h ../lib/hash.h ../lib/c-ctype.h ../lib/xmalloc.h \\r
+  ../lib/error.h ../lib/progname.h ../intl/libgettext.h\r
+\r
+$(OUT)src/format-python.o: ../src/format.h ../src/pos.h ../src/message.h \\r
+  ../src/str-list.h ../lib/hash.h ../lib/xmalloc.h ../lib/error.h \\r
+  ../lib/progname.h ../intl/libgettext.h\r
+\r
+$(OUT)src/format-ycp.o: ../src/format.h ../src/pos.h ../src/message.h \\r
+  ../src/str-list.h ../lib/hash.h ../lib/xmalloc.h ../lib/error.h \\r
+  ../lib/progname.h ../intl/libgettext.h\r
+\r
+$(OUT)src/format.o: ../src/format.h ../src/pos.h ../src/message.h \\r
+  ../src/str-list.h ../lib/hash.h\r
+\r
+$(OUT)src/hostname.o: config.h ../os2/os2compat.h ../lib/error.h \\r
+  ../lib/progname.h ../lib/basename.h ../lib/xmalloc.h ../lib/system.h \\r
+  ../intl/libgettext.h\r
+\r
+$(OUT)src/message.o: ../src/message.h ../src/str-list.h ../src/pos.h \\r
+  ../lib/hash.h ../lib/fstrcmp.h ../src/format.h ../lib/xmalloc.h \\r
+  ../lib/strstr.h ../lib/system.h\r
+\r
+$(OUT)src/msgl-ascii.o: config.h ../os2/os2compat.h ../src/msgl-ascii.h \\r
+  ../src/message.h ../src/str-list.h ../src/pos.h ../lib/hash.h \\r
+  ../lib/c-ctype.h\r
+\r
+$(OUT)src/msgl-cat.o: config.h ../os2/os2compat.h ../src/msgl-cat.h \\r
+  ../src/message.h ../src/str-list.h ../src/pos.h ../lib/hash.h \\r
+  ../lib/error.h ../lib/xerror.h ../src/read-po.h ../src/po-charset.h \\r
+  ../src/msgl-ascii.h ../src/msgl-equal.h ../src/msgl-iconv.h \\r
+  ../lib/xmalloc.h ../lib/strstr.h ../lib/basename.h ../lib/system.h \\r
+  ../intl/libgettext.h\r
+\r
+$(OUT)src/msgl-charset.o: config.h ../os2/os2compat.h ../src/msgl-charset.h \\r
+  ../src/message.h ../src/str-list.h ../src/pos.h ../lib/hash.h \\r
+  ../src/po-charset.h ../lib/error.h ../lib/progname.h ../lib/basename.h \\r
+  ../lib/xerror.h ../lib/strstr.h ../lib/system.h ../intl/libgettext.h\r
+\r
+$(OUT)src/msgl-english.o: config.h ../os2/os2compat.h ../src/msgl-english.h \\r
+  ../src/message.h ../src/str-list.h ../src/pos.h ../lib/hash.h \\r
+  ../lib/xmalloc.h\r
+\r
+$(OUT)src/msgl-equal.o: config.h ../os2/os2compat.h ../src/msgl-equal.h \\r
+  ../src/message.h ../src/str-list.h ../src/pos.h ../lib/hash.h\r
+\r
+$(OUT)src/msgl-iconv.o: config.h ../os2/os2compat.h ../src/msgl-iconv.h \\r
+  ../src/message.h ../src/str-list.h ../src/pos.h ../lib/hash.h \\r
+  ../lib/error.h ../lib/progname.h ../lib/basename.h ../src/po-charset.h \\r
+  ../src/msgl-ascii.h ../lib/xmalloc.h ../lib/strstr.h ../lib/system.h \\r
+  ../intl/libgettext.h\r
+\r
+$(OUT)src/open-po.o: ../src/open-po.h ../src/dir-list.h ../lib/error.h \\r
+  ../lib/system.h ../intl/libgettext.h\r
+\r
+$(OUT)src/plural-eval.o: ../intl/plural-exp.h ../intl/plural-eval.c\r
+\r
+$(OUT)src/plural.o: ../intl/plural.c ../intl/plural-exp.h \\r
+  ../intl/plural-exp.c\r
+\r
+$(OUT)src/po-charset.o: config.h ../os2/os2compat.h ../src/po-charset.h \\r
+  ../lib/error.h ../lib/xerror.h ../lib/basename.h ../lib/strstr.h \\r
+  ../lib/system.h ../intl/libgettext.h\r
+\r
+$(OUT)src/po-gram-gen.o: config.h ../os2/os2compat.h ../src/po-gram.h \\r
+  ../src/str-list.h ../src/po-lex.h ../lib/error.h ../lib/progname.h \\r
+  ../src/pos.h ../lib/xerror.h ../lib/xmalloc.h ../intl/libgettext.h \\r
+  ../src/po.h ../src/message.h ../lib/hash.h\r
+\r
+$(OUT)src/po-hash-gen.o: config.h ../os2/os2compat.h ../src/po-hash.h \\r
+  ../lib/xmalloc.h ../src/po.h ../src/po-lex.h ../lib/error.h \\r
+  ../lib/progname.h ../src/pos.h ../lib/xerror.h ../src/message.h \\r
+  ../src/str-list.h ../lib/hash.h\r
+\r
+$(OUT)src/po-lex.o: config.h ../os2/os2compat.h ../src/po-lex.h \\r
+  ../lib/error.h ../lib/progname.h ../src/pos.h ../lib/xerror.h \\r
+  ../lib/c-ctype.h ../lib/linebreak.h ../intl/libgettext.h \\r
+  ../src/str-list.h ../src/po-charset.h ../lib/xmalloc.h ../lib/system.h \\r
+  ../src/open-po.h ../src/po-gram-gen2.h ../lib/utf8-ucs4.h\r
+\r
+$(OUT)src/po-time.o: ../src/po-time.h ../lib/xerror.h ../lib/error.h\r
+\r
+$(OUT)src/po.o: config.h ../os2/os2compat.h ../src/po.h ../src/po-lex.h \\r
+  ../lib/error.h ../lib/progname.h ../src/pos.h ../lib/xerror.h \\r
+  ../src/message.h ../src/str-list.h ../lib/hash.h ../src/po-charset.h \\r
+  ../src/po-hash.h ../lib/xmalloc.h\r
+\r
+$(OUT)src/read-java.o: ../src/read-java.h ../src/message.h ../src/str-list.h \\r
+  ../src/pos.h ../lib/hash.h ../src/msgunfmt.h ../lib/javaexec.h \\r
+  ../lib/pipe.h ../lib/wait-process.h ../src/read-po.h ../lib/error.h \\r
+  ../lib/system.h ../intl/libgettext.h\r
+\r
+$(OUT)src/read-mo.o: ../src/read-mo.h ../src/message.h ../src/str-list.h \\r
+  ../src/pos.h ../lib/hash.h ../intl/gettext.h ../lib/error.h \\r
+  ../lib/xmalloc.h ../lib/system.h ../intl/libgettext.h\r
+\r
+$(OUT)src/read-po.o: ../src/read-po.h ../src/message.h ../src/str-list.h \\r
+  ../src/pos.h ../lib/hash.h ../src/po.h ../src/po-lex.h ../lib/error.h \\r
+  ../lib/progname.h ../lib/xerror.h ../lib/xmalloc.h ../intl/libgettext.h\r
+\r
+$(OUT)src/str-list.o: config.h ../os2/os2compat.h ../src/str-list.h \\r
+  ../lib/xmalloc.h\r
+\r
+$(OUT)src/urlget.o: config.h ../os2/os2compat.h ../lib/error.h \\r
+  ../lib/progname.h ../lib/basename.h ../lib/full-write.h ../lib/execute.h \\r
+  ../lib/javaexec.h ../lib/system.h ../intl/libgettext.h\r
+\r
+$(OUT)src/write-java.o: ../src/write-java.h ../src/message.h \\r
+  ../src/str-list.h ../src/pos.h ../lib/hash.h ../lib/c-ctype.h \\r
+  ../lib/error.h ../lib/javacomp.h ../lib/mkdtemp.h ../src/msgfmt.h \\r
+  ../src/msgl-iconv.h ../lib/pathmax.h ../intl/plural-exp.h \\r
+  ../src/po-charset.h ../lib/xmalloc.h ../lib/system.h ../lib/tmpdir.h \\r
+  ../lib/utf8-ucs4.h ../intl/libgettext.h\r
+\r
+$(OUT)src/write-mo.o: ../src/write-mo.h ../src/message.h ../src/str-list.h \\r
+  ../src/pos.h ../lib/hash.h ../src/msgfmt.h ../intl/gettext.h \\r
+  ../intl/hash-string.h ../lib/error.h ../lib/system.h ../intl/libgettext.h\r
+\r
+$(OUT)src/write-po.o: ../src/write-po.h ../src/message.h ../src/str-list.h \\r
+  ../src/pos.h ../lib/hash.h ../lib/c-ctype.h ../lib/linebreak.h \\r
+  ../src/msgl-ascii.h ../lib/xmalloc.h ../lib/strstr.h ../lib/system.h \\r
+  ../lib/error.h ../lib/xerror.h ../intl/libgettext.h\r
+\r
+$(OUT)src/x-c.o: config.h ../os2/os2compat.h ../src/message.h \\r
+  ../src/str-list.h ../src/pos.h ../lib/hash.h ../src/x-c.h \\r
+  ../src/xgettext.h ../lib/error.h ../lib/progname.h ../lib/xmalloc.h \\r
+  ../lib/system.h ../intl/libgettext.h\r
+\r
+$(OUT)src/x-java.o: ../src/message.h ../src/str-list.h ../src/pos.h \\r
+  ../lib/hash.h ../src/x-java.h ../src/xgettext.h ../lib/xmalloc.h \\r
+  ../lib/strstr.h\r
+\r
+$(OUT)src/x-librep.o: config.h ../os2/os2compat.h ../src/message.h \\r
+  ../src/str-list.h ../src/pos.h ../lib/hash.h ../src/x-librep.h \\r
+  ../src/xgettext.h ../lib/error.h ../lib/xmalloc.h ../lib/system.h \\r
+  ../intl/libgettext.h\r
+\r
+$(OUT)src/x-lisp.o: config.h ../os2/os2compat.h ../src/message.h \\r
+  ../src/str-list.h ../src/pos.h ../lib/hash.h ../src/x-lisp.h \\r
+  ../src/xgettext.h ../lib/error.h ../lib/xmalloc.h ../lib/system.h \\r
+  ../intl/libgettext.h\r
+\r
+$(OUT)src/x-po.o: ../src/message.h ../src/str-list.h ../src/pos.h \\r
+  ../lib/hash.h ../src/x-po.h ../src/xgettext.h ../lib/xmalloc.h \\r
+  ../src/po.h ../src/po-lex.h ../lib/error.h ../lib/progname.h \\r
+  ../lib/xerror.h ../intl/libgettext.h\r
+\r
+$(OUT)src/x-rst.o: config.h ../os2/os2compat.h ../src/message.h \\r
+  ../src/str-list.h ../src/pos.h ../lib/hash.h ../src/x-rst.h \\r
+  ../src/xgettext.h ../lib/error.h ../lib/progname.h ../lib/xmalloc.h \\r
+  ../lib/system.h ../intl/libgettext.h\r
+\r
+$(OUT)src/x-ycp.o: config.h ../os2/os2compat.h ../src/message.h \\r
+  ../src/str-list.h ../src/pos.h ../lib/hash.h ../src/x-ycp.h \\r
+  ../src/xgettext.h ../lib/error.h ../lib/xmalloc.h ../lib/system.h \\r
+  ../intl/libgettext.h\r
index e3934b85b65d65710455fd3e28db2ba5c96c8f54..1b2cb0fb454f3c03be48ef7b480e05014e608093 100644 (file)
@@ -12,8 +12,9 @@ The library has been compiled with -Zmt flag, but it doesn't matter as soon
 as you use the EMX single-threaded runtime fix (emx-strt-fix-0.0.2.zip).
 
 The library is fully compatible with the previous port of gettext library
-which is largely used especialy by XFree86 programs. All the old programs
-that I have with gettext support run fine with the new version of the DLL.
+(0.10.35) which is largely used especialy by XFree86/2 programs. All the
+old programs that I have with gettext support run fine with the new version
+of the DLL.
 
 
 Installation
@@ -28,8 +29,14 @@ If you use the UNIXROOT environment variable, the default catalogue search
 paths will be like on Unices, e.g. $(UNIXROOT)/usr/lib and
 $(UNIXROOT)/usr/share/locale. GNULOCALEDIR always overrides this.
 
-Also this port supports character set conversions. This means that if your
-.mo files were written using new gettext guidelines, e.g. they contain a
+Now if you haven't did it earlier, set the language identifier that you use.
+This is done by adding a "SET LANG=xxx" environment setting to your CONFIG.SYS,
+where xxx is the identifier of your language (example: en_UK for English in UK,
+ru_RU for Russian in Russia. Also you can use names like "russian", "italian"
+and so on - see the share/locale/locale.alias file).
+
+This port of gettext supports character set conversions. This means that if
+your .mo files were written using new gettext guidelines, e.g. they contain a
 message like this:
 
 msgid ""
@@ -43,21 +50,22 @@ performs the translation from CP878 -> CP866 for every message.
 
 If you want to override the character set used to output messages (for example
 in XFree86 for Russian the KOI8-R encoding (codepage 878) is used) you can
-set the OUTPUT_CHARSET environment variable like this:
+set the output character set by adding a postfix to the LANG environment
+variable, this way:
 
-set OUTPUT_CHARSET=KOI8-R
+set LANG=ru_RU.KOI8-R
 
 or (equivalent):
 
-set OUTPUT_CHARSET=CP878
+set LANG=ru_RU.CP878
 
 or (same effect):
 
-set OUTPUT_CHARSET=IBM-878
+set LANG=ru_RU.IBM-878
 
-Note that you don't need to set the OUTPUT_CHARSET initially; you may want to
-set it just if you want to override the OS/2 active codepage (for example,
-you can put it into your XFree86 startup script).
+If the output character set is ommited from the LANG variable, the default
+codepage is queried by using the OS/2 API; you may want to set it just if you
+want to override the OS/2 active codepage.
 
 
 XFree86 setup
@@ -68,7 +76,7 @@ XFree86 default character set (e.g. for Russain CP866 vs KOI8-R), you can add
 the following (or similar) statement to your startx.cmd file (after the
 commands dealing with HOME and X11SHELL):
 
-call VALUE 'OUTPUT_CHARSET', 'KOI8-R', env
+call VALUE 'LANG', 'ru_RU.KOI8-R', env
 
 Otherwise you can get incorrect (wrong codepage) output from programs that
 previously worked (e.g. GIMP 1.22). This is because earlier versions of gettext
@@ -80,12 +88,17 @@ Implementation remarks
 
 The codepage conversion code uses OS/2 Unicode API, thus it falls under the
 limits that OS/2 Unicode API has. For example, OS/2 Unicode API does not
-support the BIG5 Chinese character set nor ISO-8859-X where X > 9 (at least
-with Warp4 with fixpack 14 that I have). Also libintl relies on a feature of
-the GNU iconv which works differently in OS/2 Unicode API (well, someone may
-call it even a bug in OS/2 API); as a results it is impossible to msgfmt any
-.po files written in the UTF-8 character set; if someone is interested I can
-explain the bug more detailed.
+support the BIG5 East Asian character set nor ISO-8859-X where X > 9 (at
+least with Warp4 with fixpack 14 that I have). If someone knows the
+OS/2 API identifiers for BIG5 or ISO8859-10,... encodings, please tell me!
+
+Since gettext 0.11 iconv emulation layer supports correctly UTF-8. Also
+I have added theoretical support for the following East Asian encodings:
+EUC-JP, EUC-KR, EUC-TW, EUC-CN. However, these encodings are (I believe)
+supported only on East Asian editions of OS/2. The code pages for them are
+listed in the \language\codepage\ucstbl.lst file but the codepage files
+themselves are missing; I believe they are ommited from European OS/2's
+due to their large size.
 
 
 Additional API
@@ -97,48 +110,50 @@ to convert text between various codepages. The intl.h header file contains
 the prototypes and definitions needed for iconv(); if you configure software
 with autoconf it possibly will find intl.h and set up the software accordingly.
 
-Also it provides an limited implementation of the nl_langinfo function which
-is used for querying the active system codepage. Other software may find it
-useful as well.
-
-All these functions are exported from INTL.DLL, thus if you use either iconv
-or nl_langinfo you should link with it (-lintl).
+All these functions are exported from INTL.DLL. The iconv.a import library
+imports all the iconv* functions from INTL.DLL. So, like on Unix, now you can
+#include <iconv.h>, then link with -liconv and you will get a fully functional
+iconv implementation.
 
 
 Rebuilding the library
 ======================
 
-The library is quite easy to rebuild. First of all, get and install the
-original source code package, as of today it is gettext-0.10.40. Now copy
-the contents of the src/gettext-$(VERSION)/ directory on top of the source
-tree, e.g. intl/os2compat.c goes into the respective intl/ directory of the
-original source package. As of today the support/ directory is missing from
-the gettext source tree, thus you should just copy it recursively into the
-root directory of the source code.
+The library is quite easy to rebuild. Since the OS/2 support is provided now
+out-of-the-box in gettext, you just have to download and unpack the source
+archive. Now there are two ways to rebuild the gettext library:
+
+1. If you're a masochist you can go the clumsy configure/make Unix way. This
+is not recommended however as I found no way to tell libtool to generate a
+slightly non-standard DLL which will be backward compatible with gettext
+0.10.35. The compatibility is achieved by prepending backward.def to the
+export definition file generated with emximp or somehow else. Thus it is
+highly recommended you build using the second way, if it is possible.
+
+2. Go to os2 and just run `make'. If you have all the required tools,
+it should painlessly compile. Finally, if you want a binary distribution
+archive, do `make distr'. The weak side of building this way is that makefile
+is somewhat fragile. This means that if the makefile is left unmodified and
+a new version of gettext is rolled out, it *may* not work. But every possible
+attempt was made to ensure that the makefile takes most important build
+parameters from their autoconf counterparts.
+
+WARNING: Due to bugs in GNU Make 3.76.1 (at least in its OS/2 port) you can
+get sometimes (depending on make version and makefile modification :) funny
+messages like these:
 
-Now apply the diff file, and resolve any conflicts (if you happen to compile
-a newer version than the one the diff is supplied for).
-
-Now if you're a masochist you can go the clumsy configure/make Unix way, but
-it is highly recommended to use an alternate way: go to support/os2 and just
-run `make'. If you have all the required tools, it should painlessly compile.
-Now if you want a binary distribution archive, do `make distr'.
+zip warning: name not matched: emx/src/gettext-0.10.40/support/os2/iconv.h
 
-WARNING: Due to a bug in GNU Make 3.76.1 (at least in its OS/2 port) you will
-have to do sometimes "make distr" twice to get a complete distribution archive;
-if you see warnings from zip like these:
+or even:
 
-zip warning: name not matched: emx/src/gettext-0.10.40/support/os2/iconv.h
-zip warning: name not matched: emx/src/gettext-0.10.40/support/os2/langinfo.h
+*** No rule to make target `out/release/intl.a', needed by `all'.  Stop.
 
-it is best to interrupt zip and re-run make distr once more time. This happens
-because make fails to execute two different rules that tells him to make two
-different destination files from the same source file (e.g. iconv.h is copied
-both to emx/src/gettext/support/os2 and to emx/include).
+Such messages are a bad joke. Ignore it, and re-run make. This is a
+long-standing bug in GNU make, alas.
 
-If you want a debug version of library, you can do `make install DEBUG=1'.
+If you want a debug version of library, you can do `make DEBUG=1'.
 
-If you have no LxLite tool installed, do `make LXLITE=0'
+If you don't have the LxLite tool installed, do `make LXLITE=0'
 
 NB: For best results, it is highly recommended that you use at least emxbind.exe
 and ld.exe from gcc 3.0.2 or later, since they contain a number of fixes that
diff --git a/os2/configure.awk b/os2/configure.awk
new file mode 100644 (file)
index 0000000..08127ac
--- /dev/null
@@ -0,0 +1,83 @@
+#!/usr/bin/gawk -f\r
+# A script for emulating configure on OS/2 without having even a Unix-like\r
+# shell. Designed specifically for compiling libgettext with gcc+emx.\r
+\r
+BEGIN{\r
+  print "/* config.h.  Generated automatically by configure.awk.  */"\r
+\r
+  cfg["HAVE_ALLOCA"] = 1;\r
+  cfg["HAVE_ALLOCA_H"] = 1;\r
+  cfg["HAVE_LONG_FILE_NAMES"] = 1;\r
+  cfg["HAVE_VPRINTF"] = 1;\r
+  cfg["STDC_HEADERS"] = 1;\r
+  cfg["HAVE_GETCWD"] = 1;\r
+  cfg["HAVE_GETEGID"] = 1;\r
+  cfg["HAVE_GETEUID"] = 1;\r
+  cfg["HAVE_GETGID"] = 1;\r
+  cfg["HAVE_GETPAGESIZE"] = 1;\r
+  cfg["HAVE_GETUID"] = 1;\r
+  cfg["HAVE_ISASCII"] = 1;\r
+  cfg["HAVE_MBLEN"] = 1;\r
+  cfg["HAVE_MEMCPY"] = 1;\r
+  cfg["HAVE_MEMMOVE"] = 1;\r
+  cfg["HAVE_MEMSET"] = 1;\r
+  cfg["HAVE_PUTENV"] = 1;\r
+  cfg["HAVE_SETLOCALE"] = 1;\r
+  cfg["HAVE_STRCHR"] = 1;\r
+  cfg["HAVE_STRCSPN"] = 1;\r
+  cfg["HAVE_STRDUP"] = 1;\r
+  cfg["HAVE_STRERROR"] = 1;\r
+  cfg["HAVE_STRSTR"] = 1;\r
+  cfg["HAVE_STRTOUL"] = 1;\r
+  cfg["HAVE_UNAME"] = 1;\r
+  cfg["HAVE_LIMITS_H"] = 1;\r
+  cfg["HAVE_LOCALE_H"] = 1;\r
+  cfg["HAVE_MALLOC_H"] = 1;\r
+  cfg["HAVE_STDDEF_H"] = 1;\r
+  cfg["HAVE_STDLIB_H"] = 1;\r
+  cfg["HAVE_STRING_H"] = 1;\r
+  cfg["HAVE_SYS_PARAM_H"] = 1;\r
+  cfg["HAVE_UNISTD_H"] = 1;\r
+  cfg["HAVE_GETTIMEOFDAY"] = 1;\r
+  cfg["HAVE_PATHCONF"] = 1;\r
+  cfg["HAVE_RAISE"] = 1;\r
+  cfg["HAVE_SELECT"] = 1;\r
+  cfg["HAVE_STRPBRK"] = 1;\r
+  cfg["HAVE_UTIME"] = 1;\r
+  cfg["HAVE_UTIMES"] = 1;\r
+  cfg["HAVE_WAITPID"] = 1;\r
+  cfg["HAVE_ARPA_INET_H"] = 1;\r
+  cfg["HAVE_DIRENT_H"] = 1;\r
+  cfg["HAVE_FCNTL_H"] = 1;\r
+  cfg["HAVE_SYS_TIME_H"] = 1;\r
+  cfg["HAVE_TIME_H"] = 1;\r
+  cfg["HAVE_POSIX_SIGNALBLOCKING"] = 1;\r
+  cfg["HAVE_ERRNO_DECL"] = 1;\r
+  cfg["HAVE_ICONV"] = 1;\r
+  cfg["ICONV_CONST"] = "const";\r
+  cfg["_GNU_SOURCE"] = 1;\r
+  cfg["HAVE_C_BACKSLASH_A"] = 1;\r
+  cfg["HAVE_UNSIGNED_LONG_LONG"] = 1;\r
+  cfg["HAVE_PTRDIFF_T"] = 1;\r
+  cfg["vfork"] = "fork";\r
+  cfg["uintmax_t"] = "unsigned long long";\r
+  cfg["HAVE_DECL_WCWIDTH"] = 0;\r
+  cfg["mbstate_t"] = "int";\r
+  cfg["SETLOCALE_CONST"] = "const";\r
+  cfg["ENABLE_NLS"] = 1;\r
+\r
+  cfg["PACKAGE"] = "\""PACKAGE"\"";\r
+  cfg["VERSION"] = "\""VERSION"\"";\r
+}\r
+\r
+/^#undef/ {\r
+  if (cfg[$2] != "")\r
+    print "#define "$2" "cfg[$2];\r
+  else\r
+    print "/* #undef "$2" */";\r
+  next\r
+}\r
+\r
+{\r
+  print $0\r
+}\r
index b098a966614d727083c2475372da1b00788a6cbf..f26ab456db19cf5eb4c59ea66e2585c0a3bf0698 100644 (file)
@@ -1,5 +1,5 @@
 /* OS/2 iconv() implementation through OS/2 Unicode API
-   Copyright (C) 2001 Free Software Foundation, Inc.
+   Copyright (C) 2001-2002 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify it
    under the terms of the GNU Library General Public License as published
 
 typedef struct _iconv_t
 {
-  UconvObject from;
-  UconvObject to;
+  UconvObject from;            /* "From" conversion handle */
+  UconvObject to;              /* "To" conversion handle */
 } *iconv_t;
 
 /* Tell "iconv.h" to not define iconv_t by itself.  */
 #define _ICONV_T
 #include "iconv.h"
 
+#include <errno.h>
 #include <alloca.h>
 
 /* Convert an encoding name to te form understood by UniCreateUconvObject.  */
@@ -40,19 +41,30 @@ cp_convert (const char *cp, UniChar *ucp)
 {
   size_t sl = 0;
 
-  /* Transform CPXXX naming style to IBM-XXX style */
-  if ((cp[0] == 'C' || cp[0] == 'c') && (cp[1] == 'P' || cp[1] == 'p'))
+  if (!strcasecmp (cp, "EUC-JP"))
+    memcpy (ucp, L"IBM-954", 8*2);
+  else if (!strcasecmp (cp, "EUC-KR"))
+    memcpy (ucp, L"IBM-970", 8*2);
+  else if (!strcasecmp (cp, "EUC-TW"))
+    memcpy (ucp, L"IBM-964", 8*2);
+  else if (!strcasecmp (cp, "EUC-CN"))
+    memcpy (ucp, L"IBM-1383", 9*2);
+  else
     {
-      ucp[sl++] = 'I';
-      ucp[sl++] = 'B';
-      ucp[sl++] = 'M';
-      ucp[sl++] = '-';
-      cp += 2;
-    }
+      /* Transform CPXXX naming style to IBM-XXX style */
+      if ((cp[0] == 'C' || cp[0] == 'c') && (cp[1] == 'P' || cp[1] == 'p'))
+        {
+          ucp[sl++] = 'I';
+          ucp[sl++] = 'B';
+          ucp[sl++] = 'M';
+          ucp[sl++] = '-';
+          cp += 2;
+        }
 
-  while (*cp != '\0')
-    ucp[sl++] = *cp++;
-  ucp[sl] = 0;
+      while (*cp != '\0')
+        ucp[sl++] = *cp++;
+      ucp[sl] = 0;
+    }
 }
 
 iconv_t
@@ -60,6 +72,7 @@ iconv_open (const char *cp_to, const char *cp_from)
 {
   UniChar *ucp;
   iconv_t conv;
+  uconv_attribute_t attr;
 
   conv = (iconv_t) malloc (sizeof (struct _iconv_t));
   if (conv == NULL)
@@ -87,6 +100,16 @@ iconv_open (const char *cp_to, const char *cp_from)
       return (iconv_t)(-1);
     }
 
+  UniQueryUconvObject (conv->from, &attr, sizeof (attr), NULL, NULL, NULL);
+  /* Do not treat 0x7f as a control character
+     (don't understand what it exactly means but without it MBCS prefix
+     character detection sometimes could fail (when 0x7f is a prefix)).
+     And don't treat the string as a path (the docs also don't explain
+     what it exactly means, but I'm pretty sure converted texts will
+     mostly not be paths).  */
+  attr.converttype &= ~(CVTTYPE_CTRL7F | CVTTYPE_PATH);
+  UniSetUconvObject (conv->from, &attr);
+
   return conv;
 }
 
@@ -95,23 +118,24 @@ iconv (iconv_t conv,
        const char **in, size_t *in_left,
        char **out, size_t *out_left)
 {
-  size_t bytes_converted = 0;
   int rc;
   size_t sl = *in_left, nonid;
   UniChar *ucs = (UniChar *) alloca (sl * sizeof (UniChar));
   UniChar *orig_ucs = ucs;
+  size_t retval = 0;
 
-  rc = UniUconvToUcs (conv->from, (void **)in, in_left, &ucs, &sl, &nonid);
+  rc = UniUconvToUcs (conv->from, (void **)in, in_left, &ucs, &sl, &retval);
   if (rc)
     goto error;
   sl = ucs - orig_ucs;
   ucs = orig_ucs;
-  /* Uh-oh, seems like a bug in UniUconvFromUcs, at least when
-     translating from KOI8-R to KOI8-R (null translation) */
-#if 0
+  /* UniUconvFromUcs will stop at first NULL byte
+     while we want ALL the bytes converted.  */
+#if 1
   rc = UniUconvFromUcs (conv->to, &ucs, &sl, (void **)out, out_left, &nonid);
   if (rc)
     goto error;
+  retval += nonid;
 #else
   while (sl)
     {
@@ -121,6 +145,7 @@ iconv (iconv_t conv,
       rc = UniUconvFromUcs (conv->to, &ucs, &usl, (void **)out, out_left, &nonid);
       if (rc)
         goto error;
+      retval += nonid;
       if (sl && *out_left)
         {
           *(*out)++ = 0;
@@ -130,8 +155,24 @@ iconv (iconv_t conv,
     }
 #endif
   return 0;
- error:
-  errno = EILSEQ;
+
+error:
+  /* Convert OS/2 error code to errno.  */
+  switch (rc)
+  {
+    case ULS_ILLEGALSEQUENCE:
+      errno = EILSEQ;
+      break;
+    case ULS_INVALID:
+      errno = EINVAL;
+      break;
+    case ULS_BUFFERFULL:
+      errno = E2BIG;
+      break;
+    default:
+      errno = EBADF;
+      break;
+  }
   return (size_t)(-1);
 }