GST_DOC_SCANOBJ = $(top_srcdir)/common/gstdoc-scangobj

## Process this file with automake to produce Makefile.in

# The name of the module, e.g. 'glib'.
#DOC_MODULE=gst-plugins-libs-@GST_API_VERSION@
MODULE=gst-plugins-bad
DOC_MODULE=$(MODULE)-plugins

# for upload-doc.mak
DOC=$(MODULE)-plugins
FORMATS=html
html: html-build.stamp
include $(top_srcdir)/common/upload-doc.mak

# The top-level SGML file. Change it if you want.
DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.sgml

# The directory containing the source code.
# gtk-doc will search all .c & .h files beneath here for inline comments
# documenting functions and macros.
DOC_SOURCE_DIR = $(top_srcdir)/gst $(top_srcdir)/ext $(top_srcdir)/sys

# Extra options to supply to gtkdoc-scan.
SCAN_OPTIONS=

# Extra options to supply to gtkdoc-mkdb.
MKDB_OPTIONS=--sgml-mode --source-suffixes=c,h,cc,cpp,m

# Extra options to supply to gtkdoc-fixref.
FIXXREF_OPTIONS=--extra-dir=$(GLIB_PREFIX)/share/gtk-doc/html \
	--extra-dir=$(GST_PREFIX)/share/gtk-doc/html \
	--extra-dir=$(GSTPB_PREFIX)/share/gtk-doc/html

# Used for dependencies.
HFILE_GLOB= \
  $(top_srcdir)/gst/*/*.h $(top_srcdir)/ext/*/*.h $(top_srcdir)/sys/*/*.h \
  $(top_srcdir)/ext/*/*.hh
CFILE_GLOB= \
  $(top_srcdir)/gst/*/*.c $(top_srcdir)/ext/*/*.c $(top_srcdir)/sys/*/*.c \
  $(top_srcdir)/ext/*/*.cc $(top_srcdir)/ext/*/*.cpp  $(top_srcdir)/sys/*/*.cpp \
  $(top_srcdir)/ext/*/*.m $(top_srcdir)/sys/*/*.m

# Header files to ignore when scanning.
IGNORE_HFILES =
IGNORE_CFILES =

# we add all .h files of elements that have signals/args we want
# sadly this also pulls in the private methods - maybe we should
# move those around in the source ?
#
# also, we should add some stuff here conditionally based on whether
# or not the plugin will actually build
# but I'm not sure about that - it might be this Just Works given that
# the registry won't have the element
# -> it just works (TM) (ensonic)

# FIXME: not ported yet
#	$(top_srcdir)/ext/gnomevfs/gstgnomevfssink.c

# example code that needs to be converted to xml and placed in xml/
EXAMPLE_CFILES = \
        $(top_srcdir)/ext/directfb/dfb-example.c

