lib_LTLIBRARIES = libgstreamer-@GST_API_VERSION@.la

if GST_DISABLE_REGISTRY
GST_REGISTRY_SRC =
else
GST_REGISTRY_SRC = gstregistrybinary.c
endif

if GST_DISABLE_PARSE
SUBDIRS_PARSE =
GST_PARSE_LA =
else
SUBDIRS_PARSE = parse
GST_PARSE_LA = parse/libgstparse.la
endif

if GST_DISABLE_TRACE
GST_TRACE_SRC =
else
GST_TRACE_SRC = gsttrace.c
endif

if GST_DISABLE_PLUGIN
GST_PLUGIN_SRC =
else
GST_PLUGIN_SRC = gstplugin.c
endif

if !GST_DISABLE_GST_DEBUG
SUBDIRS_PRINTF = printf
GST_PRINTF_LA = printf/libgstprintf.la
else
SUBDIRS_PRINTF =
GST_PRINTF_LA =
endif

SUBDIRS = $(SUBDIRS_PARSE) $(SUBDIRS_PRINTF)

DIST_SUBDIRS = parse printf

# make variables for all generated source and header files to make the
# distinction clear

built_header_configure = gstconfig.h gstversion.h
built_header_make = gstenumtypes.h
built_source_make = gstenumtypes.c

EXTRA_libgstreamer_@GST_API_VERSION@_la_SOURCES = \
	gsttrace.c \
	gstregistrybinary.c


# temporarily not used
#	glib-compat.c

libgstreamer_@GST_API_VERSION@_la_SOURCES = \
	gst.c			\
	gstobject.c		\
	gstallocator.c		\
	gstbin.c		\
	gstbuffer.c		\
	gstbufferlist.c		\
	gstbufferpool.c		\
	gstbus.c		\
	gstcaps.c		\
	gstcapsfeatures.c	\
	gstchildproxy.c		\
	gstclock.c		\
	gstcontext.c \
	gstcontrolbinding.c \
	gstcontrolsource.c \
	gstdatetime.c		\
	gstdebugutils.c		\
	gstelement.c		\
	gstelementfactory.c	\
	gsterror.c		\
	gstevent.c		\
	gstformat.c		\
	gstghostpad.c		\
	gstinfo.c		\
	gstiterator.c		\
	gstatomicqueue.c	\
	gstmessage.c		\
	gstmeta.c		\
	gstmemory.c		\
	gstminiobject.c		\
	gstpad.c		\
	gstpadtemplate.c	\
	gstparamspecs.c		\
	gstpipeline.c		\
	gstplugin.c		\
	gstpluginfeature.c	\
	gstpluginloader.c	\
	gstpoll.c		\
	gstpreset.c             \
	gstquark.c		\
	gstquery.c		\
	gstregistry.c		\
	gstregistrychunks.c	\
	gstsample.c		\
	gstsegment.c		\
	gststructure.c		\
	gstsystemclock.c	\
	gsttaglist.c		\
	gsttagsetter.c		\
	gsttask.c		\
	gsttaskpool.c		\
	gsttoc.c		\
	gsttocsetter.c		\
	$(GST_TRACE_SRC)	\
	gsttypefind.c		\
	gsttypefindfactory.c	\
	gsturi.c		\
	gstutils.c		\
	gstvalue.c		\
	gstparse.c		\
	$(GST_REGISTRY_SRC)

# do not put files in the distribution that are generated
nodist_libgstreamer_@GST_API_VERSION@_la_SOURCES = $(built_source_make)

# BUILT_SOURCES are built on make all/check/install before all other targets
BUILT_SOURCES = \
        $(built_header_configure)	\
        $(built_header_make)		\
        $(built_source_make)
# CLEANFILES is for files generated by make
CLEANFILES = $(built_header_make) $(built_source_make) $(as_dll_cleanfiles) *.gcno *.gcda *.gcov *.gcov.out
# DISTCLEANFILES is for files generated by configure
DISTCLEANFILES = $(built_header_configure)

libgstreamer_@GST_API_VERSION@_la_CFLAGS =		\
	-D_GNU_SOURCE					\
	-DGST_EXPORTS					\
	-DG_LOG_DOMAIN=g_log_domain_gstreamer 		\
	-DGST_API_VERSION=\""$(GST_API_VERSION)"\" 	\
	-DGST_DISABLE_DEPRECATED			\
	$(VALGRIND_CFLAGS)				\
	$(GST_ALL_CFLAGS)

