# Makefile.in generated by automake 1.15 from Makefile.am.
# @configure_input@

# Copyright (C) 1994-2014 Free Software Foundation, Inc.

# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.

@SET_MAKE@

# this snippet is to be included by both our docbook manuals
# and gtk-doc API references

# it adds an upload target to each of these dir's Makefiles

# each Makefile.am should define the following variables:
# - DOC: the base name of the documentation
#        (faq, manual, pwg, gstreamer, gstreamer-libs)
# - FORMATS: the formats in which DOC is output
#            (html ps pdf)

# if you want to use it, make sure your $HOME/.ssh/config file contains the
# correct User entry for the Host entry for the DOC_SERVER

# This is an include file specifically tuned for building documentation
# for GStreamer plug-ins
VPATH = @srcdir@
am__is_gnu_make = { \
  if test -z '$(MAKELEVEL)'; then \
    false; \
  elif test -n '$(MAKE_HOST)'; then \
    true; \
  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
    true; \
  else \
    false; \
  fi; \
}
am__make_running_with_option = \
  case $${target_option-} in \
      ?) ;; \
      *) echo "am__make_running_with_option: internal error: invalid" \
              "target option '$${target_option-}' specified" >&2; \
         exit 1;; \
  esac; \
  has_opt=no; \
  sane_makeflags=$$MAKEFLAGS; \
  if $(am__is_gnu_make); then \
    sane_makeflags=$$MFLAGS; \
  else \
    case $$MAKEFLAGS in \
      *\\[\ \	]*) \
        bs=\\; \
        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
    esac; \
  fi; \
  skip_next=no; \
  strip_trailopt () \
  { \
    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
  }; \
  for flg in $$sane_makeflags; do \
    test $$skip_next = yes && { skip_next=no; continue; }; \
    case $$flg in \
      *=*|--*) continue;; \
        -*I) strip_trailopt 'I'; skip_next=yes;; \
      -*I?*) strip_trailopt 'I';; \
        -*O) strip_trailopt 'O'; skip_next=yes;; \
      -*O?*) strip_trailopt 'O';; \
        -*l) strip_trailopt 'l'; skip_next=yes;; \
      -*l?*) strip_trailopt 'l';; \
      -[dEDm]) skip_next=yes;; \
      -[JT]) skip_next=yes;; \
    esac; \
    case $$flg in \
      *$$target_option*) has_opt=yes; break;; \
    esac; \
  done; \
  test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
subdir = docs/plugins
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
	$(top_srcdir)/common/m4/as-auto-alt.m4 \
	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
	$(top_srcdir)/common/m4/as-docbook.m4 \
	$(top_srcdir)/common/m4/as-libtool.m4 \
	$(top_srcdir)/common/m4/as-version.m4 \
	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
	$(top_srcdir)/common/m4/ax_pthread.m4 \
	$(top_srcdir)/common/m4/gst-arch.m4 \
	$(top_srcdir)/common/m4/gst-args.m4 \
	$(top_srcdir)/common/m4/gst-check.m4 \
	$(top_srcdir)/common/m4/gst-doc.m4 \
	$(top_srcdir)/common/m4/gst-error.m4 \
	$(top_srcdir)/common/m4/gst-feature.m4 \
	$(top_srcdir)/common/m4/gst-function.m4 \
	$(top_srcdir)/common/m4/gst-gettext.m4 \
	$(top_srcdir)/common/m4/gst-glib2.m4 \
	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
	$(top_srcdir)/common/m4/gst-parser.m4 \
	$(top_srcdir)/common/m4/gst-platform.m4 \
	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
	$(top_srcdir)/common/m4/gst-plugindir.m4 \
	$(top_srcdir)/common/m4/gst.m4 \
	$(top_srcdir)/common/m4/gtk-doc.m4 \
	$(top_srcdir)/common/m4/introspection.m4 \
	$(top_srcdir)/common/m4/pkg.m4 \
	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/longlong.m4 \
	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/stdint_h.m4 \
	$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
	$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
