tng         2002/08/19 11:35:56

  Modified:    c/src/xercesc Makefile.incl configure configure.in
                        runConfigure
               c/src/xercesc/util AutoSense.hpp Makefile.in
               c/src/xercesc/util/Platforms Makefile.in
               c/src/xercesc/util/Platforms/Win32 Win32PlatformUtils.cpp
  Added:       c/src/xercesc/util/Platforms/Win32 Makefile.in
               c/src/xercesc/util/Transcoders/Cygwin CygwinTransService.cpp
                        CygwinTransService.hpp Makefile.in
  Log:
  [Bug 6467] Installing Xerces C++ on cygwin environment.
  
  Revision  Changes    Path
  1.22      +23 -1     xml-xerces/c/src/xercesc/Makefile.incl
  
  Index: Makefile.incl
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/Makefile.incl,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- Makefile.incl     19 Aug 2002 14:52:32 -0000      1.21
  +++ Makefile.incl     19 Aug 2002 18:35:56 -0000      1.22
  @@ -460,6 +460,28 @@
        SHLIBSUFFIX=.dylib
   endif
   
  +#=============== CygWin SPECIFIC OPTIONS =========================
  +ifeq (${PLATFORM}, CYGWIN)
  +      PLATFORM_COMPILE_OPTIONS = \
  +              -D__${PLATFORM}__ \
  +              -I/usr/include \
  +              -I/usr/include/w32api
  +      MAKE_SHARED = ${CXX} -shared ${LDFLAGS}
  +      MAKE_SHARED_C = ${CC} -shared ${LDFLAGS}
  +      ifeq (${TRANSCODER}, ICU)
  +              ALLLIBS = ${LIBS} -L/usr/lib -L/usr/local/lib -L/usr/ccs/lib -licu-uc 
-licudata -lc
  +      else
  +              ALLLIBS = ${LIBS} -L/usr/lib
  +      endif
  +      EXTRA_LINK_OPTIONS = \
  +              -Xlinker --warn-once \
  +              -Xlinker -Map -Xlinker $(XML_LIB_DIR)/${LIBNAME}${VER}.map \
  +              -Xlinker --output-def -Xlinker $(XML_LIB_DIR)/${LIBNAME}${VER}.def \
  +              -Xlinker --out-implib -Xlinker $(XML_LIB_DIR)/${LIBNAME}${VER}.lib
  +        SHLIBSUFFIX=.dll
  +endif
  +
  +
   ###################### SO_NAME ####################################
   #
   #
  
  
  
  1.7       +5 -0      xml-xerces/c/src/xercesc/configure
  
  Index: configure
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/configure,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- configure 26 Jul 2002 16:49:26 -0000      1.6
  +++ configure 19 Aug 2002 18:35:56 -0000      1.7
  @@ -1276,6 +1276,7 @@
           *-*-OS400*)     platform=OS400 ;;
           *-*-osf*)            platform=TRU64 ;;
           *-apple-*)           platform=MACOSX ;;
  +        *-*-cygwin*)    platform=CYGWIN ;;
           *)              platform=UNKNOWN ;;
   esac
   
  @@ -1438,6 +1439,7 @@
   
   trap 'rm -fr `echo "Makefile \
   util/Makefile \
  +util/Transcoders/Cygwin/Makefile \
   util/Transcoders/ICU/Makefile \
   util/Transcoders/Iconv/Makefile \
   util/Transcoders/Iconv390/Makefile \
  @@ -1458,6 +1460,7 @@
   util/Platforms/UnixWare/Makefile \
   util/Platforms/Tru64/Makefile \
   util/Platforms/MacOS/Makefile \
  +util/Platforms/Win32/Makefile \
   util/Compilers/Makefile \
   util/MsgLoaders/InMemory/Makefile \
   util/MsgLoaders/ICU/Makefile \
  @@ -1586,6 +1589,7 @@
   
   CONFIG_FILES=\${CONFIG_FILES-"Makefile \
   util/Makefile \
  +util/Transcoders/Cygwin/Makefile \
   util/Transcoders/ICU/Makefile \
   util/Transcoders/Iconv/Makefile \
   util/Transcoders/Iconv390/Makefile \
  @@ -1606,6 +1610,7 @@
   util/Platforms/UnixWare/Makefile \
   util/Platforms/Tru64/Makefile \
   util/Platforms/MacOS/Makefile \
  +util/Platforms/Win32/Makefile \
   util/Compilers/Makefile \
   util/MsgLoaders/InMemory/Makefile \
   util/MsgLoaders/ICU/Makefile \
  
  
  
  1.9       +3 -0      xml-xerces/c/src/xercesc/configure.in
  
  Index: configure.in
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/configure.in,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- configure.in      8 Aug 2002 19:34:04 -0000       1.8
  +++ configure.in      19 Aug 2002 18:35:56 -0000      1.9
  @@ -54,6 +54,7 @@
           *-*-OS400*)     platform=OS400 ;;
           *-*-osf*)            platform=TRU64 ;;
           *-apple-*)           platform=MACOSX ;;
  +        *-*-cygwin*)    platform=CYGWIN ;;
           *)              platform=UNKNOWN ;;
   esac
   AC_SUBST(platform)
  @@ -108,6 +109,7 @@
   dnl output the Makefiles
   AC_OUTPUT([Makefile \
   util/Makefile \
  +util/Transcoders/Cygwin/Makefile \
   util/Transcoders/ICU/Makefile \
   util/Transcoders/Iconv/Makefile \
   util/Transcoders/Iconv390/Makefile \
  @@ -128,6 +130,7 @@
   util/Platforms/UnixWare/Makefile \
   util/Platforms/Tru64/Makefile \
   util/Platforms/MacOS/Makefile \
  +util/Platforms/Win32/Makefile \
   util/Compilers/Makefile \
   util/MsgLoaders/InMemory/Makefile \
   util/MsgLoaders/ICU/Makefile \
  
  
  
  1.16      +7 -4      xml-xerces/c/src/xercesc/runConfigure
  
  Index: runConfigure
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/runConfigure,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- runConfigure      11 Jul 2002 15:56:30 -0000      1.15
  +++ runConfigure      19 Aug 2002 18:35:56 -0000      1.16
  @@ -86,7 +86,7 @@
       echo "       where options may be any of the following:"
       echo "       -p <platform> (accepts 'aix', 'linux', 'freebsd', 'solaris',
               'hp-10', 'hp-11', 'openserver', 'unixware', 'os400', 'irix',
  -            'ptx', 'tru64', 'macosx')"
  +            'ptx', 'tru64', 'macosx'. 'cygwin')"
       echo "       -c <C compiler name> (e.g. gcc, cc, xlc_r, icc or ecc)"
       echo "       -x <C++ compiler name> (e.g. g++, CC, xlC_r, icc or ecc)"
       echo "       -d (specifies that you want to build debug version)"
  @@ -227,7 +227,7 @@
   #
   
   case $platform in
  -   aix | openserver | unixware | linux | freebsd | solaris | hp-10 | hp-11 | os400 
| irix | ptx | tru64 | macosx)
  +   aix | openserver | unixware | linux | freebsd | solaris | hp-10 | hp-11 | os400 