libgstreamer_@GST_API_VERSION@_la_LIBADD =		\
	$(GST_PARSE_LA)					\
	$(GST_PRINTF_LA)				\
	$(GST_ALL_LIBS)					\
	$(WIN32_LIBS)					\
	$(LIBM)

libgstreamer_@GST_API_VERSION@_la_LDFLAGS =		\
	$(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS)

libgstreamer_@GST_API_VERSION@includedir = $(includedir)/gstreamer-@GST_API_VERSION@/gst

gst_headers =			\
	gst.h			\
	glib-compat.h		\
	gstobject.h		\
	gstallocator.h		\
	gstbin.h		\
	gstbuffer.h		\
	gstbufferlist.h		\
	gstbufferpool.h		\
	gstbus.h		\
	gstcaps.h		\
	gstcapsfeatures.h	\
	gstchildproxy.h		\
	gstclock.h		\
	gstcompat.h		\
	gstcontext.h \
	gstcontrolbinding.h \
	gstcontrolsource.h \
	gstdatetime.h		\
	gstdebugutils.h		\
	gstelement.h		\
	gstelementmetadata.h	\
	gstelementfactory.h	\
	gsterror.h		\
	gstevent.h		\
	gstformat.h		\
	gstghostpad.h		\
	gstinfo.h		\
	gstiterator.h		\
	gstatomicqueue.h	\
	gstmacros.h		\
	gstmessage.h		\
	gstmeta.h		\
	gstmemory.h		\
	gstminiobject.h		\
	gstpad.h		\
	gstpadtemplate.h	\
	gstparamspecs.h		\
	gstpipeline.h		\
	gstplugin.h		\
	gstpluginfeature.h	\
	gstpoll.h		\
	gstpreset.h             \
	gstquery.h		\
	gstsample.h		\
	gstsegment.h		\
	gststructure.h		\
	gstsystemclock.h	\
	gsttaglist.h		\
	gsttagsetter.h		\
	gsttask.h		\
	gsttaskpool.h		\
	gsttoc.h		\
	gsttocsetter.h		\
	gsttypefind.h		\
	gsttypefindfactory.h	\
	gsturi.h		\
	gstutils.h		\
	gstvalue.h		\
	gstregistry.h		\
	gstparse.h

libgstreamer_@GST_API_VERSION@include_HEADERS = $(gst_headers) math-compat.h

nodist_libgstreamer_@GST_API_VERSION@include_HEADERS = \
	$(built_header_configure) $(built_header_make)

noinst_HEADERS = 		\
	gettext.h		\
	glib-compat-private.h	\
	gst-i18n-lib.h		\
	gst-i18n-app.h		\
	gstelementmetadata.h	\
	gstpluginloader.h	\
	gstquark.h		\
	gstregistrybinary.h     \
	gstregistrychunks.h     \
	gsttrace.h		\
	gst_private.h

gstenumtypes.h: $(gst_headers)
	$(AM_V_GEN)$(GLIB_MKENUMS) \
	--fhead "#ifndef __GST_ENUM_TYPES_H__\n#define __GST_ENUM_TYPES_H__\n\n#include <glib-object.h>\n\nG_BEGIN_DECLS\n" \
	--fprod "\n/* enumerations from \"@filename@\" */\n" \
	--vhead "GType @enum_name@_get_type (void);\n#define GST_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n"         \
	--ftail "G_END_DECLS\n\n#endif /* __GST_ENUM_TYPES_H__ */" \
	$^ > gstenumtypes.h

gstenumtypes.c: $(gst_headers)
	$(AM_V_GEN)$(GLIB_MKENUMS) \
	--fhead "#include \"gst_private.h\"\n#include <gst/gst.h>\n#define C_ENUM(v) ((gint) v)\n#define C_FLAGS(v) ((guint) v)\n " \
	--fprod "\n/* enumerations from \"@filename@\" */" \
	--vhead "GType\n@enum_name@_get_type (void)\n{\n  static gsize id = 0;\n  static const G@Type@Value values[] = {"     \
	--vprod "    { C_@TYPE@(@VALUENAME@), \"@VALUENAME@\", \"@valuenick@\" }," \
	--vtail "    { 0, NULL, NULL }\n  };\n\n  if (g_once_init_enter (&id)) {\n    GType tmp = g_@type@_register_static (\"@EnumName@\", values);\n    g_once_init_leave (&id, tmp);\n  }\n\n  return (GType) id;\n}" \
	$^ > gstenumtypes.c