am__v_P_1 = :
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo "  GEN     " $@;
am__v_GEN_1 = 
AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
am__v_at_1 = 
SOURCES =
DIST_SOURCES =
am__can_run_installinfo = \
  case $$AM_UPDATE_INFO_DIR in \
    n|no|NO) false;; \
    *) (install-info --version) >/dev/null 2>&1;; \
  esac
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
am__DIST_COMMON = $(srcdir)/Makefile.in \
	$(top_srcdir)/common/gtk-doc-plugins.mak \
	$(top_srcdir)/common/upload-doc.mak
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
AR = @AR@
AS = @AS@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
BISON_PATH = @BISON_PATH@
CAP_LIBS = @CAP_LIBS@
CAT_ENTRY_END = @CAT_ENTRY_END@
CAT_ENTRY_START = @CAT_ENTRY_START@
CC = @CC@
CCAS = @CCAS@
CCASDEPMODE = @CCASDEPMODE@
CCASFLAGS = @CCASFLAGS@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CHECK_MAJOR_VERSION = @CHECK_MAJOR_VERSION@
CHECK_MICRO_VERSION = @CHECK_MICRO_VERSION@
CHECK_MINOR_VERSION = @CHECK_MINOR_VERSION@
CHECK_VERSION = @CHECK_VERSION@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIR = @DATADIR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
DLLTOOL = @DLLTOOL@
DOCBOOK_ROOT = @DOCBOOK_ROOT@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
ENABLE_SUBUNIT = @ENABLE_SUBUNIT@
ERROR_CFLAGS = @ERROR_CFLAGS@
EXEEXT = @EXEEXT@
FFLAGS = @FFLAGS@
FGREP = @FGREP@
FLEX_PATH = @FLEX_PATH@
GCOV = @GCOV@
GCOV_CFLAGS = @GCOV_CFLAGS@
GCOV_LIBS = @GCOV_LIBS@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LDFLAGS = @GIO_LDFLAGS@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMP_LIBS = @GMP_LIBS@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
GSL_LIBS = @GSL_LIBS@
GST_AGE = @GST_AGE@
GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
GST_ALL_LIBS = @GST_ALL_LIBS@
GST_API_VERSION = @GST_API_VERSION@
GST_CURRENT = @GST_CURRENT@
GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
GST_LIBVERSION = @GST_LIBVERSION@
GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
GST_LICENSE = @GST_LICENSE@
GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
GST_OBJ_CFLAGS = @GST_OBJ_CFLAGS@
GST_OBJ_CXXFLAGS = @GST_OBJ_CXXFLAGS@
GST_OBJ_LIBS = @GST_OBJ_LIBS@
GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
GST_PLUGIN_LIBTOOLFLAGS = @GST_PLUGIN_LIBTOOLFLAGS@
GST_PLUGIN_SCANNER_INSTALLED = @GST_PLUGIN_SCANNER_INSTALLED@
GST_PTP_HELPER_INSTALLED = @GST_PTP_HELPER_INSTALLED@
GST_REGISTRY_DOC_TYPES = @GST_REGISTRY_DOC_TYPES@
GST_REVISION = @GST_REVISION@
GST_VERSION_MAJOR = @GST_VERSION_MAJOR@
GST_VERSION_MICRO = @GST_VERSION_MICRO@
GST_VERSION_MINOR = @GST_VERSION_MINOR@
GST_VERSION_NANO = @GST_VERSION_NANO@
GTKDOC_CHECK = @GTKDOC_CHECK@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
GTKDOC_REBASE = @GTKDOC_REBASE@
HAVE_CAP = @HAVE_CAP@
HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
HAVE_DVIPS = @HAVE_DVIPS@
HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
HAVE_FORK = @HAVE_FORK@
HAVE_GMP = @HAVE_GMP@
HAVE_GSL = @HAVE_GSL@
HAVE_JADETEX = @HAVE_JADETEX@
HAVE_PNGTOPNM = @HAVE_PNGTOPNM@
HAVE_PNMTOPS = @HAVE_PNMTOPS@
HAVE_PS2PDF = @HAVE_PS2PDF@
HAVE_XMLLINT = @HAVE_XMLLINT@
HAVE_XSLTPROC = @HAVE_XSLTPROC@
HOST_CPU = @HOST_CPU@
HTML_DIR = @HTML_DIR@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
INTLLIBS = @INTLLIBS@
INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
INTROSPECTION_INIT = @INTROSPECTION_INIT@
INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBDIR = @LIBDIR@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBM = @LIBM@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
LOCALEDIR = @LOCALEDIR@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL_PATH = @PERL_PATH@
PKG_CONFIG = @PKG_CONFIG@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PRINTF_CFLAGS = @PRINTF_CFLAGS@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
PTHREAD_CC = @PTHREAD_CC@
PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
PTHREAD_LIBS = @PTHREAD_LIBS@
PYTHON = @PYTHON@
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
PYTHON_VERSION = @PYTHON_VERSION@
RANLIB = @RANLIB@
SED = @SED@
SETCAP = @SETCAP@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
USE_NLS = @USE_NLS@
VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
VALGRIND_LIBS = @VALGRIND_LIBS@
VALGRIND_PATH = @VALGRIND_PATH@
VERSION = @VERSION@
WARNING_CFLAGS = @WARNING_CFLAGS@
WIN32_LIBS = @WIN32_LIBS@
XGETTEXT = @XGETTEXT@
XGETTEXT_015 = @XGETTEXT_015@
XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
XML_CATALOG = @XML_CATALOG@
XSLTPROC = @XSLTPROC@
XSLTPROC_FLAGS = @XSLTPROC_FLAGS@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
pkgpyexecdir = @pkgpyexecdir@
pkgpythondir = @pkgpythondir@
plugindir = @plugindir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
pyexecdir = @pyexecdir@
pythondir = @pythondir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target = @target@
target_alias = @target_alias@
target_cpu = @target_cpu@
target_os = @target_os@
target_vendor = @target_vendor@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
GST_DOC_SCANOBJ = $(top_srcdir)/common/gstdoc-scangobj

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

# for upload-doc.mak
DOC = $(MODULE)-plugins
FORMATS = html

# these variables define the location of the online docs
DOC_SERVER = gstreamer.freedesktop.org
DOC_BASE = /srv/gstreamer.freedesktop.org/www/data/doc
DOC_URL = $(DOC_SERVER):$(DOC_BASE)