| irix | ptx | tru64 | macosx | cygwin)
          # platform has been recognized
          ;;
      *)
  @@ -445,7 +445,10 @@
          TRANSCODER=IconvFBSD ;
          transcodingDefines="-DXML_USE_LIBICONV -I/usr/local/include" ;;
      native)
  -       if test $platform = "freebsd"; then
  +     if test $platform = "cygwin"; then
  +         TRANSCODER=Cygwin ;
  +         transcodingDefines="-DXML_USE_CYGWIN_TRANSCODER" ;
  +     elif test $platform = "freebsd"; then
              TRANSCODER=IconvFBSD ;
          fi ;;
      *)
  
  
  
  1.5       +11 -2     xml-xerces/c/src/xercesc/util/AutoSense.hpp
  
  Index: AutoSense.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/AutoSense.hpp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- AutoSense.hpp     12 Jul 2002 16:48:49 -0000      1.4
  +++ AutoSense.hpp     19 Aug 2002 18:35:56 -0000      1.5
  @@ -56,6 +56,9 @@
   
   /*
    * $Log$
  + * Revision 1.5  2002/08/19 18:35:56  tng
  + * [Bug 6467] Installing Xerces C++ on cygwin environment.
  + *
    * Revision 1.4  2002/07/12 16:48:49  jberry
    * Remove reliance on XML_MACOSX. XML_MACOS is used solely. Where qualification
    * by compiler is required, look for the compiler explicitly such as with
  @@ -206,7 +209,7 @@
       #define XML_TANDEM
       #define XML_UNIX
       #define XML_CSET
  -#elif defined(_WIN32) || defined(WIN32)
  +#elif defined(_WIN32) || defined(WIN32) || defined(__CYGWIN__)
       #define XML_WIN32
       #ifndef WIN32
         #define WIN32
  @@ -253,7 +256,7 @@
       #else
           #error Code requires port to current development environment
       #endif
  -#elif defined (__GNUG__) || defined(__linux__)
  +#elif defined (__GNUG__) || defined(__linux__) || defined(__CYGWIN__)
       #define XML_GCC
   #elif defined(XML_HPUX)
       #if defined(EXM_HPUX)
  
  
  
  1.12      +10 -3     xml-xerces/c/src/xercesc/util/Makefile.in
  
  Index: Makefile.in
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/Makefile.in,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- Makefile.in       26 Jul 2002 16:49:27 -0000      1.11
  +++ Makefile.in       19 Aug 2002 18:35:56 -0000      1.12
  @@ -55,6 +55,9 @@
   #
   #
   # $Log$
  +# Revision 1.12  2002/08/19 18:35:56  tng
  +# [Bug 6467] Installing Xerces C++ on cygwin environment.
  +#
   # Revision 1.11  2002/07/26 16:49:27  tng
   # [Bug 2681] Can't build with gcc/g++ not named 'gcc'/'g++'.  Patch from Jonathan 
Lennox.
   #
  @@ -302,8 +305,8 @@
   MODULE = util
   
   ifeq (${TRANSCODER},NATIVE)
  -     ifeq (${PLATFORM},MACOSX)
  -             TRANSCODERMODULE=MacOSUnicodeConverter
  +    ifeq (${PLATFORM},MACOSX)
  +        TRANSCODERMODULE=MacOSUnicodeConverter
       else
           TRANSCODERMODULE=Iconv
       endif
  @@ -320,7 +323,11 @@
                    ifeq (${TRANSCODER},IconvFBSD)
                        TRANSCODERMODULE=IconvFBSD
                    else
  -                     TRANSCODERMODULE=Iconv
  +                       ifeq (${TRANSCODER},Cygwin)
  +                           TRANSCODERMODULE=Cygwin
  +                       else
  +                         TRANSCODERMODULE=Iconv
  +                     endif
                    endif
                endif
           endif
  
  
  
  1.5       +6 -0      xml-xerces/c/src/xercesc/util/Platforms/Makefile.in
  
  Index: Makefile.in
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/Platforms/Makefile.in,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- Makefile.in       26 Jul 2002 16:49:28 -0000      1.4
  +++ Makefile.in       19 Aug 2002 18:35:56 -0000      1.5
  @@ -55,6 +55,9 @@
   #
   #
   # $Log$
  +# Revision 1.5  2002/08/19 18:35:56  tng
  +# [Bug 6467] Installing Xerces C++ on cygwin environment.
  +#
   # Revision 1.4  2002/07/26 16:49:28  tng
   # [Bug 2681] Can't build with gcc/g++ not named 'gcc'/'g++'.  Patch from Jonathan 
Lennox.
   #
  @@ -180,6 +183,9 @@
   endif
   ifeq (${PLATFORM}, MACOSX)
       SUBMODULE = MacOS
  +endif
  +ifeq (${PLATFORM}, CYGWIN)
  +    SUBMODULE = Win32
   endif
   
   includes::
  
  
  
  1.7       +44 -40    
xml-xerces/c/src/xercesc/util/Platforms/Win32/Win32PlatformUtils.cpp
  
  Index: Win32PlatformUtils.cpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xerces/c/src/xercesc/util/Platforms/Win32/Win32PlatformUtils.cpp,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- Win32PlatformUtils.cpp    18 Jul 2002 21:07:22 -0000      1.6
  +++ Win32PlatformUtils.cpp    19 Aug 2002 18:35:56 -0000      1.7
  @@ -1,37 +1,37 @@
   /*
    * The Apache Software License, Version 1.1
  - * 
  - * Copyright (c) 1999-2000 The Apache Software Foundation.  All rights
  + *
  + * Copyright (c) 1999-2002 The Apache Software Foundation.  All rights
    * reserved.
  - * 
  + *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions
    * are met:
  - * 
  + *
    * 1. Redistributions of source code must retain the above copyright
  - *    notice, this list of conditions and the following disclaimer. 
  - * 
  + *    notice, this list of conditions and the following disclaimer.
  + *
    * 2. Redistributions in binary form must reproduce the above copyright
    *    notice, this list of conditions and the following disclaimer in
    *    the documentation and/or other materials provided with the
    *    distribution.
  - * 
  + *
    * 3. The end-user documentation included with the redistribution,
  - *    if any, must include the following acknowledgment:  
  + *    if any, must include the following acknowledgment:
    *       "This product includes software developed by the
    *        Apache Software Foundation (http://www.apache.org/)."
    *    Alternately, this acknowledgment may appear in the software itself,
    *    if and wherever such third-party acknowledgments normally appear.
  - * 
  + *
    * 4. The names "Xerces" and "Apache Software Foundation" must
    *    not be used to endorse or promote products derived from this
  - *    software without prior written permission. For written 
  + *    software without prior written permission. For written
    *    permission, please contact apache\@apache.org.
  - * 
  + *
    * 5. Products derived from this software may not be called "Apache",
    *    nor may "Apache" appear in their name, without prior written
    *    permission of the Apache Software Foundation.
  - * 
  + *
    * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
    * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
    * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  @@ -45,7 +45,7 @@
    * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    * SUCH DAMAGE.
    * ====================================================================
  - * 
  + *
    * This software consists of voluntary contributions made by many
    * individuals on behalf of the Apache Software Foundation, and was
    * originally based on software copyright (c) 1999, International
  @@ -88,6 +88,8 @@
       #include <xercesc/util/Transcoders/ICU/ICUTransService.hpp>
   #elif defined (XML_USE_WIN32_TRANSCODER)
       #include <xercesc/util/Transcoders/Win32/Win32TransService.hpp>
  +#elif defined (XML_USE_CYGWIN_TRANSCODER)
  +    #include <xercesc/util/Transcoders/Cygwin/CygwinTransService.hpp>
   #else
       #error A transcoding service must be chosen
   #endif
  @@ -97,7 +99,7 @@
   //  They allow this to be controlled from the build process by just defining
   //  one of these values.
   //
  -#if defined (XML_USE_INMEMORY_MSGLOADER)
  +#if defined (XML_USE_INMEM_MESSAGELOADER)
       #include <xercesc/util/MsgLoaders/InMemory/InMemMsgLoader.hpp>
   #elif defined (XML_USE_WIN32_MSGLOADER)
       #include <xercesc/util/MsgLoaders/Win32/Win32MsgLoader.hpp>
  @@ -260,14 +262,14 @@
       //  with a thorny problem. Shift-JIS and some other Asian encodings
       //  are fundamentally broken and map both the backslash and the Yen
       //  sign to the same code point. Transcoders have to pick one or the
  -    //  other to map '\' to Unicode and tend to choose the Yen sign. 
  +    //  other to map '\' to Unicode and tend to choose the Yen sign.
       //
       //  Unicode Yen or Won signs as directory separators will fail.
       //
       //  So, we will check this path name for Yen or won signs and, if they are
  -    //  there, we'll replace them with slashes.  
  +    //  there, we'll replace them with slashes.
       //
  -    //  A further twist:  we replace Yen and Won with forward slashes rather 
  +    //  A further twist:  we replace Yen and Won with forward slashes rather
       //   than back slashes.  Either form of slash will work as a directory
       //   separator.  On Win 95 and 98, though, Unicode back-slashes may
       //   fail to transode back to 8-bit 0x5C with some Unicode converters
  @@ -276,7 +278,7 @@
       //
       XMLCh *tmpUName = 0;
       const XMLCh *nameToOpen = fileName;
  -    
  +
       const XMLCh* srcPtr = fileName;
       while (*srcPtr)
       {
  @@ -285,7 +287,7 @@
               break;
           srcPtr++;
       }
  -    
  +
       //
       //  If we found a yen, then we have to create a temp file name. Else
       //  go with the file name as is and save the overhead.
  @@ -293,7 +295,7 @@
       if (*srcPtr)
       {
           tmpUName = XMLString::replicate(fileName);
  -        
  +
           XMLCh* tmpPtr = tmpUName;
           while (*tmpPtr)
           {
  @@ -309,7 +311,7 @@
       {
           retVal = ::CreateFileW
               (
  -            nameToOpen
  +            (LPCWSTR) nameToOpen
               , GENERIC_READ
               , FILE_SHARE_READ
               , 0
  @@ -338,12 +340,12 @@
           delete [] tmpName;
       }
   
  -    if (tmpUName)  
  +    if (tmpUName)
           delete [] tmpUName;
  -    
  +
       if (retVal == INVALID_HANDLE_VALUE)
           return 0;
  -    
  +
       return retVal;
   }
   
  @@ -376,14 +378,14 @@
       //  with a thorny problem. Shift-JIS and some other Asian encodings
       //  are fundamentally broken and map both the backslash and the Yen
       //  sign to the same code point. Transcoders have to pick one or the
  -    //  other to map '\' to Unicode and tend to choose the Yen sign. 
  +    //  other to map '\' to Unicode and tend to choose the Yen sign.
       //
       //  Unicode Yen or Won signs as directory separators will fail.
       //
       //  So, we will check this path name for Yen or won signs and, if they are
  -    //  there, we'll replace them with slashes.  
  +    //  there, we'll replace them with slashes.
       //
  -    //  A further twist:  we replace Yen and Won with forward slashes rather 
  +    //  A further twist:  we replace Yen and Won with forward slashes rather
       //   than back slashes.  Either form of slash will work as a directory
       //   separator.  On Win 95 and 98, though, Unicode back-slashes may
       //   fail to transode back to 8-bit 0x5C with some Unicode converters
  @@ -392,7 +394,7 @@
       //
       XMLCh *tmpUName = 0;
       const XMLCh *nameToOpen = fileName;
  -    
  +
       const XMLCh* srcPtr = fileName;
       while (*srcPtr)
       {
  @@ -401,7 +403,7 @@
               break;
           srcPtr++;
       }
  -    
  +
       //
       //  If we found a yen, then we have to create a temp file name. Else
       //  go with the file name as is and save the overhead.
  @@ -409,7 +411,7 @@
       if (*srcPtr)
       {
           tmpUName = XMLString::replicate(fileName);
  -        
  +
           XMLCh* tmpPtr = tmpUName;
           while (*tmpPtr)
           {
  @@ -454,12 +456,12 @@
           delete [] tmpName;
       }
   
  -    if (tmpUName)  
  +    if (tmpUName)
           delete [] tmpUName;
  -    
  +
       if (retVal == INVALID_HANDLE_VALUE)
           return 0;
  -    
  +
       return retVal;
   }
   
  @@ -513,7 +515,7 @@
   void
   XMLPlatformUtils::writeBufferToFile( FileHandle     const  theFile
                                      , long                  toWrite
  -                                   , const XMLByte* const  toFlush)                 
                  
  +                                   , const XMLByte* const  toFlush)
   {
       if (!theFile        ||
           (toWrite <= 0 ) ||
  @@ -566,7 +568,7 @@
           XMLCh tmpPath[bufSize + 1];
   
           XMLCh* namePart = 0;
  -        if (!::GetFullPathNameW(srcPath, bufSize, tmpPath, &namePart))
  +        if (!::GetFullPathNameW((LPCWSTR)srcPath, bufSize, tmpPath, &namePart))
               return 0;
   
           // Return a copy of the path
  @@ -740,7 +742,7 @@
   void XMLPlatformUtils::closeMutex(void* const mtxHandle)
   {
       ::DeleteCriticalSection((LPCRITICAL_SECTION)mtxHandle);
  -    delete mtxHandle;
  +    delete (CRITICAL_SECTION*)mtxHandle;
   }
   
   
  @@ -798,7 +800,7 @@
   
       #else
   
  -    //    
  +    //
       //  Note we have to cast off the constness of some of these because
       //  the system APIs are not C++ aware in all cases.
       //
  @@ -856,7 +858,7 @@
   //
   XMLMsgLoader* XMLPlatformUtils::loadAMsgSet(const XMLCh* const msgDomain)
   {
  -#if defined (XML_USE_INMEMORY_MSGLOADER)
  +#if defined (XML_USE_INMEM_MESSAGELOADER)
       return new InMemMsgLoader(msgDomain);
   #elif defined (XML_USE_WIN32_MSGLOADER)
       return new Win32MsgLoader(msgDomain);
  @@ -884,6 +886,8 @@
       return new ICUTransService;
   #elif defined (XML_USE_WIN32_TRANSCODER)
       return new Win32TransService;
  +#elif defined (XML_USE_CYGWIN_TRANSCODER)
  +    return new CygwinTransService;
   #else
       #error You must provide a transcoding service implementation
   #endif
  @@ -900,7 +904,7 @@
   
   #if 0 && defined(_DEBUG)
       //  Enable this code for memeory leak testing
  -    
  +
      // Send all reports to STDOUT
      _CrtSetReportMode( _CRT_WARN, _CRTDBG_MODE_FILE );
      _CrtSetReportFile( _CRT_WARN, _CRTDBG_FILE_STDOUT );
  
  
  
  1.1                  xml-xerces/c/src/xercesc/util/Platforms/Win32/Makefile.in
  
  Index: Makefile.in
  ===================================================================
  #
  # The Apache Software License, Version 1.1
  #
  # Copyright (c) 2002 The Apache Software Foundation.  All rights
  # reserved.
  #
  # Redistribution and use in source and binary forms, with or without
  # modification, are permitted provided that the following conditions
  # are met:
  #
  # 1. Redistributions of source code must retain the above copyright
  #    notice, this list of conditions and the following disclaimer.
  #
  # 2. Redistributions in binary form must reproduce the above copyright
  #    notice, this list of conditions and the following disclaimer in
  #    the documentation and/or other materials provided with the
  #    distribution.
  #
  # 3. The end-user documentation included with the redistribution,
  #    if any, must include the following acknowledgment:
  #       "This product includes software developed by the
  #        Apache Software Foundation (http://www.apache.org/)."
  #    Alternately, this acknowledgment may appear in the software itself,
  #    if and wherever such third-party acknowledgments normally appear.
  #
  # 4. The names "Xerces" and "Apache Software Foundation" must
  #    not be used to endorse or promote products derived from this
  #    software without prior written permission. For written
  #    permission, please contact apache\@apache.org.
  #
  # 5. Products derived from this software may not be called "Apache",
  #    nor may "Apache" appear in their name, without prior written
  #    permission of the Apache Software Foundation.
  #
  # THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  # DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  # ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  # USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  # OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  # SUCH DAMAGE.
  # ====================================================================
  #
  # This software consists of voluntary contributions made by many
  # individuals on behalf of the Apache Software Foundation, and was
  # originally based on software copyright (c) 1999, International
  # Business Machines, Inc., http://www.ibm.com .  For more information
  # on the Apache Software Foundation, please see
  # <http://www.apache.org/>.
  #
  # $Log: Makefile.in,v $
  # Revision 1.1  2002/08/19 18:35:56  tng
  # [Bug 6467] Installing Xerces C++ on cygwin environment.
  #
  #
  
  PLATFORM = @platform@
  CC  = @cc@
  CXX = @cxx@
  GCC = @GCC@
  GXX = @GXX@
  CXXFLAGS = @cxxflags@
  CFLAGS = @cflags@
  PREFIX = @prefix@
  PREFIX_INCLUDE = @prefix_include@
  LDFLAGS = @ldflags@
  LIBS = @libs@
  OSVER = @osver@
  USELIBWWW = @uselibwww@
  MESSAGELOADER = @messageloader@
  TRANSCODER = @transcoder@
  THREADS = @threads@
  
  MODULE = util
  
  include ../../../Makefile.incl
  
  SUBMODULE = Platforms/Win32
  CXXFLAGS += -D_GNU_SOURCE -D__USE_GNU
  ifeq (${PLATFORM}, CYGWIN)
      CXXFLAGS += -D__CYGWIN__
  #endif
  CPP_PUBHEADERS = Win32Defs.hpp
  CPP_OBJECTS = Win32PlatformUtils.$(TO)
  
  include ../../Makefile.util.submodule
  
  
  
  1.1                  
xml-xerces/c/src/xercesc/util/Transcoders/Cygwin/CygwinTransService.cpp
  
  Index: CygwinTransService.cpp
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2002 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Xerces" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact apache\@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation, and was
   * originally based on software copyright (c) 1999, International
   * Business Machines, Inc., http://www.ibm.com .  For more information
   * on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  /*
   * $Log: CygwinTransService.cpp,v $
   * Revision 1.1  2002/08/19 18:35:56  tng
   * [Bug 6467] Installing Xerces C++ on cygwin environment.
   *
   */
  
  // ---------------------------------------------------------------------------
  //  Includes
  // ---------------------------------------------------------------------------
  #include <xercesc/util/PlatformUtils.hpp>
  #include <xercesc/util/TranscodingException.hpp>
  #include <xercesc/util/XMLException.hpp>
  #include <xercesc/util/XMLString.hpp>
  #include <xercesc/util/XMLUniDefs.hpp>
  #include <xercesc/util/XMLUni.hpp>
  #include <xercesc/util/RefHashTableOf.hpp>
  #include "CygwinTransService.hpp"
  #include <windows.h>
  #include <stdlib.h>
  
  
  
  // ---------------------------------------------------------------------------
  //  Local, const data
  // ---------------------------------------------------------------------------
  static const XMLCh gMyServiceId[] =
  {
      chLatin_C, chLatin_y, chLatin_g, chLatin_w, chLatin_i, chLatin_n, chNull
  };
  
  
  // Cygwin doesn't support iswspace(), so this table is used by
  // CygwinTransService::isSpace() based on a union of Unicode
  // Table 6-1 and the ANSI definition of whitespace, arranged
  // in order of likely occurrence.
  
  static const XMLCh gWhitespace[] =
  {
      0x0020,
      0x00a0,
      0x0009,
      0x000a,
      0x000d,
      0x000b,
      0x000c,
      0x3000,
      0x2000,
      0x2001,
      0x2002,
      0x2003,
      0x2004,
      0x2005,
      0x2006,
      0x2007,
      0x2008,
      0x2009,
      0x200a,
      0x200b,
      0x202f
  };
  
  // Used by the kernel32 function LCMapStringW to uppercasify strings
  // appropriate to this locale.  Cygwin doesn't support _wcsupr().
  
  static const LCID gLocaleId =
  #if defined(CYGWINTRANSCODER_DEFAULT_LOCALE)
      MAKELCID( MAKELANGID( LANG_NEUTRAL, SUBLANG_DEFAULT), SORT_DEFAULT);
  #else    // CYGWINTRANSCODER_DYNAMIC_LOCALE
      GetThreadLocale();
  #endif
  
  
  
  // ---------------------------------------------------------------------------
  //  This is the simple CPMapEntry class. It just contains an encoding name
  //  and a code page for that encoding.
  // ---------------------------------------------------------------------------
  class CPMapEntry
  {
  public :
      // -----------------------------------------------------------------------
      //  Constructors and Destructor
      // -----------------------------------------------------------------------
      CPMapEntry
      (
          const   XMLCh* const    encodingName
          , const unsigned int    cpId
          , const unsigned int    ieId
      );
  
      CPMapEntry
      (
          const   char* const     encodingName
          , const unsigned int    cpId
          , const unsigned int    ieId
      );
  
      ~CPMapEntry();
  
  
      // -----------------------------------------------------------------------
      //  Getter methods
      // -----------------------------------------------------------------------
      const XMLCh* getEncodingName() const;
      const XMLCh* getKey() const;
      unsigned int getWinCP() const;
      unsigned int getIEEncoding() const;
  
  
  private :
      // -----------------------------------------------------------------------
      //  Unimplemented constructors and operators
      // -----------------------------------------------------------------------
      CPMapEntry();
      CPMapEntry(const CPMapEntry&);
      void operator=(const CPMapEntry&);
  
  
      // -----------------------------------------------------------------------
      //  Private data members
      //
      //  fEncodingName
      //      This is the encoding name for the code page that this instance
      //      represents.
      //
      //  fCPId
      //      This is the Windows specific code page for the encoding that this
      //      instance represents.
      //
      //  fIEId
      //      This is the IE encoding id. Its not used at this time, but we
      //      go ahead and get it and store it just in case for later.
      // -----------------------------------------------------------------------
      XMLCh*          fEncodingName;
      unsigned int    fCPId;
      unsigned int    fIEId;
  };
  
  // ---------------------------------------------------------------------------
  //  CPMapEntry: Constructors and Destructor
  // ---------------------------------------------------------------------------
  CPMapEntry::CPMapEntry( const   char* const     encodingName
                          , const unsigned int    cpId
                          , const unsigned int    ieId) :
      fEncodingName(0)
      , fCPId(cpId)
      , fIEId(ieId)
  {
      // Transcode the name to Unicode and store that copy
      const unsigned int srcLen = strlen(encodingName);
      const unsigned int targetLen = ::MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, 
encodingName, srcLen, NULL, 0);
      fEncodingName = new XMLCh[targetLen + 1];
      ::MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, encodingName, srcLen, 