%.c.gcov: .libs/libgstreamer_@GST_API_VERSION@_la-%.gcda %.c
	$(GCOV) -b -f -o $^ > $@.out

gcov: $(libgstreamer_@GST_API_VERSION@_la_SOURCES:=.gcov)

Android.mk: Makefile.am
	androgenizer -:PROJECT gstreamer -:SHARED libgstreamer-@GST_API_VERSION@ \
	 -:TAGS eng debug \
         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
	 -:SOURCES $(libgstreamer_@GST_API_VERSION@_la_SOURCES) \
	           $(nodist_libgstreamer_@GST_API_VERSION@_la_SOURCES) \
	 -:CFLAGS $(DEFS) $(libgstreamer_@GST_API_VERSION@_la_CFLAGS) \
	 -:LDFLAGS $(libgstreamer_@GST_API_VERSION@_la_LDFLAGS) \
	           $(libgstreamer_@GST_API_VERSION@_la_LIBADD) \
	           -ldl \
	 -:SUBDIR gst/parse \
	 -:HEADER_TARGET gstreamer-@GST_API_VERSION@/gst \
	 -:HEADERS $(libgstreamer_@GST_API_VERSION@include_HEADERS) \
	 -:LIBFILTER_STATIC gstparse \
	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
	> $@

if HAVE_INTROSPECTION
BUILT_GIRSOURCES = Gst-@GST_API_VERSION@.gir

gir_headers=$(patsubst %,$(srcdir)/%, $(libgstreamer_@GST_API_VERSION@include_HEADERS))
gir_headers+=$(patsubst %,$(builddir)/%, $(built_header_make))
gir_sources=$(patsubst %,$(srcdir)/%, $(libgstreamer_@GST_API_VERSION@_la_SOURCES))
gir_sources+=$(patsubst %,$(builddir)/%, $(built_source_make))

Gst-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstreamer-@GST_API_VERSION@.la
	$(AM_V_GEN)GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \
		$(INTROSPECTION_SCANNER) -v --namespace Gst \
		--nsversion=@GST_API_VERSION@ \
		--warn-all \
		-I$(top_srcdir) \
		-I$(top_builddir) \
		-DIN_GOBJECT_INTROSPECTION=1 \
		--c-include='gst/gst.h' \
		--library=libgstreamer-@GST_API_VERSION@.la \
		--include=GLib-2.0 \
		--include=GObject-2.0 \
		--include=GModule-2.0 \
		--libtool="$(top_builddir)/libtool" \
		--pkg glib-2.0 \
		--pkg gobject-2.0 \
		--pkg gmodule-no-export-2.0 \
		--pkg-export gstreamer-@GST_API_VERSION@ \
		--add-init-section="gst_init(NULL, NULL);" \
		--output $@ \
		$(gir_headers) \
		$(gir_sources)

# INTROSPECTION_GIRDIR/INTROSPECTION_TYPELIBDIR aren't the right place to
# install anything - we need to install inside our prefix.
girdir = $(datadir)/gir-1.0
gir_DATA = $(BUILT_GIRSOURCES)

typelibsdir = $(libdir)/girepository-1.0/

typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)

%.typelib: %.gir $(INTROSPECTION_COMPILER)
	$(AM_V_GEN)$(INTROSPECTION_COMPILER) --includedir=$(srcdir) --includedir=$(builddir) $(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)

CLEANFILES += $(BUILT_GIRSOURCES) $(typelibs_DATA)
endif

# try to prevent packaging errors
check-libexecdir-consistency:
	@if test "${GST_PLUGIN_SCANNER_INSTALLED}" != "${libexecdir}/gstreamer-$(GST_API_VERSION)/gst-plugin-scanner"; then \
	  echo "*** Inconsistent libexecdir! Please use ./configure --libexecdir=/foo/bar"; \
	  echo "*** to set the libexecdir and not make libexecdir=/foo/bar or the like."; \
	  echo "*** The same goes for prefix, libdir etc."; \
	  echo "*** ${GST_PLUGIN_SCANNER_INSTALLED} != ${libexecdir}/gstreamer-$(GST_API_VERSION)/gst-plugin-scanner"; \
	  exit 1; \
	fi

all-local: check-libexecdir-consistency