# Extra environment needed for Core only...
INSPECT_EXTRA_ENVIRONMENT = \
    GST_PLUGIN_SCANNER_1_0=$(top_builddir)/libs/gst/helpers/gst-plugin-scanner


# 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)/plugins/elements

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

# Extra options to supply to gtkdoc-mkdb.
MKDB_OPTIONS = --sgml-mode

# Extra options to supply to gtkdoc-fixref.
FIXXREF_OPTIONS = --extra-dir=$(top_builddir)/docs/gst/html \
	--extra-dir=$(top_builddir)/docs/libs/html \
	--extra-dir=$(GLIB_PREFIX)/share/gtk-doc/html \
	--extra-dir=$(datadir)/gtk-doc/html


# Used for dependencies.
HFILE_GLOB = $(top_srcdir)/plugins/elements/*.h
CFILE_GLOB = $(top_srcdir)/plugins/elements/*.c

# 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
EXTRA_HFILES = \
	$(top_srcdir)/plugins/elements/gstcapsfilter.h \
	$(top_srcdir)/plugins/elements/gstdownloadbuffer.h \
	$(top_srcdir)/plugins/elements/gstfakesrc.h \
	$(top_srcdir)/plugins/elements/gstfakesink.h \
	$(top_srcdir)/plugins/elements/gstfdsink.h \
	$(top_srcdir)/plugins/elements/gstfdsrc.h \
	$(top_srcdir)/plugins/elements/gstfilesrc.h \
	$(top_srcdir)/plugins/elements/gstfilesink.h \
	$(top_srcdir)/plugins/elements/gstidentity.h \
	$(top_srcdir)/plugins/elements/gstinputselector.h \
	$(top_srcdir)/plugins/elements/gstmultiqueue.h \
	$(top_srcdir)/plugins/elements/gstoutputselector.h \
	$(top_srcdir)/plugins/elements/gstqueue.h \
	$(top_srcdir)/plugins/elements/gstqueue2.h \
	$(top_srcdir)/plugins/elements/gsttypefindelement.h \
	$(top_srcdir)/plugins/elements/gsttee.h \
	$(top_srcdir)/plugins/elements/gstvalve.h


# Images to copy into HTML directory.
HTML_IMAGES = 

# 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 = $(GST_OBJ_CFLAGS) -I$(top_builddir) -I$(top_builddir)/libs
GTKDOC_LIBS = $(GST_OBJ_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 = 
@GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_CC = $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_LD = $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS)
@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS)
@GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_RUN = 
@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_RUN = $(LIBTOOL) --mode=execute

# We set GPATH here; this gives us semantics for GNU make
# which are more like other make's VPATH, when it comes to
# whether a source that is a target of one rule is then
# searched for in VPATH/GPATH.
#
GPATH = $(srcdir)

# thomas: make docs parallel installable
TARGET_DIR = $(HTML_DIR)/$(DOC_MODULE)-@GST_API_VERSION@
MAINTAINER_DOC_STAMPS = \
	scanobj-build.stamp

EXTRA_DIST = \
	$(MAINTAINER_DOC_STAMPS)		\
	$(srcdir)/inspect/*.xml		\
	$(SCANOBJ_FILES)		\
	$(content_files)		\
	$(extra_files)			\
	$(HTML_IMAGES)			\
	$(DOC_MAIN_SGML_FILE)	\
	$(DOC_OVERRIDES)		\
	$(DOC_MODULE)-sections.txt


# we don't add scanobj-build.stamp here since they are built manually by docs
# maintainers and result is commited to git
DOC_STAMPS = \
	scan-build.stamp		\
	sgml-build.stamp		\
	html-build.stamp		\
	scan.stamp			\
	sgml.stamp			\
	html.stamp


# files generated/updated by gtkdoc-scangobj
SCANOBJ_FILES = \
	$(DOC_MODULE).args              \
	$(DOC_MODULE).hierarchy         \
	$(DOC_MODULE).interfaces        \
	$(DOC_MODULE).prerequisites     \
	$(DOC_MODULE).signals           \
	$(DOC_MODULE).types

SCANOBJ_FILES_O = \
	.libs/$(DOC_MODULE)-scan.o


# files generated/updated by gtkdoc-scan
SCAN_FILES = \
	$(DOC_MODULE)-sections.txt	\
	$(DOC_MODULE)-overrides.txt	\
	$(DOC_MODULE)-decl.txt		\
	$(DOC_MODULE)-decl-list.txt

REPORT_FILES = \
	$(DOC_MODULE)-undocumented.txt \
	$(DOC_MODULE)-undeclared.txt \
	$(DOC_MODULE)-unused.txt

CLEANFILES = \
	$(SCANOBJ_FILES_O) \
	$(REPORT_FILES) \
	$(DOC_STAMPS) \
	inspect-registry.xml

INSPECT_DIR = inspect

### inspect GStreamer plug-ins; done by documentation maintainer ###

# only look at the plugins in this module when building inspect .xml stuff
@ENABLE_GTK_DOC_TRUE@INSPECT_REGISTRY = $(top_builddir)/docs/plugins/inspect-registry.xml
@ENABLE_GTK_DOC_TRUE@INSPECT_ENVIRONMENT = \
@ENABLE_GTK_DOC_TRUE@	LC_ALL=C \
@ENABLE_GTK_DOC_TRUE@	GST_PLUGIN_SYSTEM_PATH_1_0= \
@ENABLE_GTK_DOC_TRUE@	GST_PLUGIN_PATH_1_0=$(top_builddir)/gst:$(top_builddir)/sys:$(top_builddir)/ext:$(top_builddir)/plugins:$(top_builddir)/src:$(top_builddir)/gnl \
@ENABLE_GTK_DOC_TRUE@	GST_REGISTRY_1_0=$(INSPECT_REGISTRY) \
@ENABLE_GTK_DOC_TRUE@	PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
@ENABLE_GTK_DOC_TRUE@	$(INSPECT_EXTRA_ENVIRONMENT)

MAINTAINERCLEANFILES = $(MAINTAINER_DOC_STAMPS)

# wildcard is apparently not portable to other makes, hence the use of find
inspect_files = $(shell find $(srcdir)/$(INSPECT_DIR) -name '*.xml')
all: all-am

.SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/common/upload-doc.mak $(top_srcdir)/common/gtk-doc-plugins.mak $(am__configure_deps)
	@for dep in $?; do \
	  case '$(am__configure_deps)' in \
	    *$$dep*) \
	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
	        && { if test -f $@; then exit 0; else break; fi; }; \
	      exit 1;; \
	  esac; \
	done; \
	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/plugins/Makefile'; \
	$(am__cd) $(top_srcdir) && \
	  $(AUTOMAKE) --gnu docs/plugins/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
	@case '$?' in \
	  *config.status*) \
	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
	  *) \
	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
	esac;
$(top_srcdir)/common/upload-doc.mak $(top_srcdir)/common/gtk-doc-plugins.mak $(am__empty):

$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh

$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):

mostlyclean-libtool:
	-rm -f *.lo

clean-libtool:
	-rm -rf .libs _libs
tags TAGS:

ctags CTAGS:

cscope cscopelist:


distdir: $(DISTFILES)
	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	list='$(DISTFILES)'; \
	  dist_files=`for file in $$list; do echo $$file; done | \
	  sed -e "s|^$$srcdirstrip/||;t" \
	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
	case $$dist_files in \
	  */*) $(MKDIR_P) `echo "$$dist_files" | \
			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
			   sort -u` ;; \
	esac; \
	for file in $$dist_files; do \
	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
	  if test -d $$d/$$file; then \
	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
	    if test -d "$(distdir)/$$file"; then \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
	  else \
	    test -f "$(distdir)/$$file" \
	    || cp -p $$d/$$file "$(distdir)/$$file" \
	    || exit 1; \
	  fi; \
	done
	$(MAKE) $(AM_MAKEFLAGS) \
	  top_distdir="$(top_distdir)" distdir="$(distdir)" \
	  dist-hook