(LPWSTR)fEncodingName, targetLen);
      fEncodingName[targetLen] = 0;
  
      //
      //  Upper case it because we are using a hash table and need to be
      //  sure that we find all case combinations.
      //
      ::LCMapStringW( gLocaleId, LCMAP_UPPERCASE, (LPCWSTR)fEncodingName, targetLen, 
(LPWSTR)fEncodingName, targetLen);
  }
  
  CPMapEntry::CPMapEntry( const   XMLCh* const    encodingName
                          , const unsigned int    cpId
                          , const unsigned int    ieId) :
  
      fEncodingName(0)
      , fCPId(cpId)
      , fIEId(ieId)
  {
      fEncodingName = XMLString::replicate(encodingName);
  
      //
      //  Upper case it because we are using a hash table and need to be
      //  sure that we find all case combinations.
      //
      unsigned int itsLen = XMLString::stringLen( fEncodingName);
      ::LCMapStringW( gLocaleId, LCMAP_UPPERCASE, (LPCWSTR)fEncodingName, itsLen, 
(LPWSTR)fEncodingName, itsLen);
  }
  
  CPMapEntry::~CPMapEntry()
  {
      delete [] fEncodingName;
  }
  
  
  // ---------------------------------------------------------------------------
  //  CPMapEntry: Getter methods
  // ---------------------------------------------------------------------------
  const XMLCh* CPMapEntry::getEncodingName() const
  {
      return fEncodingName;
  }
  
  unsigned int CPMapEntry::getWinCP() const
  {
      return fCPId;
  }
  
  unsigned int CPMapEntry::getIEEncoding() const
  {
      return fIEId;
  }
  
  
  
  
  
  
  //---------------------------------------------------------------------------
  //
  //  class CygwinTransService Implementation ...
  //
  //---------------------------------------------------------------------------
  
  
  // ---------------------------------------------------------------------------
  //  CygwinTransService: Constructors and Destructor
  // ---------------------------------------------------------------------------
  CygwinTransService::CygwinTransService()
  {
      fCPMap = new RefHashTableOf<CPMapEntry>(109);
  
      //
      //  Open up the registry key that contains the info we want. Note that,
      //  if this key does not exist, then we just return. It will just mean
      //  that we don't have any support except for intrinsic encodings supported
      //  by the parser itself (and the LCP support of course.
      //
      HKEY charsetKey;
      if (::RegOpenKeyExA
      (
          HKEY_CLASSES_ROOT
          , "MIME\\Database\\Charset"
          , 0
          , KEY_READ
          , &charsetKey))
      {
          return;
      }
  
      //
      //  Read in the registry keys that hold the code page ids. Skip for now
      //  those entries which indicate that they are aliases for some other
      //  encodings. We'll come back and do a second round for those and look
      //  up the original name and get the code page id.
      //
      //  Note that we have to use A versions here so that this will run on
      //  98, and transcode the strings to Unicode.
      //
      const unsigned int nameBufSz = 1024;
      char nameBuf[nameBufSz + 1];
      unsigned int subIndex = 0;
      unsigned long theSize;
      while (true)
      {
          // Get the name of the next key
          theSize = nameBufSz;
          if (::RegEnumKeyExA
          (
              charsetKey
              , subIndex
              , nameBuf
              , &theSize
              , 0, 0, 0, 0) == ERROR_NO_MORE_ITEMS)
          {
              break;
          }
  
          // Open this subkey
          HKEY encodingKey;
          if (::RegOpenKeyExA
          (
              charsetKey
              , nameBuf
              , 0
              , KEY_READ
              , &encodingKey))
          {
              XMLPlatformUtils::panic(XMLPlatformUtils::Panic_NoTransService);
          }
  
          //
          //  Lts see if its an alias. If so, then ignore it in this first
          //  loop. Else, we'll add a new entry for this one.
          //
          if (!isAlias(encodingKey))
          {
              //
              //  Lets get the two values out of this key that we are
              //  interested in. There should be a code page entry and an
              //  IE entry.
              //
              unsigned long theType;
              unsigned int CPId;
              unsigned int IEId;
  
              theSize = sizeof(unsigned int);
              if (::RegQueryValueExA
              (
                  encodingKey
                  , "Codepage"
                  , 0
                  , &theType
                  , (unsigned char*)&CPId
                  , &theSize) != ERROR_SUCCESS)
              {
                  XMLPlatformUtils::panic(XMLPlatformUtils::Panic_NoTransService);
              }
  
              //
              //  If this is not a valid Id, and it might not be because its
              //  not loaded on this system, then don't take it.
              //
              if (::IsValidCodePage(CPId))
              {
                  theSize = sizeof(unsigned int);
                  if (::RegQueryValueExA
                  (
                      encodingKey
                      , "InternetEncoding"
                      , 0
                      , &theType
                      , (unsigned char*)&IEId
                      , &theSize) != ERROR_SUCCESS)
                  {
                      XMLPlatformUtils::panic(XMLPlatformUtils::Panic_NoTransService);
                  }
  
                  CPMapEntry* newEntry = new CPMapEntry(nameBuf, CPId, IEId);
                  fCPMap->put((void*)newEntry->getEncodingName(), newEntry);
              }
          }
  
          // And now close the subkey handle and bump the subkey index
          ::RegCloseKey(encodingKey);
          subIndex++;
      }
  
      //
      //  Now loop one more time and this time we do just the aliases. For
      //  each one we find, we look up that name in the map we've already
      //  built and add a new entry with this new name and the same id
      //  values we stored for the original.
      //
      subIndex = 0;
      char aliasBuf[nameBufSz + 1];
      while (true)
      {
          // Get the name of the next key
          theSize = nameBufSz;
          if (::RegEnumKeyExA
          (
              charsetKey
              , subIndex
              , nameBuf
              , &theSize
              , 0, 0, 0, 0) == ERROR_NO_MORE_ITEMS)
          {
              break;
          }
  
          // Open this subkey
          HKEY encodingKey;
          if (::RegOpenKeyExA
          (
              charsetKey
              , nameBuf
              , 0
              , KEY_READ
              , &encodingKey))
          {
              XMLPlatformUtils::panic(XMLPlatformUtils::Panic_NoTransService);
          }
  
          //
          //  If its an alias, look up the name in the map. If we find it,
          //  then construct a new one with the new name and the aliased
          //  ids.
          //
          if (isAlias(encodingKey, aliasBuf, nameBufSz))
          {
              const unsigned int srcLen = strlen(aliasBuf);
              const unsigned int targetLen = ::MultiByteToWideChar(CP_ACP, 
MB_PRECOMPOSED, aliasBuf, srcLen, NULL, 0);
              XMLCh* uniAlias = new XMLCh[targetLen + 1];
              ::MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, aliasBuf, srcLen, 
(LPWSTR)uniAlias, targetLen);
              uniAlias[targetLen] = 0;
              ::LCMapStringW( gLocaleId, LCMAP_UPPERCASE, (LPCWSTR)uniAlias, 
targetLen, (LPWSTR)uniAlias, targetLen);
  
              // Look up the alias name
              CPMapEntry* aliasedEntry = fCPMap->get(uniAlias);
              if (aliasedEntry)
              {
                  //
                  //  If the name is actually different, then take it.
                  //  Otherwise, don't take it. They map aliases that are
                  //  just different case.
                  //
                  if (auxCompareString(uniAlias, aliasedEntry->getEncodingName(), -1L, 
false))
                  {
                      CPMapEntry* newEntry = new CPMapEntry(uniAlias, 
aliasedEntry->getWinCP(), aliasedEntry->getIEEncoding());
                      fCPMap->put((void*)newEntry->getEncodingName(), newEntry);
                  }
              }
              delete [] uniAlias;
          }
  
          // And now close the subkey handle and bump the subkey index
          ::RegCloseKey(encodingKey);
          subIndex++;
      }
  
      // And close the main key handle
      ::RegCloseKey(charsetKey);
  
  }
  
  CygwinTransService::~CygwinTransService()
  {
      delete fCPMap;
  }
  
  
  // ---------------------------------------------------------------------------
  //  CygwinTransService: The virtual transcoding service API
  // ---------------------------------------------------------------------------
  int CygwinTransService::auxCompareString( const XMLCh* const comp1
                                           , const XMLCh* const comp2
                                           , signed long maxChars
                                           , const bool ignoreCase)
  {
      const XMLCh* args[2] = { comp1, comp2 };
      XMLCh*       firstBuf = NULL;
      XMLCh*       secondBuf;
      unsigned int len = XMLString::stringLen( comp1);
      unsigned int otherLen = XMLString::stringLen( comp2);
      unsigned int countChar = 0;
      int          theResult = 0;
  
      // Determine at what string index the comparison stops.
      if ( maxChars != -1L )
      {
          len = ( len > maxChars ) ? maxChars : len;
          otherLen = ( otherLen > maxChars ) ? maxChars : otherLen;
          maxChars = ( len > otherLen ) ? otherLen : len;
      }
      else
      {
          // When no Max given must compare terminating NUL to return
          // difference if one string is shorter than the other.
  
          maxChars = ( len > otherLen ) ? otherLen : len;
          ++maxChars;
      }
  
      // Handle situation when one argument or the other is NULL
      // by returning +/- string length of non-NULL argument (inferred
      // from XMLString::CompareNString).
  
      // Obs. Definition of stringLen(XMLCh*) implies NULL ptr and ptr
      // to Empty String are equivalent.  It handles NULL args, BTW.
  
      if ( !comp1 )
      {
          // Negative because null ptr (c1) less than string (c2).
          return ( 0 - otherLen );
      }
  
      if ( !comp2 )
      {
          // Positive because string (c1) still greater than null ptr (c2).
          return len;
      }
  
      // Handle case-insensitive comparison by removing case from string.
      if ( ignoreCase )
      {
          // Copy const parameter strings (plus terminating nul) into locals.
          firstBuf = new XMLCh[ ++len];
          secondBuf = new XMLCh[ ++otherLen];
          memcpy( firstBuf, comp1, len * sizeof(XMLCh));
          memcpy( secondBuf, comp2, otherLen * sizeof(XMLCh));
  
          // Then uppercase both strings, losing their case info.
          ::LCMapStringW( gLocaleId, LCMAP_UPPERCASE, (LPWSTR)firstBuf, len, 
(LPWSTR)firstBuf, len);
          ::LCMapStringW( gLocaleId, LCMAP_UPPERCASE, (LPWSTR)secondBuf, otherLen, 
(LPWSTR)secondBuf, otherLen);
  
          // Replace original params in args array with UC ones.
          args[0] = (const XMLCh*)firstBuf;
          args[1] = (const XMLCh*)secondBuf;
  
          // Not necessary only because they're not used beyond this pt.
          // --len;
          // --otherLen;
      }
  
      // Strings are equal until proven otherwise.
      while ( ( countChar < maxChars ) && ( !theResult ) )
      {
          theResult = (int)(args[1][countChar]) - (int)(args[0][countChar]);
          ++countChar;
      }
  
      // Clean-up buffers, equivalent to if ( ignoreCase )
      if ( firstBuf )
      {
          delete [] firstBuf;
          delete [] secondBuf;
      }
  
      return theResult;
  }
  
  
  int CygwinTransService::compareIString(  const   XMLCh* const    comp1
                                          , const XMLCh* const    comp2)
  {
      return auxCompareString( comp1, comp2, -1L, true);
  }
  
  
  int CygwinTransService::compareNIString( const   XMLCh* const    comp1
                                          , const XMLCh* const    comp2
                                          , const unsigned int    maxChars)
  {
      // Promote maxChars to signed long. Avoid any conceivable
      // portability issue from a simple C cast with extension
      // of sign bit when maxChars >= 2^16.  Making that param
      // signed long was necessary for reusability/an out-of-band
      // indicator in CygwinTransService::auxCompareString().
  
      // Obs. When maxChars == 0, return 0 (strings equal).
  
      return auxCompareString( comp1, comp2, (maxChars & 0x0000FFFFL), true);
  }
  
  
  const XMLCh* CygwinTransService::getId() const
  {
      return gMyServiceId;
  }
  
  
  bool CygwinTransService::isSpace(const XMLCh toCheck) const
  {
      int theCount = 0;
      while ( theCount < (sizeof(gWhitespace) / sizeof(XMLCh)) )
      {
          if ( toCheck == gWhitespace[theCount] )
              return true;
  
          ++theCount;
      }
      return false;
  }
  
  
  XMLLCPTranscoder* CygwinTransService::makeNewLCPTranscoder()
  {
      // Just allocate a new LCP transcoder of our type
      return new CygwinLCPTranscoder;
  }
  
  
  bool CygwinTransService::supportsSrcOfs() const
  {
      //
      //  Since the only mechanism we have to translate XML text in this
      //  transcoder basically require us to do work that allows us to support
      //  source offsets, we might as well do it.
      //
      return true;
  }
  
  
  void CygwinTransService::upperCase(XMLCh* const toUpperCase) const
  {
      unsigned int itsLen = XMLString::stringLen( toUpperCase);
      ::LCMapStringW( gLocaleId, LCMAP_UPPERCASE, (LPWSTR)toUpperCase, itsLen, 
(LPWSTR)toUpperCase, itsLen);
  }
  
  
  void CygwinTransService::lowerCase(XMLCh* const toLowerCase) const
  {
      unsigned int itsLen = XMLString::stringLen( toLowerCase);
      ::LCMapStringW( gLocaleId, LCMAP_LOWERCASE, (LPWSTR)toLowerCase, itsLen, 
(LPWSTR)toLowerCase, itsLen);
  }
  
  
  bool CygwinTransService::isAlias(const   HKEY            encodingKey
                      ,       char* const     aliasBuf
                      , const unsigned int    nameBufSz )
  {
      unsigned long theType;
      unsigned long theSize = nameBufSz;
      return (::RegQueryValueExA
      (
          encodingKey
          , "AliasForCharset"
          , 0
          , &theType
          , (unsigned char*)aliasBuf
          , &theSize
      ) == ERROR_SUCCESS);
  }
  
  
  XMLTranscoder*
  CygwinTransService::makeNewXMLTranscoder(const   XMLCh* const            encodingName
                                          ,       XMLTransService::Codes& resValue
                                          , const unsigned int            blockSize)
  {
      const unsigned int upLen = 1024;
      XMLCh upEncoding[upLen + 1];
  
      //
      //  Get an upper cased copy of the encoding name, since we use a hash
      //  table and we store them all in upper case.
      //
      int itsLen = XMLString::stringLen( encodingName) + 1;
      memcpy(
          upEncoding
          , encodingName
          , sizeof(XMLCh) * ( ( itsLen > upLen) ? upLen : itsLen)
      );
      upEncoding[upLen] = 0;  // necessary? terminating NUL should've copied.
      upperCase(upEncoding);
  
      // Now to try to find this guy in the CP map
      CPMapEntry* theEntry = fCPMap->get(upEncoding);
  
      // If not found, then return a null pointer
      if (!theEntry)
      {
          resValue = XMLTransService::UnsupportedEncoding;
          return 0;
      }
  
      // We found it, so return a Cygwin transcoder for this encoding
      return new CygwinTranscoder
      (
          encodingName
          , theEntry->getWinCP()
          , theEntry->getIEEncoding()
          , blockSize
      );
  }
  
  
  
  
  
  
  
  
  //---------------------------------------------------------------------------
  //
  //  class CygwinTranscoder Implementation ...
  //
  //---------------------------------------------------------------------------
  
  
  // ---------------------------------------------------------------------------
  //  CygwinTranscoder: Constructors and Destructor
  // ---------------------------------------------------------------------------
  CygwinTranscoder::CygwinTranscoder(const  XMLCh* const    encodingName
                                  , const unsigned int    winCP
                                  , const unsigned int    ieCP
                                  , const unsigned int    blockSize) :
  
      XMLTranscoder(encodingName, blockSize)
      , fIECP(ieCP)
      , fWinCP(winCP)
  {
  }
  
  CygwinTranscoder::~CygwinTranscoder()
  {
  }
  
  
  // ---------------------------------------------------------------------------
  //  CygwinTranscoder: The virtual transcoder API
  // ---------------------------------------------------------------------------
  unsigned int
  CygwinTranscoder::transcodeFrom(  const XMLByte* const      srcData
                                  , const unsigned int        srcCount
                                  ,       XMLCh* const        toFill
                                  , const unsigned int        maxChars
                                  ,       unsigned int&       bytesEaten
                                  ,       unsigned char* const charSizes)
  {
      // Get temp pointers to the in and out buffers, and the chars sizes one
      XMLCh*          outPtr = toFill;
      const XMLByte*  inPtr  = srcData;
      unsigned char*  sizesPtr = charSizes;
  
      // Calc end pointers for each of them
      XMLCh*          outEnd = toFill + maxChars;
      const XMLByte*  inEnd  = srcData + srcCount;
  
      //
      //  Now loop until we either get our max chars, or cannot get a whole
      //  character from the input buffer.
      //
      bytesEaten = 0;
      while ((outPtr < outEnd) && (inPtr < inEnd))
      {
          //
          //  If we are looking at a leading byte of a multibyte sequence,
          //  then we are going to eat 2 bytes, else 1.
          //
          const unsigned int toEat = ::IsDBCSLeadByteEx(fWinCP, *inPtr) ?
                                      2 : 1;
  
          // Make sure a whol char is in the source
          if (inPtr + toEat > inEnd)
              break;
  
          // Try to translate this next char and check for an error
          const unsigned int converted = ::MultiByteToWideChar
          (
              fWinCP
              , MB_PRECOMPOSED | MB_ERR_INVALID_CHARS
              , (const char*)inPtr
              , toEat
              , (LPWSTR)outPtr
              , 1
          );
  
          if (converted != 1)
          {
              if (toEat == 1)
              {
                  XMLCh tmpBuf[16];
                  XMLString::binToText((unsigned int)(*inPtr), tmpBuf, 16, 16);
                  ThrowXML2
                  (
                      TranscodingException
                      , XMLExcepts::Trans_BadSrcCP
                      , tmpBuf
                      , getEncodingName()
                  );
              }
              else
              {
                  ThrowXML(TranscodingException, XMLExcepts::Trans_BadSrcSeq);
              }
          }
  
          // Update the char sizes array for this round
          *sizesPtr++ = toEat;
  
          // And update the bytes eaten count
          bytesEaten += toEat;
  
          // And update our in/out ptrs
          inPtr += toEat;
          outPtr++;
      }
  
      // Return the chars we output
      return (outPtr - toFill);
  }
  
  
  unsigned int
  CygwinTranscoder::transcodeTo(const  XMLCh* const   srcData
                              , const unsigned int    srcCount
                              ,       XMLByte* const  toFill
                              , const unsigned int    maxBytes
                              ,       unsigned int&   charsEaten
                              , const UnRepOpts       options)
  {
      // Get pointers to the start and end of each buffer
      const XMLCh*    srcPtr = srcData;
      const XMLCh*    srcEnd = srcData + srcCount;
      XMLByte*        outPtr = toFill;
      XMLByte*        outEnd = toFill + maxBytes;
  
      //
      //  Now loop until we either get our max chars, or cannot get a whole
      //  character from the input buffer.
      //
      //  NOTE: We have to use a loop for this unfortunately because the
      //  conversion API is too dumb to tell us how many chars it converted if
      //  it couldn't do the whole source.
      //
      BOOL usedDef;
      while ((outPtr < outEnd) && (srcPtr < srcEnd))
      {
          //
          //  Do one char and see if it made it.
          const unsigned int bytesStored = ::WideCharToMultiByte
          (
              fWinCP
              , WC_COMPOSITECHECK | WC_SEPCHARS
              , (LPCWSTR)srcPtr
              , 1
              , (char*)outPtr
              , outEnd - outPtr
              , 0
              , &usedDef
          );
  
          // If we didn't transcode anything, then we are done
          if (!bytesStored)
              break;
  
          //
          //  If the defaault char was used and the options indicate that
          //  this isn't allowed, then throw.
          //
          if (usedDef && (options == UnRep_Throw))
          {
              XMLCh tmpBuf[16];
              XMLString::binToText((unsigned int)*srcPtr, tmpBuf, 16, 16);
              ThrowXML2
              (
                  TranscodingException
                  , XMLExcepts::Trans_Unrepresentable
                  , tmpBuf
                  , getEncodingName()
              );
          }
  
          // Update our pointers
          outPtr += bytesStored;
          srcPtr++;
      }
  
      // Update the chars eaten
      charsEaten = srcPtr - srcData;
  
      // And return the bytes we stored
      return outPtr - toFill;
  }
  
  
  bool CygwinTranscoder::canTranscodeTo(const unsigned int toCheck) const
  {
      //
      //  If the passed value is really a surrogate embedded together, then
      //  we need to break it out into its two chars. Else just one.
      //
      XMLCh           srcBuf[2];
      unsigned int    srcCount = 1;
      if (toCheck & 0xFFFF0000)
      {
          srcBuf[0] = XMLCh((toCheck >> 10) + 0xD800);
          srcBuf[1] = XMLCh(toCheck & 0x3FF) + 0xDC00;
          srcCount++;
      }
      else
      {
          srcBuf[0] = XMLCh(toCheck);
      }
  
      //
      //  Use a local temp buffer that would hold any sane multi-byte char
      //  sequence and try to transcode this guy into it.
      //
      char tmpBuf[64];
  
      BOOL usedDef;
      const unsigned int bytesStored = ::WideCharToMultiByte
      (
          fWinCP
          , WC_COMPOSITECHECK | WC_SEPCHARS
          , (LPCWSTR)srcBuf
          , srcCount
          , tmpBuf
          , 64
          , 0
          , &usedDef
      );
  
      if (!bytesStored || usedDef)
          return false;
  
      return true;
  }
  
  
  
  
  //---------------------------------------------------------------------------
  //
  //  class CygwinTranscoder Implementation ...
  //
  //---------------------------------------------------------------------------
  
  // ---------------------------------------------------------------------------
  //  CygwinLCPTranscoder: Constructors and Destructor
  // ---------------------------------------------------------------------------
  CygwinLCPTranscoder::CygwinLCPTranscoder()
  {
  }
  
  CygwinLCPTranscoder::~CygwinLCPTranscoder()
  {
  }
  
  
  // ---------------------------------------------------------------------------
  //  CygwinLCPTranscoder: Implementation of the virtual transcoder interface
  // ---------------------------------------------------------------------------
  unsigned int CygwinLCPTranscoder::calcRequiredSize(const char* const srcText)
  {
      if (!srcText)
          return 0;
  
      const unsigned int retVal = ::MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, 
srcText, -1, NULL, 0);
      if (retVal == (unsigned int)-1)
          return 0;
      return retVal;
  }
  
  
  unsigned int CygwinLCPTranscoder::calcRequiredSize(const XMLCh* const srcText)
  {
      if (!srcText)
          return 0;
  
      const unsigned int retVal = ::WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)srcText, 
