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)

dirac		(Dirac video codec)
			http://www.bbc.co.uk/rd/projects/dirac/index.shtml
libdvdread	(for the dvdsrc)
			http://www.dtek.chalmers.se/groups/dvd/
			(optional: libcss for encrypted DVDs)
libdvdnav	(for the dvdnavsrc)
			http://dvd.sourceforge.net/
			(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
swfdec		(for the swfdec (flash) plugin)
			http://www.schleef.org/swfdec/
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