EXTRA_HFILES = \
	$(top_srcdir)/ext/assrender/gstassrender.h \
	$(top_srcdir)/ext/curl/gstcurlbasesink.h \
	$(top_srcdir)/ext/curl/gstcurlfilesink.h \
	$(top_srcdir)/ext/curl/gstcurlftpsink.h \
	$(top_srcdir)/ext/curl/gstcurlhttpsink.h \
	$(top_srcdir)/ext/curl/gstcurlsmtpsink.h \
	$(top_srcdir)/ext/curl/gstcurltlssink.h \
	$(top_srcdir)/ext/dc1394/gstdc1394src.h \
	$(top_srcdir)/ext/directfb/dfbvideosink.h \
	$(top_srcdir)/ext/dts/gstdtsdec.h \
	$(top_srcdir)/ext/faac/gstfaac.h \
	$(top_srcdir)/ext/faad/gstfaad.h \
	$(top_srcdir)/ext/kate/gstkateenc.h \
	$(top_srcdir)/ext/kate/gstkatedec.h \
	$(top_srcdir)/ext/kate/gstkateparse.h \
	$(top_srcdir)/ext/kate/gstkatetag.h \
	$(top_srcdir)/ext/kate/gstkatetiger.h \
	$(top_srcdir)/ext/ladspa/gstladspa.h \
	$(top_srcdir)/ext/mimic/gstmimenc.h \
	$(top_srcdir)/ext/mimic/gstmimdec.h \
	$(top_srcdir)/ext/modplug/gstmodplug.h \
	$(top_srcdir)/ext/mpeg2enc/gstmpeg2enc.hh \
	$(top_srcdir)/ext/mplex/gstmplex.hh \
	$(top_srcdir)/ext/opencv/gstcvdilate.h \
	$(top_srcdir)/ext/opencv/gstcverode.h \
	$(top_srcdir)/ext/opencv/gstcvequalizehist.h \
	$(top_srcdir)/ext/opencv/gstcvlaplace.h \
	$(top_srcdir)/ext/opencv/gstcvsmooth.h \
	$(top_srcdir)/ext/opencv/gstcvsobel.h \
	$(top_srcdir)/ext/opencv/gstedgedetect.h \
	$(top_srcdir)/ext/opencv/gstfaceblur.h \
	$(top_srcdir)/ext/opencv/gstfacedetect.h \
	$(top_srcdir)/ext/opencv/gsttemplatematch.h \
	$(top_srcdir)/ext/opencv/gsttextoverlay.h \
	$(top_srcdir)/ext/openni2/gstopenni2src.h \
	$(top_srcdir)/ext/rsvg/gstrsvgdec.h \
	$(top_srcdir)/ext/rsvg/gstrsvgoverlay.h \
	$(top_srcdir)/ext/rtmp/gstrtmpsrc.h \
	$(top_srcdir)/ext/rtmp/gstrtmpsink.h \
	$(top_srcdir)/ext/spandsp/gstspanplc.h \
	$(top_srcdir)/ext/spandsp/gstdtmfdetect.h \
	$(top_srcdir)/ext/sdl/sdlaudiosink.h \
	$(top_srcdir)/ext/sdl/sdlvideosink.h \
	$(top_srcdir)/ext/timidity/gsttimidity.h \
	$(top_srcdir)/ext/timidity/gstwildmidi.h \
	$(top_srcdir)/ext/voaacenc/gstvoaacenc.h \
	$(top_srcdir)/ext/voamrwbenc/gstvoamrwbenc.h \
	$(top_srcdir)/ext/webrtcdsp/gstwebrtcdsp.h \
	$(top_srcdir)/ext/webrtcdsp/gstwebrtcechoprobe.h \
	$(top_srcdir)/ext/zbar/gstzbar.h \
	$(top_srcdir)/gst/aiff/aiffparse.h \
	$(top_srcdir)/gst/aiff/aiffmux.h \
	$(top_srcdir)/gst/autoconvert/gstautoconvert.h \
	$(top_srcdir)/gst/audiovisualizers/gstspacescope.h \
	$(top_srcdir)/gst/audiovisualizers/gstspectrascope.h \
	$(top_srcdir)/gst/audiovisualizers/gstsynaescope.h \
	$(top_srcdir)/gst/audiovisualizers/gstwavescope.h \
	$(top_srcdir)/gst/camerabin2/gstcamerabin2.h \
	$(top_srcdir)/gst/coloreffects/gstcoloreffects.h \
	$(top_srcdir)/gst/dataurisrc/gstdataurisrc.h \
	$(top_srcdir)/gst/dccp/gstdccpclientsink.h \
	$(top_srcdir)/gst/dccp/gstdccpclientsrc.h \
	$(top_srcdir)/gst/dccp/gstdccpserversink.h \
	$(top_srcdir)/gst/dccp/gstdccpserversrc.h \
	$(top_srcdir)/gst/debugutils/fpsdisplaysink.h \
	$(top_srcdir)/gst/dvdspu/gstdvdspu.h \
	$(top_srcdir)/gst/festival/gstfestival.h \
	$(top_srcdir)/gst/gaudieffects/gstburn.h \
	$(top_srcdir)/gst/gaudieffects/gstchromium.h \
	$(top_srcdir)/gst/gaudieffects/gstdilate.h \
	$(top_srcdir)/gst/gaudieffects/gstdodge.h \
	$(top_srcdir)/gst/gaudieffects/gstexclusion.h \
	$(top_srcdir)/gst/gaudieffects/gstgaussblur.h \
	$(top_srcdir)/gst/gaudieffects/gstplugin.h \
	$(top_srcdir)/gst/gaudieffects/gstsolarize.h \
	$(top_srcdir)/gst/geometrictransform/gstbulge.h \
	$(top_srcdir)/gst/geometrictransform/gstcircle.h \
	$(top_srcdir)/gst/geometrictransform/gstdiffuse.h \
	$(top_srcdir)/gst/geometrictransform/gstfisheye.h \
	$(top_srcdir)/gst/geometrictransform/gstkaleidoscope.h \
	$(top_srcdir)/gst/geometrictransform/gstmarble.h \
	$(top_srcdir)/gst/geometrictransform/gstmirror.h \
	$(top_srcdir)/gst/geometrictransform/gstpinch.h \
	$(top_srcdir)/gst/geometrictransform/gstsphere.h \
	$(top_srcdir)/gst/geometrictransform/gstsquare.h \
	$(top_srcdir)/gst/geometrictransform/gststretch.h \
	$(top_srcdir)/gst/geometrictransform/gsttunnel.h \
	$(top_srcdir)/gst/geometrictransform/gsttwirl.h \
	$(top_srcdir)/gst/geometrictransform/gstwaterripple.h \
	$(top_srcdir)/gst/ivfparse/gstivfparse.h \
	$(top_srcdir)/gst/jpegformat/gstjpegparse.h \
	$(top_srcdir)/gst/mpegtsdemux/tsdemux.h \
	$(top_srcdir)/gst/mpegtsmux/mpegtsmux.h \
	$(top_srcdir)/gst/mxf/mxfdemux.h \
	$(top_srcdir)/gst/mxf/mxfmux.h \
	$(top_srcdir)/gst/nuvdemux/gstnuvdemux.h \
	$(top_srcdir)/gst/pcapparse/gstpcapparse.h \
	$(top_srcdir)/gst/rawparse/gstaudioparse.h \
	$(top_srcdir)/gst/rawparse/gstvideoparse.h \
	$(top_srcdir)/gst/sdp/gstsdpdemux.h \
	$(top_srcdir)/gst/speed/gstspeed.h \
	$(top_srcdir)/gst/stereo/gststereo.h \
	$(top_srcdir)/gst/videosignal/gstvideoanalyse.h \
	$(top_srcdir)/sys/dvb/gstdvbsrc.h \
	$(top_srcdir)/sys/shm/gstshmsink.h \
	$(top_srcdir)/sys/shm/gstshmsrc.h

# Images to copy into HTML directory.
HTML_IMAGES = camerabin.png

# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
content_files =

# Other files to distribute.
extra_files =

# CFLAGS and LDFLAGS for compiling scan program. Only needed if your app/lib
# contains GtkObjects/GObjects and you want to document signals and properties.
GTKDOC_CFLAGS = -DGST_USE_UNSTABLE_API $(GST_PLUGINS_BAD_CFLAGS) $(GST_BASE_CFLAGS) -I$(top_builddir)
GTKDOC_LIBS = \
	$(GST_BASE_LIBS)

# If you need to override some of the declarations, place them in this file
# and uncomment this line.
#DOC_OVERRIDES = $(DOC_MODULE)-overrides.txt
DOC_OVERRIDES =

include $(top_srcdir)/common/gtk-doc-plugins.mak

SUBDIRS =

FIGURES_SOURCEFILES = camerabin.dot
FIGURES_IMAGES      = camerabin.png

EXTRA_DIST += $(FIGURES_SOURCEFILES)

.dot.png:
	dot -Tpng $< -o$@

update-figures: $(FIGURES_IMAGES)
