
                          Apache Axis2/C Util
                          ====================

  What is it?
  -----------
  Axis2/C Util project is supposed to contain some utilities which are going to be
  used across the Axis2/C platform. Initially this was inside Axis2/C code base
  as util folder. But as the project expands and as related projects were emerging
  there was a need to use those utilities across those projects of Axis2 C platform.
  The resulting was springing of a new project called Axis2 C/Util.
  
  As a project of the Apache Software Foundation, the
  developers aim to collaboratively develop and maintain a robust,
  commercial-grade, standards-based Web Services stack implementation with
  freely available source code.

  The Latest Version
  ------------------

  You can get the latest svn checkout of Apache Axis2/C util module from

  https://svn.apache.org/repos/asf/webservices/axis2/trunk/c/util

  Installation
  ------------

  Please see the file called INSTALL. 

  Licensing
  ---------

  Please see the file called LICENSE.

  Contacts
  --------

     o If you want freely available support for using Apache Axis2/C Util please
       join the Apache Axis2/C user community by subscribing to users mailing
       list, axis-c-user@ws.apache.org' as described at
       http://ws.apache.org/axis2/c/mail-lists.html

    o If you have a bug report for Apache Axis2/C Guththila please log-in and create a JIRA issue
       at http://issues.apache.org/jira/browse/AXIS2C

     o If you want to participate actively in developing Apache Axis2/C Guththila please
       subscribe to the `axis-c-dev@ws.apache.org' mailing list as described at
       http://ws.apache.org/axis2/c/mail-lists.html


  Acknowledgments
  ----------------

  Apache Axis2/C Util relies heavily on the use of autoconf, automake and libtool
  to provide a build environment.