-1, NULL, 0, NULL, NULL);
      if (retVal == (unsigned int)-1)
          return 0;
      return retVal;
  }
  
  
  char* CygwinLCPTranscoder::transcode(const XMLCh* const toTranscode)
  {
      if (!toTranscode)
          return 0;
  
      char* retVal = 0;
      if (*toTranscode)
      {
          // Calc the needed size
          const unsigned int neededLen = ::WideCharToMultiByte(CP_ACP, 0, 
(LPCWSTR)toTranscode, -1, NULL, 0, NULL, NULL);
          if (neededLen == (unsigned int)-1)
              return 0;
  
          // Allocate a buffer of that size plus one for the null and transcode
          // Returned length of WideCharToMultiByte includes terminating NUL.
          retVal = new char[neededLen+1];
          ::WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)toTranscode, -1, retVal, 
neededLen+1, NULL, NULL);
  
          // And cap it off anyway just to make sure
          retVal[neededLen] = 0;
      }
      else
      {
          retVal = new char[1];
          retVal[0] = 0;
      }
      return retVal;
  }
  
  
  XMLCh* CygwinLCPTranscoder::transcode(const char* const toTranscode)
  {
      if (!toTranscode)
          return 0;
  
      XMLCh* retVal = 0;
      if (*toTranscode)
      {
          // Calculate the buffer size required
          const unsigned int neededLen = ::MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, 
toTranscode, -1, NULL, 0);
          if (neededLen == (unsigned int)-1)
              return 0;
  
          // Allocate a buffer of that size plus one for the null and transcode
          retVal = new XMLCh[neededLen + 1];
          ::MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, toTranscode, -1, 
(LPWSTR)retVal, neededLen + 1);
  
          // Cap it off just to make sure. We are so paranoid!
          retVal[neededLen] = 0;
      }
      else
      {
          retVal = new XMLCh[1];
          retVal[0] = 0;
      }
      return retVal;
  }
  
  
  bool CygwinLCPTranscoder::transcode( const   char* const    toTranscode
                                      ,       XMLCh* const    toFill
                                      , const unsigned int    maxChars)
  {
      // Check for a couple of psycho corner cases
      if (!toTranscode || !maxChars)
      {
          toFill[0] = 0;
          return true;
      }
  
      if (!*toTranscode)
      {
          toFill[0] = 0;
          return true;
      }
  
      // This one has a fixed size output, so try it and if it fails it fails
      if ( size_t(-1) == ::MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, toTranscode, 
-1, (LPWSTR)toFill, maxChars + 1) )
          return false;
      return true;
  }
  
  
  bool CygwinLCPTranscoder::transcode( const  XMLCh* const    toTranscode
                                      ,       char* const     toFill
                                      , const unsigned int    maxBytes)
  {
      // Watch for a couple of pyscho corner cases
      if (!toTranscode || !maxBytes)
      {
          toFill[0] = 0;
          return true;
      }
  
      if (!*toTranscode)
      {
          toFill[0] = 0;
          return true;
      }
  
      // This one has a fixed size output, so try it and if it fails it fails
      if ( size_t(-1) == ::WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)toTranscode, -1, 
toFill, maxBytes + 1, NULL, NULL) )
          return false;
  
      // Cap it off just in case
      toFill[maxBytes] = 0;
      return true;
  }
  
  
  
  
  
  
  
  
  
  1.1                  