check-am: all-am
check: check-am
all-am: Makefile all-local
installdirs:
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am

install-am: all-am
	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am

installcheck: installcheck-am
install-strip:
	if test -z '$(STRIP)'; then \
	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
	      install; \
	else \
	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
	fi
mostlyclean-generic:

clean-generic:
	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)

distclean-generic:
	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)

maintainer-clean-generic:
	@echo "This command is intended for maintainers to use"
	@echo "it deletes files that may require special tools to rebuild."
	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
clean: clean-am

clean-am: clean-generic clean-libtool clean-local mostlyclean-am

distclean: distclean-am
	-rm -f Makefile
distclean-am: clean-am distclean-generic distclean-local

dvi: dvi-am

dvi-am:

html-am:

info: info-am

info-am:

install-data-am: install-data-local

install-dvi: install-dvi-am

install-dvi-am:

install-exec-am:

install-html: install-html-am

install-html-am:

install-info: install-info-am

install-info-am:

install-man:

install-pdf: install-pdf-am

install-pdf-am:

install-ps: install-ps-am

install-ps-am:

installcheck-am:

maintainer-clean: maintainer-clean-am
	-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic

mostlyclean: mostlyclean-am

mostlyclean-am: mostlyclean-generic mostlyclean-libtool

pdf: pdf-am

pdf-am:

ps: ps-am

ps-am:

uninstall-am: uninstall-local

.MAKE: install-am install-strip

.PHONY: all all-am all-local check check-am clean clean-generic \
	clean-libtool clean-local cscopelist-am ctags-am dist-hook \
	distclean distclean-generic distclean-libtool distclean-local \
	distdir dvi dvi-am html html-am info info-am install \
	install-am install-data install-data-am install-data-local \
	install-dvi install-dvi-am install-exec install-exec-am \
	install-html install-html-am install-info install-info-am \
	install-man install-pdf install-pdf-am install-ps \
	install-ps-am install-strip installcheck installcheck-am \
	installdirs maintainer-clean maintainer-clean-generic \
	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
	ps ps-am tags-am uninstall uninstall-am uninstall-local

.PRECIOUS: Makefile

html: html-build.stamp

