Note that these instructions are *not* necessary for distribution
tarballs; they have separate configure/build instructions.  

Building this package from CVS is mainly intended for developers.
General users should obtain official distribution packages; both
source and binary distributions are available at
http://www.vorbis.com/.

-----

These are *brief* instructions on how to build this package from CVS.
Yes, there are details left out.

There are generally four steps necessary when building from CVS (i.e.,
a developer's copy):

1. cvs checkout of the sources, or cvs update.  RTFM from your
   favorite flavor of CVS documentation; information on the xiph.org
   CVS repository can be found at http://www.xiph.org/cvs.html.

2. [re-]generate files such as "configure" and "Makefile.in" with the
   GNU autoconf/automake tools.  Run the "autogen.sh" script to
   perform this step.  

   *** IF YOU ARE NOT BUILDING WITH GNU MAKE *AND* GCC: you must set
   the AUTOMAKE_FLAGS environment variable to "--include-deps"
   before running autogen.sh.  For example:

   csh% setenv AUTOMAKE_FLAGS --include-deps
   csh% ./autogen.sh
     or
   sh% AUTOMAKE_FLAGS=--include-deps ./autogen.sh

3. Run configure.  There are several options available; see
   "./configure --help" for more information.

4. Run "make" to build the source.  

In general, steps 2 and 3 need to be re-run every time any of the
following files are modified (either manually or by a cvs update):

	  configure.in
	  acinclude.m4

Running "make clean" after running steps 2 and 3 is generally also
advisable before running step 4.  It isn't *always* necessary, but
unless you understand the workings of autoconf/automake, it's safest
to just do it.
