You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by tn...@apache.org on 2001/11/29 19:25:18 UTC

cvs commit: xml-xerces/c/src/util/Platforms/FreeBSD FreeBSDDefs.hpp FreeBSDPlatformUtils.cpp Makefile.in

tng         01/11/29 10:25:18

  Modified:    c/samples Makefile.incl configure configure.in runConfigure
               c/src    Makefile.incl configure configure.in runConfigure
               c/src/util AutoSense.hpp XercesDefs.hpp
               c/src/util/Platforms Makefile.in
  Added:       c/src/util/Platforms/FreeBSD FreeBSDDefs.hpp
                        FreeBSDPlatformUtils.cpp Makefile.in
  Log:
  FreeBSD support by Michael Huedepohl.
  
  Revision  Changes    Path
  1.34      +17 -2     xml-xerces/c/samples/Makefile.incl
  
  Index: Makefile.incl
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/samples/Makefile.incl,v
  retrieving revision 1.33
  retrieving revision 1.34
  diff -u -r1.33 -r1.34
  --- Makefile.incl	2001/09/13 16:44:10	1.33
  +++ Makefile.incl	2001/11/29 18:25:18	1.34
  @@ -1,7 +1,7 @@
   #
   # The Apache Software License, Version 1.1
   #
  -# Copyright (c) 1999-2000 The Apache Software Foundation.  All rights
  +# Copyright (c) 1999-2001 The Apache Software Foundation.  All rights
   # reserved.
   #
   # Redistribution and use in source and binary forms, with or without
  @@ -54,7 +54,7 @@
   # <http://www.apache.org/>.
   #
   #
  -# $Id: Makefile.incl,v 1.33 2001/09/13 16:44:10 knoaman Exp $
  +# $Id: Makefile.incl,v 1.34 2001/11/29 18:25:18 tng Exp $
   #
   
   ################## LIBRARY NAMES AND DIRECTORIES ##################
  @@ -176,6 +176,21 @@
   PLATFORM_LIB_LINK_OPTIONS=-L/usr/lib -L/usr/local/lib
   EXTRA_LINK_OPTIONS=-lc
   SHLIBSUFFIX=.so
  +endif
  +
  +#=============== FREEBSD SPECIFIC OPTIONS =========================
  +ifeq (${PLATFORM}, FREEBSD)
  +  CMP= -c ${CXXFLAGS}
  +  CC= g++ -c -D${PLATFORM} -fPIC
  +  LINK = g++ -D${PLATFORM} -fPIC
  +  ifdef ICUROOT
  +    PLATFORM_LIB_LINK_OPTIONS=-L$(ICUROOT)
  +    EXTRA_LINK_OPTIONS=-licudata -lstdc++ -pthread
  +  else
  +    PLATFORM_LIB_LINK_OPTIONS=
  +    EXTRA_LINK_OPTIONS=-lstdc++ -pthread
  +  endif
  +  SHLIBSUFFIX=.so
   endif
   
   #================= HP SPECIFIC OPTIONS ===========================
  
  
  
  1.17      +1 -0      xml-xerces/c/samples/configure
  
  Index: configure
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/samples/configure,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- configure	2001/11/21 19:04:12	1.16
  +++ configure	2001/11/29 18:25:18	1.17
  @@ -1308,6 +1308,7 @@
           *-*-*unixware*)  platform=UNIXWARE ;;
           *-*-sysv5uw7*)  platform=UNIXWARE ;;
           *-*-linux*)     platform=LINUX ;;
  +	*-*-freebsd*)	platform=FREEBSD ;;
           *-*-irix*)      platform=IRIX ;;
           *-*-aix*)       platform=AIX ;;
           *-*-hp*)        platform=HPUX ;
  
  
  
  1.15      +1 -0      xml-xerces/c/samples/configure.in
  
  Index: configure.in
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/samples/configure.in,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- configure.in	2001/11/21 19:04:12	1.14
  +++ configure.in	2001/11/29 18:25:18	1.15
  @@ -36,6 +36,7 @@
           *-*-*unixware*)  platform=UNIXWARE ;;
           *-*-sysv5uw7*)  platform=UNIXWARE ;;
           *-*-linux*)     platform=LINUX ;;
  +	*-*-freebsd*)	platform=FREEBSD ;;
           *-*-irix*)      platform=IRIX ;;
           *-*-aix*)       platform=AIX ;;
           *-*-hp*)        platform=HPUX ;
  
  
  
  1.21      +8 -6      xml-xerces/c/samples/runConfigure
  
  Index: runConfigure
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/samples/runConfigure,v
  retrieving revision 1.20
  retrieving revision 1.21
  diff -u -r1.20 -r1.21
  --- runConfigure	2001/10/25 17:51:04	1.20
  +++ runConfigure	2001/11/29 18:25:18	1.21
  @@ -1,10 +1,8 @@
   #!/bin/sh
  -
  -
   #
   # The Apache Software License, Version 1.1
   #
  -# Copyright (c) 1999-2000 The Apache Software Foundation.  All rights
  +# Copyright (c) 1999-2001 The Apache Software Foundation.  All rights
   # reserved.
   #
   # Redistribution and use in source and binary forms, with or without
  @@ -58,7 +56,7 @@
   #
   
   #
  -# $Id: runConfigure,v 1.20 2001/10/25 17:51:04 tng Exp $
  +# $Id: runConfigure,v 1.21 2001/11/29 18:25:18 tng Exp $
   #
   
   #
  @@ -70,7 +68,7 @@
       echo "runConfigure: Helper script to run \"configure\" for one of the supported platforms"
       echo "Usage: runConfigure \"options\""
       echo "       where options may be any of the following:"
  -    echo "       -p <platform> (accepts 'aix', 'unixware', 'linux', 'solaris',
  +    echo "       -p <platform> (accepts 'aix', 'unixware', 'linux', 'freebsd', 'solaris',
   'hp-10', 'hp-11', 'os400', 'irix', 'ptx', 'tru64', 'macosx')"
       echo "       -c <C compiler name> (e.g. gcc, xlc or icc)"
       echo "       -x <C++ compiler name> (e.g. g++, xlC, or icc)"
  @@ -178,7 +176,7 @@
   
   # Now check if the options are correct or not, bail out if incorrect
   case $platform in
  -   aix | unixware | linux | solaris | hp-10 | hp-11 | os400 | irix | ptx | tru64 | macosx)
  +   aix | unixware | linux | freebsd | solaris | hp-10 | hp-11 | os400 | irix | ptx | tru64 | macosx)
          # platform has been recognized
          ;;
      *)
  @@ -245,6 +243,10 @@
   ./configure --prefix=$XMLINSTALL
   else
   ./configure
  +fi
  +# exit if configure failed
  +if test $? != 0; then
  +  exit 1
   fi
   
   echo
  
  
  
  1.49      +19 -2     xml-xerces/c/src/Makefile.incl
  
  Index: Makefile.incl
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/Makefile.incl,v
  retrieving revision 1.48
  retrieving revision 1.49
  diff -u -r1.48 -r1.49
  --- Makefile.incl	2001/11/26 18:21:45	1.48
  +++ Makefile.incl	2001/11/29 18:25:18	1.49
  @@ -1,7 +1,7 @@
   #
   # The Apache Software License, Version 1.1
   #
  -# Copyright (c) 1999-2000 The Apache Software Foundation.  All rights
  +# Copyright (c) 1999-2001 The Apache Software Foundation.  All rights
   # reserved.
   #
   # Redistribution and use in source and binary forms, with or without
  @@ -54,7 +54,7 @@
   # <http://www.apache.org/>.
   #
   #
  -# $Id: Makefile.incl,v 1.48 2001/11/26 18:21:45 tng Exp $
  +# $Id: Makefile.incl,v 1.49 2001/11/29 18:25:18 tng Exp $
   #
   
   ###################################################################
  @@ -254,6 +254,20 @@
   SHLIBSUFFIX=.so
   endif
   
  +#=============== FREEBSD SPECIFIC OPTIONS =========================
  +ifeq (${PLATFORM}, FREEBSD)
  +MAKE_SHARED = ${CXX} -D${PLATFORM} -shared -fPIC ${LDFLAGS}
  +MAKE_SHARED_C = ${CC} -D${PLATFORM} -shared -fPIC ${LDFLAGS}
  +ifeq (${TRANSCODER}, ICU)
  +    PLATFORM_COMPILE_OPTIONS = -fPIC -D${PLATFORM} -I/usr/local/include
  +    ALLLIBS = ${LIBS} -L/usr/local/lib -licuuc -L${ICUROOT} -licudata -lgcc
  +else
  +    PLATFORM_COMPILE_OPTIONS = -fPIC -D${PLATFORM}
  +    ALLLIBS = ${LIBS}
  +endif
  +SHLIBSUFFIX=.so
  +endif
  +
   #=============== IRIX SPECIFIC OPTIONS ============================
   ifeq (${PLATFORM}, IRIX)
   PLATFORM_COMPILE_OPTIONS = -LANG:pch -LANG:std -O2 \
  @@ -404,6 +418,9 @@
   CP = -cp -fph
   else
   CP = -cp -fp
  +endif
  +ifeq (${PLATFORM}, FREEBSD)
  +CP = -cp -p
   endif
   RM = -rm -f
   CAT = cat
  
  
  
  1.34      +4 -1      xml-xerces/c/src/configure
  
  Index: configure
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/configure,v
  retrieving revision 1.33
  retrieving revision 1.34
  diff -u -r1.33 -r1.34
  --- configure	2001/11/02 20:02:02	1.33
  +++ configure	2001/11/29 18:25:18	1.34
  @@ -1254,6 +1254,7 @@
           *-*-UnixWare*)  platform=UNIXWARE ;;
           *-*-unixware*)  platform=UNIXWARE ;;
           *-*-linux*)     platform=LINUX ;;
  +	*-*-freebsd*)	platform=FREEBSD ;;
           *-*-irix*)      platform=IRIX ;;
           *-*-aix*)       platform=AIX
                         case "${host}" in
  @@ -1285,7 +1286,7 @@
   
   
   
  -prefix_include=${PREFIX}/include/xercesc
  +prefix_include='${PREFIX}/include/xercesc'
   
   
   
  @@ -1444,6 +1445,7 @@
   util/Platforms/Solaris/Makefile \
   util/Platforms/AIX/Makefile \
   util/Platforms/Linux/Makefile \
  +util/Platforms/FreeBSD/Makefile \
   util/Platforms/HPUX/Makefile \
   util/Platforms/OS390/Makefile \
   util/Platforms/OS400/Makefile \
  @@ -1585,6 +1587,7 @@
   util/Platforms/Solaris/Makefile \
   util/Platforms/AIX/Makefile \
   util/Platforms/Linux/Makefile \
  +util/Platforms/FreeBSD/Makefile \
   util/Platforms/HPUX/Makefile \
   util/Platforms/OS390/Makefile \
   util/Platforms/OS400/Makefile \
  
  
  
  1.31      +2 -0      xml-xerces/c/src/configure.in
  
  Index: configure.in
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/configure.in,v
  retrieving revision 1.30
  retrieving revision 1.31
  diff -u -r1.30 -r1.31
  --- configure.in	2001/11/02 20:02:02	1.30
  +++ configure.in	2001/11/29 18:25:18	1.31
  @@ -32,6 +32,7 @@
           *-*-UnixWare*)  platform=UNIXWARE ;;
           *-*-unixware*)  platform=UNIXWARE ;;
           *-*-linux*)     platform=LINUX ;;
  +        *-*-freebsd*)   platform=FREEBSD ;;
           *-*-irix*)      platform=IRIX ;;
           *-*-aix*)       platform=AIX
                         case "${host}" in
  @@ -110,6 +111,7 @@
   util/Platforms/Solaris/Makefile \
   util/Platforms/AIX/Makefile \
   util/Platforms/Linux/Makefile \
  +util/Platforms/FreeBSD/Makefile \
   util/Platforms/HPUX/Makefile \
   util/Platforms/OS390/Makefile \
   util/Platforms/OS400/Makefile \
  
  
  
  1.46      +15 -7     xml-xerces/c/src/runConfigure
  
  Index: runConfigure
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/runConfigure,v
  retrieving revision 1.45
  retrieving revision 1.46
  diff -u -r1.45 -r1.46
  --- runConfigure	2001/10/25 17:53:16	1.45
  +++ runConfigure	2001/11/29 18:25:18	1.46
  @@ -2,7 +2,7 @@
   #
   # The Apache Software License, Version 1.1
   #
  -# Copyright (c) 1999-2000 The Apache Software Foundation.  All rights
  +# Copyright (c) 1999-2001 The Apache Software Foundation.  All rights
   # reserved.
   #
   # Redistribution and use in source and binary forms, with or without
  @@ -55,7 +55,7 @@
   # <http://www.apache.org/>.
   #
   #
  -# $Id: runConfigure,v 1.45 2001/10/25 17:53:16 tng Exp $
  +# $Id: runConfigure,v 1.46 2001/11/29 18:25:18 tng Exp $
   #
   #
   
  @@ -78,7 +78,7 @@
       echo "runConfigure: Helper script to run \"configure\" for one of the supported platforms"
       echo "Usage: runConfigure \"options\""
       echo "       where options may be any of the following:"
  -    echo "       -p <platform> (accepts 'aix', 'linux', 'solaris',
  +    echo "       -p <platform> (accepts 'aix', 'linux', 'freebsd', 'solaris',
               'hp-10', 'hp-11', 'unixware', 'os400', 'irix', 'ptx', 'tru64', 'macosx' )"
       echo "       -c <C compiler name> (e.g. gcc, cc, xlc_r, icc)"
       echo "       -x <C++ compiler name> (e.g. g++, CC, xlC_r, icc, c++)"
  @@ -202,7 +202,7 @@
   #
   
   case $platform in
  -   aix | linux | solaris | hp-10 | hp-11 | irix | unixware | os400 | ptx | tru64 | macosx)
  +   aix | linux | freebsd | solaris | hp-10 | hp-11 | irix | unixware | os400 | ptx | tru64 | macosx)
          # platform has been recognized
          ;;
      *)
  @@ -262,6 +262,9 @@
                  exit ${ERROR_EXIT_CODE};;
           esac
           fi
  +    elif test $platform = "freebsd"; then
  +	threadingLibs="-pthread -lc_r"
  +	threadingDefines="-D_THREAD_SAFE -DXML_USE_PTHREADS"
       elif test $platform = "aix"; then
           aix_version=`./config.guess`;
           echo Found host system to be $aix_version
  @@ -347,12 +350,12 @@
   if test $transcoder; then
   case $transcoder in
      icu)
  -       if test -z $ICUROOT; then
  +       if test ${ICUROOT}o = "o"; then
              echo '***Error*** ICUROOT environment variable not defined. Exiting...';
              exit ${ERROR_EXIT_CODE};
          fi
          transcodingDefines="-DXML_USE_ICU_TRANSCODER -I${ICUROOT}/include";
  -       transcodingLibs="-L${ICUROOT}/lib -L${ICUROOT}/data";
  +       transcodingLibs="-L${ICUROOT} -L${ICUROOT}/lib -L${ICUROOT}/data";
          TRANSCODER=ICU;;
      Iconv400)
          transcodingDefines="-DXML_USE_ICONV400_TRANSCODER" ;
  @@ -382,7 +385,7 @@
   if test $msgloader ; then
   case $msgloader in
      icu)
  -       if test -z $ICUROOT ; then
  +       if test ${ICUROOT}o = "o" ; then
              echo '***Error*** ICUROOT environment variable not defined. Exiting...';
              exit ${ERROR_EXIT_CODE};
          fi
  @@ -522,6 +525,11 @@
   else
   sh ./configure $configureoptions
   fi
  +# exit if configure failed
  +if test $? != 0; then
  +  exit 1
  +fi
  +
   echo
   echo In future, you may also directly type the following commands to create the Makefiles.
   echo
  
  
  
  1.21      +6 -0      xml-xerces/c/src/util/AutoSense.hpp
  
  Index: AutoSense.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/util/AutoSense.hpp,v
  retrieving revision 1.20
  retrieving revision 1.21
  diff -u -r1.20 -r1.21
  --- AutoSense.hpp	2001/05/11 13:26:26	1.20
  +++ AutoSense.hpp	2001/11/29 18:25:18	1.21
  @@ -56,6 +56,9 @@
   
   /*
    * $Log: AutoSense.hpp,v $
  + * Revision 1.21  2001/11/29 18:25:18  tng
  + * FreeBSD support by Michael Huedepohl.
  + *
    * Revision 1.20  2001/05/11 13:26:26  tng
    * Copyright update.
    *
  @@ -157,6 +160,9 @@
       #define XML_UNIX
   #elif defined(__linux__)
       #define XML_LINUX
  +    #define XML_UNIX
  +#elif defined(__FreeBSD__)
  +    #define XML_FREEBSD
       #define XML_UNIX
   #elif defined(IRIX) || defined(__sgi)
       #define XML_IRIX
  
  
  
  1.18      +7 -0      xml-xerces/c/src/util/XercesDefs.hpp
  
  Index: XercesDefs.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/util/XercesDefs.hpp,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- XercesDefs.hpp	2001/11/23 17:19:33	1.17
  +++ XercesDefs.hpp	2001/11/29 18:25:18	1.18
  @@ -56,6 +56,9 @@
   
   /*
    * $Log: XercesDefs.hpp,v $
  + * Revision 1.18  2001/11/29 18:25:18  tng
  + * FreeBSD support by Michael Huedepohl.
  + *
    * Revision 1.17  2001/11/23 17:19:33  tng
    * Change from 1.5.2 to 1.6.0
    *
  @@ -218,6 +221,10 @@
   
   #if defined(XML_LINUX)
   #include    <util/Platforms/Linux/LinuxDefs.hpp>
  +#endif
  +
  +#if defined(XML_FREEBSD)
  +#include    <util/Platforms/FreeBSD/FreeBSDDefs.hpp>
   #endif
   
   #if defined(XML_OS390)
  
  
  
  1.16      +7 -1      xml-xerces/c/src/util/Platforms/Makefile.in
  
  Index: Makefile.in
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/util/Platforms/Makefile.in,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- Makefile.in	2001/07/06 17:12:02	1.15
  +++ Makefile.in	2001/11/29 18:25:18	1.16
  @@ -1,7 +1,7 @@
   #
   # The Apache Software License, Version 1.1
   #
  -# Copyright (c) 1999-2000 The Apache Software Foundation.  All rights
  +# Copyright (c) 1999-2001 The Apache Software Foundation.  All rights
   # reserved.
   #
   # Redistribution and use in source and binary forms, with or without
  @@ -55,6 +55,9 @@
   #
   #
   # $Log: Makefile.in,v $
  +# Revision 1.16  2001/11/29 18:25:18  tng
  +# FreeBSD support by Michael Huedepohl.
  +#
   # Revision 1.15  2001/07/06 17:12:02  tng
   # Automatic build of single-threaded library.  By Martin Kalen.
   #
  @@ -133,6 +136,9 @@
   endif
   ifeq (${PLATFORM}, LINUX)
       SUBMODULE = Linux
  +endif
  +ifeq (${PLATFORM}, FREEBSD)
  +    SUBMODULE = FreeBSD
   endif
   ifeq (${PLATFORM}, HPUX)
       SUBMODULE = HPUX
  
  
  
  1.1                  xml-xerces/c/src/util/Platforms/FreeBSD/FreeBSDDefs.hpp
  
  Index: FreeBSDDefs.hpp
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2001 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: FreeBSDDefs.hpp,v $
   * Revision 1.1  2001/11/29 18:25:18  tng
   * FreeBSD support by Michael Huedepohl.
   *
   */
  
  
  // ---------------------------------------------------------------------------
  //  FreeBSD runs in little endian mode
  // ---------------------------------------------------------------------------
  #define ENDIANMODE_LITTLE
  typedef void* FileHandle;
  
  #ifndef FREEBSD
  #define FREEBSD
  #endif
  
  
  
  1.1                  xml-xerces/c/src/util/Platforms/FreeBSD/FreeBSDPlatformUtils.cpp
  
  Index: FreeBSDPlatformUtils.cpp
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2001 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: FreeBSDPlatformUtils.cpp,v $
   * Revision 1.1  2001/11/29 18:25:18  tng
   * FreeBSD support by Michael Huedepohl.
   *
   */
  
  
  // ---------------------------------------------------------------------------
  //  Includes
  // ---------------------------------------------------------------------------
  
  #if !defined(APP_NO_THREADS)
  #include    <pthread.h>
  #endif
  
  #ifndef _GNU_SOURCE
      #error _GNU_SOURCE is not defined in your compile settings
  #endif
  
  #include    <unistd.h>
  #include    <stdio.h>
  #include    <stdlib.h>
  #include    <errno.h>
  // #include    <libgen.h>
  #include    <sys/time.h>
  #include    <string.h>
  #include    <util/PlatformUtils.hpp>
  #include    <util/RuntimeException.hpp>
  #include    <util/Janitor.hpp>
  #include    <util/Mutexes.hpp>
  #include    <util/XMLString.hpp>
  #include    <util/XMLUniDefs.hpp>
  #include    <util/XMLUni.hpp>
  
  #if defined(XML_USE_ICU_TRANSCODER)
      #include <util/Transcoders/ICU/ICUTransService.hpp>
  #else
      // Use native transcoder. Same as -DXML_USE_NATIVE_TRANSCODER
      #include <util/Transcoders/Iconv/IconvTransService.hpp>
  #endif
  
  
  #if defined(XML_USE_ICU_MESSAGELOADER)
      #include <util/MsgLoaders/ICU/ICUMsgLoader.hpp>
  #else
      // Same as -DXML_USE_INMEM_MESSAGELOADER
      #include <util/MsgLoaders/InMemory/InMemMsgLoader.hpp>
  #endif
  
  
  #if defined (XML_USE_NETACCESSOR_SOCKET)
      #include <util/NetAccessors/Socket/SocketNetAccessor.hpp>
  #endif
  
  
  
  // ---------------------------------------------------------------------------
  //  Local Methods
  // ---------------------------------------------------------------------------
  
  static void WriteCharStr( FILE* stream, const char* const toWrite)
  {
      if (fputs(toWrite, stream) == EOF)
      {
          ThrowXML(XMLPlatformUtilsException,
                   XMLExcepts::Strm_StdErrWriteFailure);
      }
  }
  
  static void WriteUStrStdErr( const XMLCh* const toWrite)
  {
      char* tmpVal = XMLString::transcode(toWrite);
      ArrayJanitor<char> janText(tmpVal);
      if (fputs(tmpVal, stderr) == EOF)
      {
         ThrowXML(XMLPlatformUtilsException,
                  XMLExcepts::Strm_StdErrWriteFailure);
     }
  }
  
  static void WriteUStrStdOut( const XMLCh* const toWrite)
   {
      char* tmpVal = XMLString::transcode(toWrite);
      ArrayJanitor<char> janText(tmpVal);
      if (fputs(tmpVal, stdout) == EOF)
      {
          ThrowXML(XMLPlatformUtilsException,
                   XMLExcepts::Strm_StdOutWriteFailure);
      }
  }
  
  XMLNetAccessor* XMLPlatformUtils::makeNetAccessor()
  {
  #if defined (XML_USE_NETACCESSOR_SOCKET)
      return new SocketNetAccessor();
  #else
      return 0;
  #endif
  }
  
  
  
  XMLCh* XMLPlatformUtils::weavePaths(const   XMLCh* const    basePath
                                      , const XMLCh* const    relativePath)
  
  {
      // Create a buffer as large as both parts and empty it
      XMLCh* tmpBuf = new XMLCh[XMLString::stringLen(basePath)
                                + XMLString::stringLen(relativePath)
                                + 2];
      *tmpBuf = 0;
  
      //
      //  If we have no base path, then just take the relative path as
      //  is.
      //
      if (!basePath)
      {
          XMLString::copyString(tmpBuf, relativePath);
          return tmpBuf;
      }
  
      if (!*basePath)
      {
          XMLString::copyString(tmpBuf, relativePath);
          return tmpBuf;
      }
  
      const XMLCh* basePtr = basePath + (XMLString::stringLen(basePath) - 1);
      if ((*basePtr != chForwardSlash)
      &&  (*basePtr != chBackSlash))
      {
          while ((basePtr >= basePath)
          &&     ((*basePtr != chForwardSlash) && (*basePtr != chBackSlash)))
          {
              basePtr--;
          }
      }
  
      // There is no relevant base path, so just take the relative part
      if (basePtr < basePath)
      {
          XMLString::copyString(tmpBuf, relativePath);
          return tmpBuf;
      }
  
      // After this, make sure the buffer gets handled if we exit early
      ArrayJanitor<XMLCh> janBuf(tmpBuf);
  
      //
      //  We have some path part, so we need to check to see if we ahve to
      //  weave any of the parts together.
      //
      const XMLCh* pathPtr = relativePath;
      while (true)
      {
          // If it does not start with some period, then we are done
          if (*pathPtr != chPeriod)
              break;
  
          unsigned int periodCount = 1;
          pathPtr++;
          if (*pathPtr == chPeriod)
          {
              pathPtr++;
              periodCount++;
          }
  
          // Has to be followed by a \ or / or the null to mean anything
          if ((*pathPtr != chForwardSlash) && (*pathPtr != chBackSlash)
          &&  *pathPtr)
          {
              break;
          }
          if (*pathPtr)
              pathPtr++;
  
          // If its one period, just eat it, else move backwards in the base
          if (periodCount == 2)
          {
              basePtr--;
              while ((basePtr >= basePath)
              &&     ((*basePtr != chForwardSlash) && (*basePtr != chBackSlash)))
              {
                  basePtr--;
              }
  
              // The base cannot provide enough levels, so its in error/
              if (basePtr < basePath)
                  ThrowXML(XMLPlatformUtilsException,
                           XMLExcepts::File_BasePathUnderflow);
          }
      }
  
      // Copy the base part up to the base pointer
      XMLCh* bufPtr = tmpBuf;
      const XMLCh* tmpPtr = basePath;
      while (tmpPtr <= basePtr)
          *bufPtr++ = *tmpPtr++;
  
      // And then copy on the rest of our path
      XMLString::copyString(bufPtr, pathPtr);
  
      // Orphan the buffer and return it
      janBuf.orphan();
      return tmpBuf;
  }
  
  
  // ---------------------------------------------------------------------------
  //  XMLPlatformUtils: Private Static Methods
  // ---------------------------------------------------------------------------
  
  //
  //  This method is called by the platform independent part of this class
  //  when client code asks to have one of the supported message sets loaded.
  //
  
  XMLMsgLoader* XMLPlatformUtils::loadAMsgSet(const XMLCh* const msgDomain)
  {
      XMLMsgLoader* retVal;
      try
      {
  #if defined (XML_USE_ICU_MESSAGELOADER)
          retVal = new ICUMsgLoader(msgDomain);
  #else
          // same as -DXML_USE_INMEM_MESSAGELOADER
          retVal = new InMemMsgLoader(msgDomain);
  #endif
      }
  
      catch(...)
      {
          panic(XMLPlatformUtils::Panic_CantLoadMsgDomain);
      }
      return retVal;
  }
  
  
  //
  //  This method is called very early in the bootstrapping process. This guy
  //  must create a transcoding service and return it. It cannot use any string
  //  methods, any transcoding services, throw any exceptions, etc... It just
  //  makes a transcoding service and returns it, or returns zero on failure.
  //
  
  XMLTransService* XMLPlatformUtils::makeTransService()
  {
  #if defined (XML_USE_ICU_TRANSCODER)
      // Use ICU transcoding services.
      // same as -DXML_USE_ICU_MESSAGELOADER
      return new ICUTransService;
  #else
      // Use native transcoding services.
      // same as -DXML_USE_INMEM_MESSAGELOADER
      return new IconvTransService;
  
  #endif
  }
  
  // ---------------------------------------------------------------------------
  //  XMLPlatformUtils: The panic method
  // ---------------------------------------------------------------------------
  void XMLPlatformUtils::panic(const PanicReasons reason)
  {
       const char* reasonStr = "Unknown reason";
      if (reason == Panic_NoTransService)
          reasonStr = "Could not load a transcoding service";
      else if (reason == Panic_NoDefTranscoder)
          reasonStr = "Could not load a local code page transcoder";
      else if (reason == Panic_CantFindLib)
          reasonStr = "Could not find the xerces-c DLL";
      else if (reason == Panic_UnknownMsgDomain)
          reasonStr = "Unknown message domain";
      else if (reason == Panic_CantLoadMsgDomain)
          reasonStr = "Cannot load message domain";
      else if (reason == Panic_SynchronizationErr)
          reasonStr = "Cannot synchronize system or mutex";
      else if (reason == Panic_SystemInit)
          reasonStr = "Cannot initialize the system or mutex";
  
      fprintf(stderr, "%s\n", reasonStr);
  
      exit(-1);
  }
  
  
  // ---------------------------------------------------------------------------
  //  XMLPlatformUtils: File Methods
  // ---------------------------------------------------------------------------
  
  unsigned int XMLPlatformUtils::curFilePos(FileHandle theFile)
  {
      int curPos = ftell( (FILE*)theFile);
      if (curPos == -1)
          ThrowXML(XMLPlatformUtilsException,
                   XMLExcepts::File_CouldNotGetSize);
  
      return (unsigned int)curPos;
  }
  
  void XMLPlatformUtils::closeFile(FileHandle theFile)
  {
      if (fclose((FILE*)theFile))
          ThrowXML(XMLPlatformUtilsException,
                   XMLExcepts::File_CouldNotCloseFile);
  }
  
  unsigned int XMLPlatformUtils::fileSize(FileHandle theFile)
  {
      // Get the current position
      long  int curPos = ftell((FILE*) theFile);
      if (curPos == -1)
          ThrowXML(XMLPlatformUtilsException,
                   XMLExcepts::File_CouldNotGetCurPos);
  
      // Seek to the end and save that value for return
       if (fseek((FILE*) theFile, 0, SEEK_END))
          ThrowXML(XMLPlatformUtilsException,
                   XMLExcepts::File_CouldNotSeekToEnd);
  
      long int retVal = ftell((FILE*)theFile);
      if (retVal == -1)
          ThrowXML(XMLPlatformUtilsException,
                   XMLExcepts::File_CouldNotSeekToEnd);
  
      // And put the pointer back
  
      if (fseek( (FILE*)theFile, curPos, SEEK_SET) )
          ThrowXML(XMLPlatformUtilsException,
                   XMLExcepts::File_CouldNotSeekToPos);
  
      return (unsigned int)retVal;
  }
  
  FileHandle XMLPlatformUtils::openFile(const XMLCh* const fileName)
  {
      const char* tmpFileName = XMLString::transcode(fileName);
      ArrayJanitor<char> janText((char*)tmpFileName);
      FileHandle retVal = (FILE*)fopen( tmpFileName , "rb" );
  
      if (retVal == NULL)
          return 0;
      return retVal;
  }
  
  FileHandle XMLPlatformUtils::openFile(const char* const fileName)
  {
      FileHandle retVal = (FILE*)fopen( fileName , "rb" );
  
      if (retVal == NULL)
          return 0;
      return retVal;
  }
  
  
  FileHandle XMLPlatformUtils::openStdInHandle()
  {
          return (FileHandle)fdopen(dup(0), "rb");
  }
  
  
  
  unsigned int
  XMLPlatformUtils::readFileBuffer( FileHandle          theFile
                                  , const unsigned int  toRead
                                  , XMLByte* const      toFill)
  {
      size_t noOfItemsRead = fread((void*) toFill, 1, toRead, (FILE*)theFile);
  
      if(ferror((FILE*)theFile))
      {
          ThrowXML(XMLPlatformUtilsException,
                   XMLExcepts::File_CouldNotReadFromFile);
      }
  
      return (unsigned int)noOfItemsRead;
  }
  
  
  void XMLPlatformUtils::resetFile(FileHandle theFile)
  {
      // Seek to the start of the file
      if (fseek((FILE*)theFile, 0, SEEK_SET))
          ThrowXML(XMLPlatformUtilsException,
                   XMLExcepts::File_CouldNotResetFile);
  }
  
  
  // ---------------------------------------------------------------------------
  //  XMLPlatformUtils: Timing Methods
  // ---------------------------------------------------------------------------
  
  unsigned long XMLPlatformUtils::getCurrentMillis()
  {
      struct timeval aTime;
      gettimeofday(&aTime, NULL);
      return (unsigned long) (aTime.tv_sec * 1000 + aTime.tv_usec / 1000);
  
  }
  
  XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
  {
  
      //
      //  NOTE: THe path provided has always already been opened successfully,
      //  so we know that its not some pathological freaky path. It comes in
      //  in native format, and goes out as Unicode always
      //
      char* newSrc = XMLString::transcode(srcPath);
      ArrayJanitor<char> janText(newSrc);
  
      // Use a local buffer that is big enough for the largest legal path
      char *absPath = new char[PATH_MAX];
      // get the absolute path
      char* retPath = realpath(newSrc, absPath);
      ArrayJanitor<char> janText2(retPath);
  
      if (!retPath)
      {
          ThrowXML(XMLPlatformUtilsException, XMLExcepts::File_CouldNotGetBasePathName);
      }
      return XMLString::transcode(absPath);
  }
  
  bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
  {
      // Check for pathological case of empty path
      if (!toCheck[0])
          return false;
  
      //
      //  If it starts with a slash, then it cannot be relative. This covers
      //  both something like "\Test\File.xml" and an NT Lan type remote path
      //  that starts with a node like "\\MyNode\Test\File.xml".
      //
      if (toCheck[0] == XMLCh('/'))
          return false;
  
      // Else assume its a relative path
      return true;
  }
  
  
  // -----------------------------------------------------------------------
  //  Mutex methods
  // -----------------------------------------------------------------------
  
  #if !defined(APP_NO_THREADS)
  
  // ---------------------------------------------------------------------------
  //  XMLPlatformUtils: Platform init method
  // ---------------------------------------------------------------------------
  
  static XMLMutex atomicOpsMutex;
  
  void XMLPlatformUtils::platformInit()
  {
      //
      // The atomicOps mutex needs to be created early.
      // Normally, mutexes are created on first use, but there is a
      // circular dependency between compareAndExchange() and
      // mutex creation that must be broken.
  
      atomicOpsMutex.fHandle = XMLPlatformUtils::makeMutex();
  }
  
  void* XMLPlatformUtils::makeMutex()
  {
      pthread_mutex_t* mutex = new pthread_mutex_t;
      pthread_mutexattr_t*  attr = new pthread_mutexattr_t;
      pthread_mutexattr_init(attr);
      pthread_mutexattr_settype(attr, PTHREAD_MUTEX_RECURSIVE);
      if (pthread_mutex_init(mutex, attr))
      {
          ThrowXML(XMLPlatformUtilsException,
                   XMLExcepts::Mutex_CouldNotCreate);
      }
      pthread_mutexattr_destroy(attr);
      delete attr;
      return (void*)(mutex);
  
  }
  
  void XMLPlatformUtils::closeMutex(void* const mtxHandle)
  {
      if (mtxHandle != NULL)
      {
          if (pthread_mutex_destroy((pthread_mutex_t*) mtxHandle))
          {
              ThrowXML(XMLPlatformUtilsException,
                       XMLExcepts::Mutex_CouldNotDestroy);
          }
          delete mtxHandle;
      }
  }
  
  
  void XMLPlatformUtils::lockMutex(void* const mtxHandle)
  {
      if (mtxHandle != NULL)
      {
          if (pthread_mutex_lock((pthread_mutex_t*) mtxHandle))
          {
              ThrowXML(XMLPlatformUtilsException,
                       XMLExcepts::Mutex_CouldNotLock);
          }
      }
  }
  
  
  void XMLPlatformUtils::unlockMutex(void* const mtxHandle)
  {
      if (mtxHandle != NULL)
      {
          if (pthread_mutex_unlock((pthread_mutex_t*) mtxHandle))
          {
              ThrowXML(XMLPlatformUtilsException,
                       XMLExcepts::Mutex_CouldNotUnlock);
          }
      }
  }
  
  
  // -----------------------------------------------------------------------
  //  Miscellaneous synchronization methods
  // -----------------------------------------------------------------------
  
  void* XMLPlatformUtils::compareAndSwap(void**            toFill
                                       , const void* const newValue
                                       , const void* const toCompare)
  {
      XMLMutexLock lockMutex(&atomicOpsMutex);
  
      void *retVal = *toFill;
      if (*toFill == toCompare)
          *toFill = (void *)newValue;
  
      return retVal;
  }
  
  int XMLPlatformUtils::atomicIncrement(int &location)
  {
      XMLMutexLock localLock(&atomicOpsMutex);
  
      return ++location;
  }
  
  int XMLPlatformUtils::atomicDecrement(int &location)
  {
      XMLMutexLock localLock(&atomicOpsMutex);
  
      return --location;
  }
  
  #else // #if !defined (APP_NO_THREADS)
  
  void XMLPlatformUtils::platformInit()
  {
  }
  
  void* XMLPlatformUtils::makeMutex()
  {
          return 0;
  }
  
  void XMLPlatformUtils::closeMutex(void* const mtxHandle)
  {
  }
  
  void XMLPlatformUtils::lockMutex(void* const mtxHandle)
  {
  }
  
  void XMLPlatformUtils::unlockMutex(void* const mtxHandle)
  {
  }
  
  void* XMLPlatformUtils::compareAndSwap (void**             toFill,
                                          const void* const  newValue,
                                          const void* const  toCompare)
  {
      void *retVal = *toFill;
      if (*toFill == toCompare)
         *toFill = (void *)newValue;
      return retVal;
  }
  
  int XMLPlatformUtils::atomicIncrement(int &location)
  {
      return ++location;
  }
  
  int XMLPlatformUtils::atomicDecrement(int &location)
  {
      return --location;
  }
  
  #endif // APP_NO_THREADS
  
  void XMLPlatformUtils::platformTerm()
  {
  #if !defined(APP_NO_THREADS)
      // delete the mutex we created
  	closeMutex(atomicOpsMutex.fHandle);
  	atomicOpsMutex.fHandle = 0;
  #endif
  }
  
  
  
  1.1                  xml-xerces/c/src/util/Platforms/FreeBSD/Makefile.in
  
  Index: Makefile.in
  ===================================================================
  #
  # The Apache Software License, Version 1.1
  #
  # Copyright (c) 2001 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  2001/11/29 18:25:18  tng
  # FreeBSD support by Michael Huedepohl.
  #
  #
  
  PLATFORM = @platform@
  CC  = @cc@
  CXX = @cxx@
  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/FreeBSD
  CXXFLAGS += -D_GNU_SOURCE -D__USE_GNU
  CPP_PUBHEADERS = FreeBSDDefs.hpp
  CPP_OBJECTS = FreeBSDPlatformUtils.$(TO)
  
  include ../../Makefile.util.submodule
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-cvs-help@xml.apache.org