upload: $(FORMATS)
	@if echo $(FORMATS) | grep html > /dev/null; then \
	  echo "Preparing docs for upload (rebasing cross-references) ..." ; \
	  if test x$(builddir) != x$(srcdir); then \
	    echo "make upload can only be used if srcdir == builddir"; \
	    exit 1; \
	  fi; \
	  # gtkdoc-rebase sometimes gets confused, so reset everything to \
	  # local links before rebasing to online links                   \
	  gtkdoc-rebase --html-dir=$(builddir)/html 2>/dev/null 2>/dev/null ; \
	  rebase=`gtkdoc-rebase --verbose --online --html-dir=$(builddir)/html` ; \
	  echo "$$rebase" | grep -e "On-*line"; \
	  for req in glib gobject gstreamer gstreamer-libs gst-plugins-base-libs; do \
	    if ! ( echo "$$rebase" | grep -i -e "On-*line.*/$$req/" ); then \
	      echo "===============================================================================" ; \
	      echo " Could not determine online location for $$req docs. Cross-referencing will be " ; \
	      echo " broken, so not uploading. Make sure the library's gtk-doc documentation is    " ; \
	      echo " installed somewhere in /usr/share/gtk-doc.                                    " ; \
	      echo "===============================================================================" ; \
	      exit 1; \
	    fi; \
	  done; \
	  export SRC="$$SRC html"; \
	fi; \
	if echo $(FORMATS) | grep ps > /dev/null; then export SRC="$$SRC $(DOC).ps"; fi; \
	if echo $(FORMATS) | grep pdf > /dev/null; then export SRC="$$SRC $(DOC).pdf"; fi; \
	\
	# upload releases to both X.Y/ and head/ subdirectories \
	export DIR=$(DOC_BASE)/gstreamer/$(PACKAGE_VERSION_MAJOR).$(PACKAGE_VERSION_MINOR)/$(DOC); \
	echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
	ssh $(DOC_SERVER) mkdir -p $$DIR; \
	rsync -rv -e ssh --delete $$SRC $(DOC_SERVER):$$DIR; \
	ssh $(DOC_SERVER) chmod -R g+w $$DIR; \
	\
	export DIR=$(DOC_BASE)/gstreamer/head/$(DOC); \
	echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
	ssh $(DOC_SERVER) mkdir -p $$DIR; \
	rsync -rv -e ssh --delete $$SRC $(DOC_SERVER):$$DIR; \
	ssh $(DOC_SERVER) chmod -R g+w $$DIR; \
	\
	if echo $(FORMATS) | grep html > /dev/null; then \
	  echo "Un-preparing docs for upload (rebasing cross-references) ..." ; \
	  gtkdoc-rebase --html-dir=$(builddir)/html ; \
	fi; \
	echo Done

help:
	@echo
	@echo "If you are a doc maintainer, run 'make update' to update"
	@echo "the documentation files maintained in git"
	@echo
	@echo Other useful make targets:
	@echo
	@echo  check-inspected-versions: make sure the inspected plugin info
	@echo                            is up to date before a release
	@echo

# update the stuff maintained by doc maintainers
update: scanobj-update
	$(MAKE) check-outdated-docs

@ENABLE_GTK_DOC_TRUE@all-local: html-build.stamp

#### scan gobjects; done by documentation maintainer ####
@ENABLE_GTK_DOC_TRUE@scanobj-update:
@ENABLE_GTK_DOC_TRUE@	-rm scanobj-build.stamp
@ENABLE_GTK_DOC_TRUE@	$(MAKE) scanobj-build.stamp

# gstdoc-scanobj produces 5 output files (.new)
# scangobj-merge.py merges them into the file which we commit later
# TODO: also merge the hierarchy
@ENABLE_GTK_DOC_TRUE@scanobj-build.stamp: $(SCANOBJ_DEPS) $(basefiles)
@ENABLE_GTK_DOC_TRUE@	@echo "  DOC   Introspecting gobjects"
@ENABLE_GTK_DOC_TRUE@	@if test x"$(srcdir)" != x. ; then				\
@ENABLE_GTK_DOC_TRUE@	    for f in $(SCANOBJ_FILES) $(SCAN_FILES);			\
@ENABLE_GTK_DOC_TRUE@	    do								\
@ENABLE_GTK_DOC_TRUE@	        if test -e $(srcdir)/$$f; then cp -u $(srcdir)/$$f . ; fi;	\
@ENABLE_GTK_DOC_TRUE@	    done;							\
@ENABLE_GTK_DOC_TRUE@	fi;								\
@ENABLE_GTK_DOC_TRUE@	mkdir -p $(INSPECT_DIR); \
@ENABLE_GTK_DOC_TRUE@	scanobj_options=""; \
@ENABLE_GTK_DOC_TRUE@	if test "x$(V)" = "x1"; then \
@ENABLE_GTK_DOC_TRUE@	    scanobj_options="--verbose"; \
@ENABLE_GTK_DOC_TRUE@	fi; \
@ENABLE_GTK_DOC_TRUE@	$(INSPECT_ENVIRONMENT) 					\
@ENABLE_GTK_DOC_TRUE@	CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" RUN="$(GTKDOC_RUN)"	\
@ENABLE_GTK_DOC_TRUE@	CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS) $(WARNING_CFLAGS)"	\
@ENABLE_GTK_DOC_TRUE@	LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)"				\
@ENABLE_GTK_DOC_TRUE@	$(GST_DOC_SCANOBJ) $$scanobj_options --type-init-func="gst_init(NULL,NULL)"	\
@ENABLE_GTK_DOC_TRUE@	    --module=$(DOC_MODULE) --source=$(PACKAGE) --inspect-dir=$(INSPECT_DIR) &&		\
@ENABLE_GTK_DOC_TRUE@	    echo "  DOC   Merging introspection data" && \
@ENABLE_GTK_DOC_TRUE@	    $(PYTHON)						\
@ENABLE_GTK_DOC_TRUE@	    $(top_srcdir)/common/scangobj-merge.py $(DOC_MODULE) || exit 1;	\
@ENABLE_GTK_DOC_TRUE@	if test x"$(srcdir)" != x. ; then				\
@ENABLE_GTK_DOC_TRUE@	    for f in $(SCANOBJ_FILES);					\
@ENABLE_GTK_DOC_TRUE@	    do								\
@ENABLE_GTK_DOC_TRUE@	        cmp -s ./$$f $(srcdir)/$$f || cp ./$$f $(srcdir)/ ;		\
@ENABLE_GTK_DOC_TRUE@	    done;							\
@ENABLE_GTK_DOC_TRUE@	fi;								\
@ENABLE_GTK_DOC_TRUE@	touch scanobj-build.stamp

