/// \page build Building From Source
///
/// The C runtime is provided in source code form only as there are too many binary
/// versions to sensibly maintain binaries on www.antlr.org. 
///
/// The runtime code is provided with .sln and .vcproj files for Visual Studio 2005 and 2008,
/// and \b configure files for building and installation on UNIX or other systems that support this tool. If your
/// system is neither Windows nor \b configure compatible, then you should find it
/// reasonable to build the code manually (see section "Building Manually".)
///
/// \section src Source Code Organization
///
/// The source code expands from a tar/zip file to give you the following
/// directories:
///
/// - <b>./</b> The location of the configure script and the antlr3config.h file
///   generated by the running the configure script.This directory also 
///   contains the solution and project files for visual studio 2005 and
///   2008.
/// - <b>./src</b> The location of all the C files in the project.
/// - <b>./include</b> The location of all the header files for the project
/// - <b>./doxygen</b> The location of documentation files such as the one that generates this page
/// - Other ancillary directories used by the build or documentation process.
///
/// \section winbuild Building for Windows
///
/// If you are building for Cygwin, or a similar UNIX on Windows System, follow the "Building With Configure" instructions below.
/// 
/// Note that the runtime is no longer compatible with the VC6 Microsoft compiler. If you absolutely need to build with
/// this compiler, you can probably hack the source code to deall with the pieces that VC6 cannot handle such as the
/// ULL suffix for constants.
///
/// If you wish to build the binaries for Windows using Visual Studio 2005, or 2008 you may build using the IDE:
///  -# Open the C.sln file
///  -# Select batch Build from the Build menu
///  -# Select all configurations and press the build button.
///
/// If you wish or need to build the libraries from the command line, then you must 
/// use a Windows command shell configured for access to VS2005/VS2008 compilers, such as the one that is 
/// started from:
///
/// <i>Start->Microsoft Visual Studio 2005->Visual Studio Tools->Visual Studio 2005 Command Prompt</i>
///
/// There appears to be no way to build all targets at once in a batch mode from the command line, 
/// so you may build one or all of the following:
/// \verbatim
   C:\antlrsrc\code\antlr\main\runtime\C> DEVENV C.sln /Build ReleaseDLL
   C:\antlrsrc\code\antlr\main\runtime\C> DEVENV C.sln /Build Release
   C:\antlrsrc\code\antlr\main\runtime\C> DEVENV C.sln /Build DebugDLL
   C:\antlrsrc\code\antlr\main\runtime\C> DEVENV C.sln /Build Debug
\endverbatim
///
/// After the build is complete you will find the \c.\cDLL and \c.\cLIB files under the directory containing C.sln, 
/// in a subdirectory named after the /Build target. In the Release and Debug targets, you will find that there is only a \c.\cLIB archive file, 
/// which you can link directly into your own projects if you wish to avoid the DLL. In \c ReleaseDLL and \c DebugDLL you will find both a 
/// \c .LIB file which you should link your projects with and a DLL. The library and names on Windows are as follows:
///
/// \verbatim
  - ReleaseDLL  :   ANTLR3C.DLL and ANTLR3C_DLL.LIB
  - DebugDLL    :  ANTLR3CD.DLL and ANTLR3CD_DLL.LIB
  - Release     :   ANTLR3C.LIB
  - Debug       :  ANTLR3CD.LIB
\endverbatim
///
/// There currently no .msi modules or other installs built for Windows, so you must place the DLLs in a directory referenced 
/// by the PATH environment variable and make the include directory available to your project configurations.
///
///
/// \section configure Building with configure
///
/// Before starting, make sure that you are using a source code distribution and not the source code directly from the
/// Perforce repository. If you use the source from the perforce tree directly, you will find that there is no configure
/// script as this is generated as part of the distribution build by the maintainers. If you feel the need to build from
/// the distribution tree then you must have all the autobuild packages available on your system and can generate the
/// configure script using autoreconf. If you are not familiar with these tools, then please use the tgz files in the
/// dist subdirectory (or downloaded from the ANTLR web site).
///
/// The source code file should be expanded in a directory of your choice (probably your working directory) using the command:
/// 
/// \verbatim
gzip -dc antlrtgzname.tar.gz | tar xvf -
\endverbatim
///
/// Where: <b>antlrtgzname.tar.gz</b> is of course the name of the tar when you downloaded it. You should find a \b configure script in the sub directory thus created.
///
/// The configure script accepts the usual options, such as --prefix= but the default is to build in the source directory and to place libraries in 
/// <b>/usr/local/lib</b> and include files (for building your recognizers) in <b>/usr/local/include</b>. There are also a number of antlr specific options, which you may wish to utilize. The command:
/// \verbatim
./configure --help
\endverbatim
///
/// Will document the latest incarnations of these options in case this documentation is ever out of date. At this time the options are:
///
/// \verbatim
  --enable-debuginfo   Compiles debug info into the library (default no)
  --enable-64bit       Turns on flags that produce 64 bit object code if
                       any are required (default no)
\endverbatim
///
/// Unless you need 64 bit builds, or a change in library types, you will generally use the configure command without options:
///
/// Here is a sample configure output:
///
/// \verbatim
[jimi@localhost dist]$ tar zvxf libantlr3c-3.0.0-rc8.tar.gz

libantlr3c-3.0.0-rc8/
libantlr3c-3.0.0-rc8/antlr3config.h
libantlr3c-3.0.0-rc8/src/
libantlr3c-3.0.0-rc8/src/antlr3stringstream.c
...
libantlr3c-3.0.0-rc8/antlr3config.h.in
\endverbatim
/// \verbatim
[jimi@localhost dist]$ cd libantlr3c-3.0.0-rc 
\endverbatim
/// \verbatim
[jimi@localhost libantlr3c-3.0.0-rc8]$ ./configure

checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking for xlc... no
checking for aCC... no
checking for gcc... gcc
...
checking for strdup... yes
configure: creating ./config.status
config.status: creating Makefile
config.status: creating antlr3config.h
config.status: antlr3config.h is unchanged
config.status: executing depfiles commands
\endverbatim
///
/// Having configured the library successfully, you need only make it, and install it:
///
/// \verbatim
[jimi@localhost libantlr3c-3.0.0-rc8]$ make
\endverbatim
/// \verbatim
make  all-am
make[1]: Entering directory `/home/jimi/antlrsrc/code/antlr/main/runtime/C/dist/libantlr3c-3.0.0-rc8'
/bin/sh ./libtool --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I. -Iinclude -Iinclude    -O2  -MT antlr3baserecognizer.lo -MD -MP -MF .deps/antlr3baserecognizer.Tpo -c -o antlr3baserecognizer.lo `test -f 'src/antlr3baserecognizer.c' || echo './'`src/antlr3baserecognizer.c
...
gcc  -shared  .libs/antlr3baserecognizer.o .libs/antlr3basetree.o .libs/antlr3basetreeadaptor.o .libs/antlr3bitset.o .libs/antlr3collections.o .libs/antlr3commontoken.o .libs/antlr3commontree.o .libs/antlr3commontreeadaptor.o .libs/antlr3commontreenodestream.o .libs/antlr3cyclicdfa.o .libs/antlr3encodings.o .libs/antlr3exception.o .libs/antlr3filestream.o .libs/antlr3inputstream.o .libs/antlr3intstream.o .libs/antlr3lexer.o .libs/antlr3parser.o .libs/antlr3string.o .libs/antlr3stringstream.o .libs/antlr3tokenstream.o .libs/antlr3treeparser.o .libs/antlr3rewritestreams.o .libs/antlr3ucs2inputstream.o   -Wl,-soname -Wl,libantlr3c.so -o .libs/libantlr3c.so
ar cru .libs/libantlr3c.a  antlr3baserecognizer.o antlr3basetree.o antlr3basetreeadaptor.o antlr3bitset.o antlr3collections.o antlr3commontoken.o antlr3commontree.o antlr3commontreeadaptor.o antlr3commontreenodestream.o antlr3cyclicdfa.o antlr3encodings.o antlr3exception.o antlr3filestream.o antlr3inputstream.o antlr3intstream.o antlr3lexer.o antlr3parser.o antlr3string.o antlr3stringstream.o antlr3tokenstream.o antlr3treeparser.o antlr3rewritestreams.o antlr3ucs2inputstream.o
ranlib .libs/libantlr3c.a
creating libantlr3c.la

(cd .libs && rm -f libantlr3c.la && ln -s ../libantlr3c.la libantlr3c.la)
make[1]: Leaving directory `/home/jimi/antlrsrc/code/antlr/main/runtime/C/dist/libantlr3c-3.0.0-rc8' 
\endverbatim
/// \verbatim
[jimi@localhost libantlr3c-3.0.0-rc8]$ sudo make install
\endverbatim
/// \verbatim
make[1]: Entering directory `/home/jimi/antlrsrc/code/antlr/main/runtime/C/dist/libantlr3c-3.0.0-rc8'
test -z "/usr/local/lib" || /bin/mkdir -p "/usr/local/lib"
 /bin/sh ./libtool --mode=install /usr/bin/install -c  'libantlr3c.la' '/usr/local/lib/libantlr3c.la'
/usr/bin/install -c .libs/libantlr3c.so /usr/local/lib/libantlr3c.so
/usr/bin/install -c .libs/libantlr3c.lai /usr/local/lib/libantlr3c.la
/usr/bin/install -c .libs/libantlr3c.a /usr/local/lib/libantlr3c.a
...
 /usr/bin/install -c -m 644 'include/antlr3stringstream.h' '/usr/local/include/antlr3stringstream.h'
...
 /usr/bin/install -c -m 644 'antlr3config.h' '/usr/local/include/antlr3config.h'
make[1]: Leaving directory `/home/jimi/antlrsrc/code/antlr/main/runtime/C/dist/libantlr3c-3.0.0-rc8'

[jimi@localhost libantlr3c-3.0.0-rc8]$
\endverbatim
///
/// You are now ready to generate C recognizers and compile and link them with the ANTLR 3 C Runtime.
///
///
/// \section buildman Building Manually
///
/// The only step that configure performs that cannot be done
/// manually (without effort) is to produce the header file
/// \c antlr3config.h, which contains typedefs of the fundamental types
/// that your local C compiler supports. The easiest way to produce
/// this file for your system, if you cannot port \b automake and \b configure
/// to the system is:
///
/// -# Run configure on a system that does support configure
/// -# Copy the generated \c antlr3config.h file to the target system
/// -# Edit the file locally and change any types that differ on this
///   system to the target systems. There are only a few types and you should
///   find this relatively easy.
///
/// Having produced a compatible antlr3config.h file, then you should be able to
/// compile the source files in the \c ./src subdirectory, providing an include path
/// to the location of \c antlr3config.h and the \c ./include subdirectory. Something akin
/// to:
/// \verbatim

~/C/src: cc -c -O -I.. -I../include *.c

\endverbatim
///
/// Having produced the .o (or equivalent) files for the local system you can then
/// build an archive or shared library for the C runtime.
///
/// When you wish to build and link with the C runtime, specify the path to the
/// supplied header files, and the path to the library that you built.
///