### assemble a list of programs we want to build and install

if GST_DISABLE_LOADSAVE
GST_LOADSAVE_SRC = 
GST_LOADSAVE_SRC_V = 
else
GST_LOADSAVE_SRC = gst-xmllaunch
GST_LOADSAVE_SRC_V = \
	gst-xmllaunch-@GST_MAJORMINOR@
endif

if GST_DISABLE_PARSE
GST_PARSE_SRC = 
GST_PARSE_SRC_V = 
else
GST_PARSE_SRC = gst-launch
GST_PARSE_SRC_V = gst-launch-@GST_MAJORMINOR@
endif


GST_OTHER_SRC = \
	gst-feedback \
	gst-inspect \
	gst-typefind \
	gst-xmlinspect
GST_OTHER_SRC_V = \
	gst-inspect-@GST_MAJORMINOR@ \
	gst-typefind-@GST_MAJORMINOR@ \
	gst-xmlinspect-@GST_MAJORMINOR@

### so all of the programs we want to build
bin_PROGRAMS = \
	$(GST_LOADSAVE_SRC) $(GST_LOADSAVE_SRC_V) \
	$(GST_PARSE_SRC) $(GST_PARSE_SRC_V) \
	$(GST_OTHER_SRC) $(GST_OTHER_SRC_V)
bin_SCRIPTS = gst-feedback-@GST_MAJORMINOR@

# make sure each versioned tool has the right source file and flags
if !GST_DISABLE_LOADSAVE
gst_xmllaunch_@GST_MAJORMINOR@_SOURCES = gst-launch.c tools.h
gst_xmllaunch_@GST_MAJORMINOR@_CFLAGS = $(GST_OBJ_CFLAGS)
gst_xmllaunch_@GST_MAJORMINOR@_LDFLAGS = $(GST_OBJ_LIBS)
endif

if !GST_DISABLE_PARSE
gst_launch_@GST_MAJORMINOR@_SOURCES = gst-launch.c tools.h
gst_launch_@GST_MAJORMINOR@_CFLAGS = $(GST_OBJ_CFLAGS)
gst_launch_@GST_MAJORMINOR@_LDFLAGS = $(GST_OBJ_LIBS)
endif

gst_inspect_@GST_MAJORMINOR@_SOURCES = gst-inspect.c tools.h
gst_inspect_@GST_MAJORMINOR@_CFLAGS = $(GST_OBJ_CFLAGS)
gst_inspect_@GST_MAJORMINOR@_LDFLAGS = $(GST_OBJ_LIBS)
gst_typefind_@GST_MAJORMINOR@_SOURCES = gst-typefind.c tools.h
gst_typefind_@GST_MAJORMINOR@_CFLAGS = $(GST_OBJ_CFLAGS)
gst_typefind_@GST_MAJORMINOR@_LDFLAGS = $(GST_OBJ_LIBS)
gst_xmlinspect_@GST_MAJORMINOR@_SOURCES = gst-xmlinspect.c tools.h
gst_xmlinspect_@GST_MAJORMINOR@_CFLAGS = $(GST_OBJ_CFLAGS)
gst_xmlinspect_@GST_MAJORMINOR@_LDFLAGS = $(GST_OBJ_LIBS)

gst-feedback-@GST_MAJORMINOR@: gst-feedback-m.m
	cp $(srcdir)/gst-feedback-m.m $@
	chmod +x $@

# make sure each unversioned tool comes from gst-run.c
if !GST_DISABLE_LOADSAVE
gst_xmllaunch_SOURCES = gst-run.c
endif

if !GST_DISABLE_PARSE
gst_launch_SOURCES = gst-run.c
endif

gst_feedback_SOURCES = gst-run.c
gst_inspect_SOURCES = gst-run.c
gst_typefind_SOURCES = gst-run.c
gst_xmlinspect_SOURCES = gst-run.c

# CFLAGS and libs for nonversioned frontend binaries
AM_CFLAGS = $(GLIB_ONLY_CFLAGS)
LDADD = $(GLIB_ONLY_LIBS)
# due to depcomp not using AM_CFLAGS for rh9/yd3, we also set AM_CPPFLAGS
AM_CPPFLAGS = $(GLIB_ONLY_CFLAGS)

### man pages we want to install
if GST_DISABLE_LOADSAVE
GST_LOADSAVE_MAN=
else
GST_LOADSAVE_MAN = \
	gst-xmllaunch-@GST_MAJORMINOR@.1
endif

if GST_DISABLE_PARSE
GST_PARSE_MAN=
else
GST_PARSE_MAN = \
	gst-launch-@GST_MAJORMINOR@.1
endif


GST_OTHER_MAN = \
	gst-feedback-@GST_MAJORMINOR@.1 \
	gst-inspect-@GST_MAJORMINOR@.1 \
	gst-typefind-@GST_MAJORMINOR@.1 \
	gst-xmlinspect-@GST_MAJORMINOR@.1

manpages = $(GST_LOADSAVE_MAN) $(GST_PARSE_MAN) $(GST_OTHER_MAN)

CLEANFILES = $(manpages) $(bin_SCRIPTS) *.gcno *.gcda
man_MANS = $(manpages)

# developer helper tools, not meant for installation
noinst_SCRIPTS = gst-indent

noinst_HEADERS = tools.h

EXTRA_DIST = \
	$(noinst_SCRIPTS) \
	gst-feedback.1.in \
	gst-inspect.1.in \
	gst-launch.1.in \
	gst-typefind.1.in \
	gst-xmlinspect.1.in \
	gst-xmllaunch.1.in \
	gst-feedback-m.m \
	gst-plot-timeline.py

%-@GST_MAJORMINOR@.1: %.1.in
	sed \
		-e s,gst-feedback,gst-feedback-@GST_MAJORMINOR@,g \
		-e s,gst-inspect,gst-inspect-@GST_MAJORMINOR@,g \
		-e s,gst-launch,gst-launch-@GST_MAJORMINOR@,g \
		-e s,gst-typefind,gst-typefind-@GST_MAJORMINOR@,g \
		-e s,gst-xmlinspect,gst-xmlinspect-@GST_MAJORMINOR@,g \
		-e s,gst-xmllaunch,gst-xmllaunch-@GST_MAJORMINOR@,g \
		-e s,GST_MAJORMINOR,@GST_MAJORMINOR@,g \
		$< >$@