@ENABLE_GTK_DOC_TRUE@$(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(SCANOBJ_FILES_O): scan-build.stamp
@ENABLE_GTK_DOC_TRUE@	@true

### scan headers; done on every build ###
@ENABLE_GTK_DOC_TRUE@scan-build.stamp: $(HFILE_GLOB) $(EXTRA_HFILES) $(basefiles) scanobj-build.stamp
@ENABLE_GTK_DOC_TRUE@	@echo '  DOC   Scanning header files'
@ENABLE_GTK_DOC_TRUE@	@if test x"$(srcdir)" != x. ; then				\
@ENABLE_GTK_DOC_TRUE@	    for f in $(SCANOBJ_FILES) $(SCAN_FILES);			\
@ENABLE_GTK_DOC_TRUE@	    do								\
@ENABLE_GTK_DOC_TRUE@	        if test -e $(srcdir)/$$f; then cp -u $(srcdir)/$$f . ; fi;	\
@ENABLE_GTK_DOC_TRUE@	    done;							\
@ENABLE_GTK_DOC_TRUE@	fi
@ENABLE_GTK_DOC_TRUE@	@_source_dir='' ;						\
@ENABLE_GTK_DOC_TRUE@	for i in $(DOC_SOURCE_DIR) ; do					\
@ENABLE_GTK_DOC_TRUE@	    _source_dir="$${_source_dir} --source-dir=$$i" ;	        \
@ENABLE_GTK_DOC_TRUE@	done ;							        \
@ENABLE_GTK_DOC_TRUE@	gtkdoc-scan							\
@ENABLE_GTK_DOC_TRUE@	    $(SCAN_OPTIONS) $(EXTRA_HFILES)				\
@ENABLE_GTK_DOC_TRUE@	    --module=$(DOC_MODULE)					\
@ENABLE_GTK_DOC_TRUE@	    $${_source_dir}             				\
@ENABLE_GTK_DOC_TRUE@	    --ignore-headers="$(IGNORE_HFILES)";			\
@ENABLE_GTK_DOC_TRUE@	touch scan-build.stamp

#### xml ####

@ENABLE_GTK_DOC_TRUE@sgml-build.stamp: scan-build.stamp $(CFILE_GLOB) $(top_srcdir)/common/plugins.xsl $(expand_content_files)
@ENABLE_GTK_DOC_TRUE@	@echo '  DOC   Building XML'
@ENABLE_GTK_DOC_TRUE@	@-mkdir -p xml
@ENABLE_GTK_DOC_TRUE@	@for a in $(srcdir)/$(INSPECT_DIR)/*.xml; do \
@ENABLE_GTK_DOC_TRUE@	    xsltproc --stringparam module $(MODULE) \
@ENABLE_GTK_DOC_TRUE@		$(top_srcdir)/common/plugins.xsl $$a > xml/`basename $$a`; done
@ENABLE_GTK_DOC_TRUE@	@for f in $(EXAMPLE_CFILES); do \
@ENABLE_GTK_DOC_TRUE@		$(PYTHON) $(top_srcdir)/common/c-to-xml.py $$f > xml/element-`basename $$f .c`.xml; done
@ENABLE_GTK_DOC_TRUE@	@gtkdoc-mkdb \
@ENABLE_GTK_DOC_TRUE@		--module=$(DOC_MODULE) \
@ENABLE_GTK_DOC_TRUE@		--source-dir=$(DOC_SOURCE_DIR) \
@ENABLE_GTK_DOC_TRUE@		 --expand-content-files="$(expand_content_files)" \
@ENABLE_GTK_DOC_TRUE@		--main-sgml-file=$(srcdir)/$(DOC_MAIN_SGML_FILE) \
@ENABLE_GTK_DOC_TRUE@		--output-format=xml \
@ENABLE_GTK_DOC_TRUE@		--ignore-files="$(IGNORE_HFILES) $(IGNORE_CFILES)" \
@ENABLE_GTK_DOC_TRUE@		$(MKDB_OPTIONS)
@ENABLE_GTK_DOC_TRUE@	@$(PYTHON) $(top_srcdir)/common/mangle-db.py xml
@ENABLE_GTK_DOC_TRUE@	@cp ../version.entities xml
@ENABLE_GTK_DOC_TRUE@	@touch sgml-build.stamp

@ENABLE_GTK_DOC_TRUE@sgml.stamp: sgml-build.stamp
@ENABLE_GTK_DOC_TRUE@	@true

#### html ####

@ENABLE_GTK_DOC_TRUE@html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
@ENABLE_GTK_DOC_TRUE@	@echo '  DOC   Building HTML'
@ENABLE_GTK_DOC_TRUE@	@rm -rf html
@ENABLE_GTK_DOC_TRUE@	@mkdir html
@ENABLE_GTK_DOC_TRUE@	@cp $(srcdir)/$(DOC_MAIN_SGML_FILE) html
@ENABLE_GTK_DOC_TRUE@	@for f in $(content_files); do cp $(srcdir)/$$f html; done
@ENABLE_GTK_DOC_TRUE@	@cp -pr xml html
@ENABLE_GTK_DOC_TRUE@	@cp ../version.entities html
@ENABLE_GTK_DOC_TRUE@	@mkhtml_options=""; \
@ENABLE_GTK_DOC_TRUE@	gtkdoc-mkhtml 2>&1 --help | grep  >/dev/null "\-\-verbose"; \
@ENABLE_GTK_DOC_TRUE@	if test "$(?)" = "0"; then \
@ENABLE_GTK_DOC_TRUE@	  if test "x$(V)" = "x1"; then \
@ENABLE_GTK_DOC_TRUE@	    mkhtml_options="$$mkhtml_options --verbose"; \
@ENABLE_GTK_DOC_TRUE@	  fi; \
@ENABLE_GTK_DOC_TRUE@	fi; \
@ENABLE_GTK_DOC_TRUE@	cd html && gtkdoc-mkhtml $$mkhtml_options $(DOC_MODULE)-@GST_API_VERSION@ $(DOC_MAIN_SGML_FILE)
@ENABLE_GTK_DOC_TRUE@	@rm -f html/$(DOC_MAIN_SGML_FILE)
@ENABLE_GTK_DOC_TRUE@	@rm -rf html/xml
@ENABLE_GTK_DOC_TRUE@	@rm -f html/version.entities
@ENABLE_GTK_DOC_TRUE@	@test "x$(HTML_IMAGES)" = "x" || for i in "" $(HTML_IMAGES) ; do \
@ENABLE_GTK_DOC_TRUE@	    if test "$$i" != ""; then cp $(srcdir)/$$i html ; fi; done
@ENABLE_GTK_DOC_TRUE@	@echo '  DOC   Fixing cross-references'
@ENABLE_GTK_DOC_TRUE@	@gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS)
@ENABLE_GTK_DOC_TRUE@	@touch html-build.stamp

@ENABLE_GTK_DOC_TRUE@clean-local-gtkdoc:
@ENABLE_GTK_DOC_TRUE@	@rm -rf xml tmpl html
# clean files copied for nonsrcdir templates build
@ENABLE_GTK_DOC_TRUE@	@if test x"$(srcdir)" != x. ; then \
@ENABLE_GTK_DOC_TRUE@	    rm -rf $(SCANOBJ_FILES) $(SCAN_FILES) $(REPORT_FILES) \
@ENABLE_GTK_DOC_TRUE@	        $(MAINTAINER_DOC_STAMPS); \
@ENABLE_GTK_DOC_TRUE@	fi
@ENABLE_GTK_DOC_FALSE@all-local:
@ENABLE_GTK_DOC_FALSE@clean-local-gtkdoc:

clean-local: clean-local-gtkdoc
	@rm -f *~ *.bak
	@rm -rf .libs

distclean-local:
	@rm -f $(REPORT_FILES) \
	        $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt
	@rm -rf tmpl/*.sgml.bak
	@rm -f $(DOC_MODULE).hierarchy
	@rm -f *.stamp || true
	@if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \
	    rm -f $(DOC_MODULE)-docs.sgml ; \
	    rm -f $(DOC_MODULE).types ; \
	    rm -f $(DOC_MODULE).interfaces ; \
	    rm -f $(DOC_MODULE)-overrides.txt ; \
	    rm -f $(DOC_MODULE).prerequisites ; \
	    rm -f $(DOC_MODULE)-sections.txt ; \
	    rm -rf tmpl/*.sgml ; \
	    rm -rf $(INSPECT_DIR); \
	fi
	@rm -rf *.o

# thomas: make docs parallel installable; devhelp requires majorminor too
install-data-local:
	(installfiles=`echo $(builddir)/html/*.sgml $(builddir)/html/*.html $(builddir)/html/*.png $(builddir)/html/*.css`; \
	if test "$$installfiles" = '$(builddir)/html/*.sgml $(builddir)/html/*.html $(builddir)/html/*.png $(builddir)/html/*.css'; \
	then echo '-- Nothing to install' ; \
	else \
	  $(mkinstalldirs) $(DESTDIR)$(TARGET_DIR); \
	  for i in $$installfiles; do \
	    echo '-- Installing '$$i ; \
	    $(INSTALL_DATA) $$i $(DESTDIR)$(TARGET_DIR); \
	  done; \
	  pngfiles=`echo ./html/*.png`; \
	  if test "$$pngfiles" != './html/*.png'; then \
	    for i in $$pngfiles; do \
	      echo '-- Installing '$$i ; \
	      $(INSTALL_DATA) $$i $(DESTDIR)$(TARGET_DIR); \
	    done; \
	  fi; \
	  echo '-- Installing $(builddir)/html/$(DOC_MODULE)-@GST_API_VERSION@.devhelp2' ; \
	  if test -e $(builddir)/html/$(DOC_MODULE)-@GST_API_VERSION@.devhelp2; then \
	            $(INSTALL_DATA) $(builddir)/html/$(DOC_MODULE)-@GST_API_VERSION@.devhelp2 \
	            $(DESTDIR)$(TARGET_DIR)/$(DOC_MODULE)-@GST_API_VERSION@.devhelp2; \
	  fi; \
	  $(GTKDOC_REBASE) --relative --dest-dir=$(DESTDIR) --html-dir=$(DESTDIR)$(TARGET_DIR) || true ; \
	fi)
uninstall-local:
	if test -d $(DESTDIR)$(TARGET_DIR); then \
	  rm -rf $(DESTDIR)$(TARGET_DIR)/*; \
	  rmdir -p $(DESTDIR)$(TARGET_DIR) 2>/dev/null || true; \
	else \
	  echo '-- Nothing to uninstall' ; \
	fi;

#
# Checks
#
@ENABLE_GTK_DOC_TRUE@check-hierarchy: $(DOC_MODULE).hierarchy
@ENABLE_GTK_DOC_TRUE@	@if grep '	' $(DOC_MODULE).hierarchy; then \
@ENABLE_GTK_DOC_TRUE@	    echo "$(DOC_MODULE).hierarchy contains tabs, please fix"; \
@ENABLE_GTK_DOC_TRUE@	    /bin/false; \
@ENABLE_GTK_DOC_TRUE@	fi

@ENABLE_GTK_DOC_TRUE@check: check-hierarchy

check-inspected-versions:
	@echo Checking plugin versions of inspected plugin data ...; \
	fail=0 ; \
	for each in $(inspect_files) ; do \
	  if (grep -H '<version>' $$each | grep -v '<version>$(VERSION)'); then \
	    echo $$each should be fixed to say version $(VERSION) or be removed ; \
	    echo "sed -i -e 's/<version.*version>/<version>$(VERSION)<\/version>/'" $$each; \
	    echo ; \
	    fail=1; \
	  fi ; \
	done ; \
	exit $$fail

check-outdated-docs:
	$(AM_V_GEN)echo Checking for outdated plugin inspect data ...; \
	fail=0 ; \
	if [ -d $(top_srcdir)/.git/ ]; then \
	  files=`find $(srcdir)/inspect/ -name '*xml'`; \
	  for f in $$files; do \
	    ver=`grep '<version>$(PACKAGE_VERSION)</version>' $$f`; \
	    if test "x$$ver" = "x"; then \
	      plugin=`echo $$f | sed -e 's/^.*plugin-//' -e 's/.xml//'`; \
	      # echo "Checking $$plugin $$f"; \
	      pushd "$(top_srcdir)" >/dev/null; \
	      pinit=`git grep -A3 GST_PLUGIN_DEFINE -- ext/ gst/ sys/ | grep "\"$$plugin\""`; \
	      popd >/dev/null; \
	      # echo "[$$pinit]"; \
	      if test "x$$pinit" = "x"; then \
	        printf " **** outdated docs for plugin %-15s: %s\n" $$plugin $$f; \
	        fail=1; \
	      fi; \
	    fi; \
	  done; \
	fi ; \
	exit $$fail

#
# Require gtk-doc when making dist
#
@ENABLE_GTK_DOC_TRUE@dist-check-gtkdoc:
@ENABLE_GTK_DOC_FALSE@dist-check-gtkdoc:
@ENABLE_GTK_DOC_FALSE@	@echo "*** gtk-doc must be installed and enabled in order to make dist"
@ENABLE_GTK_DOC_FALSE@	@false

# FIXME: decide whether we want to dist generated html or not
# also this only works, if the project has been build before
# we could dist html only if its there, but that might lead to missing html in
# tarballs
dist-hook: dist-check-gtkdoc dist-hook-local
	mkdir $(distdir)/html
	cp html/* $(distdir)/html
	-cp $(srcdir)/$(DOC_MODULE).types $(distdir)/
	-cp $(srcdir)/$(DOC_MODULE)-sections.txt $(distdir)/
	cd $(distdir) && rm -f $(DISTCLEANFILES)
	-gtkdoc-rebase --online --relative --html-dir=$(distdir)/html

.PHONY : dist-hook-local docs check-outdated-docs inspect

# avoid spurious build errors when distchecking with -jN
.NOTPARALLEL:

# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
