********************************************************************
*                                                                  *
* THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
* USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
* GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
*                                                                  *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
* by the Xiph.Org Foundation http://www.xiph.org/                  *
*                                                                  *
********************************************************************

WHAT'S HERE:

This source distribution includes libogg and nothing else.  Other modules 
(eg, the modules vorbis, vorbis-tools and vorbis-plugins for the Vorbis 
codec) contain the codec libraries for use with Ogg bitstreams.

Directory:

./src  		The source for libogg, a BSD-license inplementation of 
		the public domain Ogg bitstream format

./include       Library API headers and codebooks

./doc           Ogg specification documents

./win32		Win32 projects and build automation

./macosx	MacOS X project and build files

./macos		Classic MacOS 9 projects and build automation

./debian        Rules/spec files for building Debian .deb packages
		(may not be present, depending on your distribution)

WHAT IS OGG?:

Ogg project codecs use the Ogg bitstream format to arrange the raw,
compressed bitstream into a more robust, useful form.  For example,
the Ogg bitstream makes seeking, time stamping and error recovery
possible, as well as mixing several sepearate, concurrent media
streams into a single physical bitstream.

CONTACT:

The Ogg homepage is located at 'http://www.xiph.org/ogg/'.
Up to date technical documents, contact information, source code and
pre-built utilities may be found there.

BUILDING FROM REPOSITORY SOURCE:

A standard svn build should consist of nothing more than:

./autogen.sh
make 

and as root if desired :

make install

This will install the Ogg libraries (static and shared) into
/usr/local/lib, includes into /usr/local/include and API manpages
(once we write some) into /usr/local/man.

BUILDING FROM TARBALL DISTRIBUTIONS:

./configure
make

and optionally (as root):
make install

BUILDING RPMS:

RPMs may be built by:

make dist
rpm -ta libogg-<version>.tar.gz

BUILDING ON WIN32:

Use the project file in the win32 directory.  It should compile out of the box.
You can also run one of the batch files from the commandline.

E.g.: build_ogg_dynamic

CROSS COMPILING FROM LINUX TO WIN32:

It is also possible to cross compile from Linux to windows using the MinGW
cross tools and even to run the test suite under Wine, the Linux/*nix
windows emulator.

On Debian and Ubuntu systems, these cross compiler tools can be installed
by doing:

    sudo apt-get mingw32 mingw32-binutils mingw32-runtime wine

Once these tools are installed its possible to compile and test by
executing the following commands:

    ./configure --host=i586-mingw32msvc --target=i586-mingw32msvc \
         --build=i586-linux
    make
    make check

The above has been tested with the following versions of the tools on
Ubuntu's Hardy Heron release:

    mingw32             4.2.1.dfsg-1ubuntu1
    mingw32-binutils    2.17.50-20070129.1-1
    mingw32-runtime     3.13-1
    wine                0.9.59-0ubuntu4

BUILDING ON MACOS 9:

Ogg on MacOS 9 is built using CodeWarrior 5.3.  To build it, first
open ogg/mac/libogg.mcp, switch to the "Targets" pane, select
everything, and make the project.  In ogg/mac/Output you will now have
both debug and final versions of Ogg shared libraries to link your
projects against.

To build a project using Ogg, add access paths to your CodeWarrior
project for the ogg/include and ogg/mac/Output folders.  Be sure that
"interpret DOS and Unix paths" is turned on in your project; it can be
found in the "access paths" pane in your project settings.  Now simply
add the shared libraries you need to your project (OggLib at least)
and #include "ogg/ogg.h" wherever you need to acces Ogg functionality.

(Build instructions for Ogg codecs such as vorbis are similar and may
be found in those source modules' README files)

$Id$