xml-xerces/c/src/xercesc/util/Transcoders/Cygwin/CygwinTransService.hpp
  
  Index: CygwinTransService.hpp
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999-2002 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Xerces" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact apache\@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation, and was
   * originally based on software copyright (c) 1999, International
   * Business Machines, Inc., http://www.ibm.com .  For more information
   * on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  
  #ifndef CYGWINTRANSSERVICE_HPP
  #define CYGWINTRANSSERVICE_HPP
  
  #include <xercesc/util/TransService.hpp>
  #include <xercesc/util/RefHashTableOf.hpp>
  #include <windows.h>
  
  class CPMapEntry;
  
  
  
  //---------------------------------------------------------------------------
  //
  //  class CygwinTransService
  //
  //---------------------------------------------------------------------------
  class XMLUTIL_EXPORT CygwinTransService : public XMLTransService
  {
  public :
      // -----------------------------------------------------------------------
      //  Constructors and Destructor
      // -----------------------------------------------------------------------
      CygwinTransService();
      virtual ~CygwinTransService();
  
  
      // -----------------------------------------------------------------------
      //  Implementation of the virtual transcoding service API
      // -----------------------------------------------------------------------
      virtual int compareIString
      (
          const   XMLCh* const    comp1
          , const XMLCh* const    comp2
      );
  
      virtual int compareNIString
      (
          const   XMLCh* const    comp1
          , const XMLCh* const    comp2
          , const unsigned int    maxChars
      );
  
      virtual const XMLCh* getId() const;
  
      virtual bool isSpace(const XMLCh toCheck) const;
  
      virtual XMLLCPTranscoder* makeNewLCPTranscoder();
  
      virtual bool supportsSrcOfs() const;
  
      virtual void upperCase(XMLCh* const toUpperCase) const;
      virtual void lowerCase(XMLCh* const toLowerCase) const;
  
  
  protected :
      // -----------------------------------------------------------------------
      //  Protected virtual methods, implemented in CygwinTransService.cpp
      // -----------------------------------------------------------------------
      virtual XMLTranscoder* makeNewXMLTranscoder
      (
          const   XMLCh* const            encodingName
          ,       XMLTransService::Codes& resValue
          , const unsigned int            blockSize
      );
  
      virtual int auxCompareString
      (
          const   XMLCh* const  comp1
          , const XMLCh* const  comp2
          , signed long         maxChars
          , const  bool         ignoreCase
      );
  
  private :
      // -----------------------------------------------------------------------
      //  Unimplemented constructors and operators
      // -----------------------------------------------------------------------
      CygwinTransService(const CygwinTransService&);
      void operator=(const CygwinTransService&);
  
      //      This is a hash table of entries which map encoding names to their
      //      Windows specific code pages. The code page allows us to create
      //      transcoders for those encodings. The encoding names come from XML
      //      files.
      //
      //      This map is shared unsynchronized among all threads of the process,
      //      which is cool since it will be read only once its initialized.
  
  
  
      static bool isAlias(const HKEY          encodingKey
                      ,       char* const     aliasBuf = 0
                      , const unsigned int    nameBufSz = 0);
  
  
      RefHashTableOf<CPMapEntry>    *fCPMap;
  };
  
  
  
  
  
  
  
  //---------------------------------------------------------------------------
  //
  //  class CygwinTranscoder
  //
  //---------------------------------------------------------------------------
  
  class XMLUTIL_EXPORT CygwinTranscoder : public XMLTranscoder
  {
  public :
      // -----------------------------------------------------------------------
      //  Constructors and Destructor
      // -----------------------------------------------------------------------
      CygwinTranscoder
      (
          const   XMLCh* const    encodingName
          , const unsigned int    winCP
          , const unsigned int    ieCP
          , const unsigned int    blockSize);
      ~CygwinTranscoder();
  
  
      // -----------------------------------------------------------------------
      //  Implementation of the virtual transcoder interface
      // -----------------------------------------------------------------------
      virtual unsigned int transcodeFrom
      (
          const   XMLByte* const          srcData
          , const unsigned int            srcCount
          ,       XMLCh* const            toFill
          , const unsigned int            maxChars
          ,       unsigned int&           bytesEaten
          ,       unsigned char* const    charSizes
      );
  
      virtual unsigned int transcodeTo
      (
          const   XMLCh* const    srcData
          , const unsigned int    srcCount
          ,       XMLByte* const  toFill
          , const unsigned int    maxBytes
          ,       unsigned int&   charsEaten
          , const UnRepOpts       options
      );
  
      virtual bool canTranscodeTo
      (
          const   unsigned int    toCheck
      )   const;
  
  
  private :
      // -----------------------------------------------------------------------
      //  Unimplemented constructors and operators
      // -----------------------------------------------------------------------
      CygwinTranscoder(const CygwinTranscoder&);
      void operator=(const CygwinTranscoder&);
  
  
      // -----------------------------------------------------------------------
      //  Private data members
      //
      //  fIECP
      //      This is the internet explorer code page for this encoding.
      //
      //  fWinCP
      //      This is the windows code page for this encoding.
      // -----------------------------------------------------------------------
      unsigned int    fIECP;
      unsigned int    fWinCP;
  };
  
  
  
  
  
  //---------------------------------------------------------------------------
  //
  //  class CygwinLCPTranscoder
  //
  //---------------------------------------------------------------------------
  class XMLUTIL_EXPORT CygwinLCPTranscoder : public XMLLCPTranscoder
  {
  public :
      // -----------------------------------------------------------------------
      //  Constructors and Destructor
      // -----------------------------------------------------------------------
      CygwinLCPTranscoder();
      ~CygwinLCPTranscoder();
  
  
      // -----------------------------------------------------------------------
      //  Implementation of the virtual transcoder interface
      // -----------------------------------------------------------------------
      virtual unsigned int calcRequiredSize(const char* const srcText);
  
      virtual unsigned int calcRequiredSize(const XMLCh* const srcText);
  
      virtual char* transcode(const XMLCh* const toTranscode);
  
      virtual XMLCh* transcode(const char* const toTranscode);
  
      virtual bool transcode
      (
          const   char* const     toTranscode
          ,       XMLCh* const    toFill
          , const unsigned int    maxChars
      );
  
      virtual bool transcode
      (
          const   XMLCh* const    toTranscode
          ,       char* const     toFill
          , const unsigned int    maxChars
      );
  
  
  private :
      // -----------------------------------------------------------------------
      //  Unimplemented constructors and operators
      // -----------------------------------------------------------------------
      CygwinLCPTranscoder(const CygwinLCPTranscoder&);
      void operator=(const CygwinLCPTranscoder&);
  };
  
  #endif
  
  
  
  1.1                  xml-xerces/c/src/xercesc/util/Transcoders/Cygwin/Makefile.in
  
  Index: Makefile.in
  ===================================================================
  #
  # The Apache Software License, Version 1.1
  #
  # Copyright (c) 2002 The Apache Software Foundation.  All rights
  # reserved.
  #
  # Redistribution and use in source and binary forms, with or without
  # modification, are permitted provided that the following conditions
  # are met:
  #
  # 1. Redistributions of source code must retain the above copyright
  #    notice, this list of conditions and the following disclaimer.
  #
  # 2. Redistributions in binary form must reproduce the above copyright
  #    notice, this list of conditions and the following disclaimer in
  #    the documentation and/or other materials provided with the
  #    distribution.
  #
  # 3. The end-user documentation included with the redistribution,
  #    if any, must include the following acknowledgment:
  #       "This product includes software developed by the
  #        Apache Software Foundation (http://www.apache.org/)."
  #    Alternately, this acknowledgment may appear in the software itself,
  #    if and wherever such third-party acknowledgments normally appear.
  #
  # 4. The names "Xerces" and "Apache Software Foundation" must
  #    not be used to endorse or promote products derived from this
  #    software without prior written permission. For written
  #    permission, please contact apache\@apache.org.
  #
  # 5. Products derived from this software may not be called "Apache",
  #    nor may "Apache" appear in their name, without prior written
  #    permission of the Apache Software Foundation.
  #
  # THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  # DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  # ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  # USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  # OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  # SUCH DAMAGE.
  # ====================================================================
  #
  # This software consists of voluntary contributions made by many
  # individuals on behalf of the Apache Software Foundation, and was
  # originally based on software copyright (c) 2001, International
  # Business Machines, Inc., http://www.ibm.com .  For more information
  # on the Apache Software Foundation, please see
  # <http://www.apache.org/>.
  #
  #
  # $Log: Makefile.in,v $
  # Revision 1.1  2002/08/19 18:35:56  tng
  # [Bug 6467] Installing Xerces C++ on cygwin environment.
  #
  #
  
  PLATFORM = @platform@
  CC  = @cc@
  CXX = @cxx@
  GCC = @GCC@
  GXX = @GXX@
  CXXFLAGS = @cxxflags@
  CFLAGS = @cflags@
  PREFIX = @prefix@
  PREFIX_INCLUDE = @prefix_include@
  LDFLAGS = @ldflags@
  LIBS = @libs@
  OSVER = @osver@
  USELIBWWW = @uselibwww@
  MESSAGELOADER = @messageloader@
  TRANSCODER = @transcoder@
  THREADS = @threads@
  
  MODULE = util
  SUBMODULE = Transcoders/Cygwin
  
  include ../../../Makefile.incl
  
  CPP_PUBHEADERS = CygwinTransService.hpp
  
  CPP_OBJECTS = CygwinTransService.$(TO)
  
  include ../../Makefile.util.submodule
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to