lib_LTLIBRARIES = libgstreamer-@GST_MAJORMINOR@.la

if HAVE_CHECK
SUBDIRS_CHECK = check
else
SUBDIRS_CHECK =
endif

if GST_DISABLE_LOADSAVE
GST_LOADSAVE_SRC = 
else
GST_LOADSAVE_SRC = gstxml.c
endif

if GST_DISABLE_PARSE
GST_PARSE_SRC = 
SUBDIRS_PARSE = 
GST_PARSE_LA = 
else
GST_PARSE_SRC = gstparse.c
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_REGISTRY
GST_REGISTRY_SRC = 
SUBDIRS_REGISTRY =
GST_REGISTRY_LA = 
else
GST_REGISTRY_SRC = gstregistry.c
SUBDIRS_REGISTRY = registries
GST_REGISTRY_LA = registries/libgstxmlregistry.la
endif

if GST_DISABLE_ENUMTYPES
GST_ENUMTYPES_SRC = 
else
GST_ENUMTYPES_SRC = gstenumtypes.c
endif

if GST_DISABLE_INDEX
GST_INDEX_SRC = 
SUBDIRS_INDEX =
else
GST_INDEX_SRC = gstindex.c
SUBDIRS_INDEX = indexers
endif

if GST_DISABLE_PLUGIN
GST_PLUGIN_SRC = 
else
GST_PLUGIN_SRC = gstplugin.c
endif

if GST_DISABLE_URI
GST_URI_SRC = 
else
GST_URI_SRC = gsturi.c
endif

SUBDIRS = $(SUBDIRS_PARSE) $(SUBDIRS_REGISTRY) . base elements $(SUBDIRS_INDEX) $(SUBDIRS_CHECK)
DIST_SUBDIRS = base elements parse registries indexers check

# 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 gstmarshal.h
built_source_make = $(GST_ENUMTYPES_SRC) gstmarshal.c

EXTRA_libgstreamer_@GST_MAJORMINOR@_la_SOURCES = \
	gstmarshal.list gstxml.c gstparse.c gsttrace.c

libgstreamer_@GST_MAJORMINOR@_la_SOURCES = \
	gst.c			\
	gstobject.c		\
	gstbin.c		\
	gstbuffer.c		\
	gstbus.c		\
	gstcaps.c		\
	gstchildproxy.c		\
	gstclock.c		\
	gstelement.c		\
	gstelementfactory.c	\
	gsterror.c		\
	gstevent.c		\
	gstfilter.c		\
	gstformat.c		\
	gstghostpad.c		\
	$(GST_INDEX_SRC)	\
	gstinfo.c		\
	gstinterface.c		\
	gstiterator.c		\
	gstmemchunk.c		\
	gstmessage.c		\
	gstminiobject.c		\
	gstpad.c		\
	gstpipeline.c		\
	gstplugin.c		\
	gstpluginfeature.c	\
	gstquery.c		\
	gstqueryutils.c		\
	gstqueue.c		\
	gststructure.c		\
	gstsystemclock.c	\
	gsttag.c		\
	gsttaginterface.c	\
	gsttask.c		\
	$(GST_TRACE_SRC)	\
	gsttrashstack.c		\
	gsttypefind.c		\
	$(GST_URI_SRC)		\
	gsturitype.c		\
	gstutils.c		\
	gstvalue.c		\
	$(GST_REGISTRY_SRC)	\
	gstregistrypool.c	\
	$(GST_PARSE_SRC)	\
	$(GSTARCH_SRCS)		\
	$(GST_LOADSAVE_SRC)

# do not put files in the distribution that are generated
nodist_libgstreamer_@GST_MAJORMINOR@_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)
# DISTCLEANFILES is for files generated by configure
DISTCLEANFILES = $(built_header_configure)
                                                                                
libgstreamer_@GST_MAJORMINOR@_la_CFLAGS =	\
	-D_GNU_SOURCE				\
	$(GST_LIB_CFLAGS) 			\
	-DG_LOG_DOMAIN=g_log_domain_gstreamer 	\
	-DGST_MAJORMINOR=\""$(GST_MAJORMINOR)"\" 
libgstreamer_@GST_MAJORMINOR@_la_LIBADD = \
	$(GST_LIB_LIBS) $(GST_PARSE_LA) $(GST_REGISTRY_LA)
libgstreamer_@GST_MAJORMINOR@_la_LDFLAGS = \
	@GST_LT_LDFLAGS@ -version-info @GST_LIBVERSION@ \
	-export-symbols-regex [_]*\(gst_\|Gst\|GST_\).*

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

gst_headers =			\
	gst.h			\
	gstobject.h		\
	gstbin.h		\
	gstbuffer.h		\
	gstbus.h		\
	gstcaps.h		\
	gstchildproxy.h		\
	gstclock.h		\
	gstcompat.h		\
	gstelement.h		\
	gstelementfactory.h	\
	gsterror.h		\
	gstevent.h		\
	gstfilter.h		\
	gstformat.h		\
	gstghostpad.h		\
	gstindex.h		\
	gstinfo.h		\
	gstinterface.h		\
	gstiterator.h		\
	gstmacros.h		\
	gstmemchunk.h		\
	gstmessage.h		\
	gstminiobject.h		\
	gstpad.h		\
	gstpipeline.h		\
	gstplugin.h		\
	gstpluginfeature.h	\
	gstquery.h		\
	gstqueryutils.h		\
	gstqueue.h		\
	gststructure.h		\
	gstsystemclock.h	\
	gsttag.h		\
	gsttaginterface.h	\
	gsttask.h		\
	gsttrace.h		\
	gsttrashstack.h		\
	gsttypefind.h		\
	gsturi.h		\
	gsturitype.h		\
	gstutils.h		\
	gstvalue.h		\
	gstregistry.h		\
	gstregistrypool.h	\
	gstparse.h		\
	gstxml.h

libgstreamer_@GST_MAJORMINOR@include_HEADERS = $(gst_headers)
nodist_libgstreamer_@GST_MAJORMINOR@include_HEADERS = \
	$(built_header_configure) $(built_header_make)

noinst_HEADERS = 		\
	gettext.h		\
	gst-i18n-lib.h		\
	gst-i18n-app.h		\
	gst_private.h

gstmarshal.h: gstmarshal.list
	glib-genmarshal --header --prefix=gst_marshal $(srcdir)/gstmarshal.list > gstmarshal.h.tmp
	mv gstmarshal.h.tmp gstmarshal.h

gstmarshal.c: gstmarshal.list gst_private.h
	echo "#include \"gst_private.h\"" > gstmarshal.c.tmp
	echo "#include \"glib-object.h\"" >> gstmarshal.c.tmp
	echo "#include \"gstmarshal.h\"" >> gstmarshal.c.tmp
	glib-genmarshal --body --prefix=gst_marshal $(srcdir)/gstmarshal.list >> gstmarshal.c.tmp
	mv gstmarshal.c.tmp gstmarshal.c

gstenumtypes.h: $(gst_headers)
	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 "/* 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)
	glib-mkenums \
	--fhead "#include \"gst_private.h\"\n#include <gst/gst.h>" \
	--fprod "\n/* enumerations from \"@filename@\" */" \
	--vhead "GType\n@enum_name@_get_type (void)\n{\n  static GType etype = 0;\n  if (etype == 0) {\n    static const G@Type@Value values[] = {"     \
	--vprod "      { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \
	--vtail "      { 0, NULL, NULL }\n    };\n    etype = g_@type@_register_static (\"@EnumName@\", values);\n  }\n  return etype;\n}\n" \
	$^ > gstenumtypes.c
