GStreamer uses a *large* array of tools and libraries, most of which are
optional.  We have attempted to make sure that any code that depends on
optional libraries doesn't get built unless you have those libraries.  If
you find this not to be the case, please, let us know by filing a bug
report at http://bugzilla.gnome.org/.


Required tools:
===============

An extra set of tools is required if you wish to build GStreamer out of
CVS (using autogen.sh):

autoconf 2.52 or better 
automake 1.5
gettext 0.11.5
libtool v1.4 or better
pkgconfig 0.9.0 or better (http://www.freedesktop.org/software/pkgconfig/)

Required libraries:
===================

The core GStreamer libraries. See the gstreamer/ module in GStreamer cvs, or
the version that corresponds to this plugin release.

Optional libraries:
===================

This file lists supporting libraries for which gst-plugins contains plugins,
as well as their minimum version.  You can find the corresponding plugins in
ext/(library)

libdvdread	(for the dvdsrc)
			http://dvdnav.mplayerhq.hu/
			(optional: libcss for encrypted DVDs)
libdvdnav	(for the dvdnavsrc)
			http://dvdnav.mplayerhq.hu/
			(optional: libcss for encrypted DVDs)
		>= 0.1.9
libgsm		(for the gsm plugin)
			http://kbs.cs.tu-berlin.de/~jutta/toast.html
sdl		(for the sdl sink)
			http://www.libsdl.org
dtsdec		(for DTS audio decoding)
			http://www.videolan.org/libdca.html
musepack	(for musepack audio codec/format)
			(http://www.musepack.net/)
nas		(for the NAS sound server sink)
			(http://radscan.com/nas.html)
libmms		(for MMS protocol support)
			(http://www.sf.net/projects/libmms)
libamrnb	(for AMR-NB support)
			(http://www.penguin.cz/~utx/amr)
libamrwb	(for AMR-WB support)
			(http://www.penguin.cz/~utx/amr)
libkate		(for Kate support)
			(http://libkate.googlecode.com/)
librtmp         (for RTMP support)
			(http://rtmpdump.mplayerhq.hu/)

Optional (debian) packages:
===========================

gtk-doc-tools 1.6  -- needed to build documentation
python-xml  -- needed to build plugin documentation
