include $(top_srcdir)/build/autotools/Makefile.am.silent

NULL =

noinst_PROGRAMS = test-conformance

test_conformance_SOURCES = 		\
	test-conform-main.c 		\
	test-conform-common.c 		\
	test-conform-common.h 		\
	\
	test-timeline-interpolate.c 	\
	test-timeline-rewind.c 		\
	test-timeline.c 		\
	test-cogl-vertex-buffer-contiguous.c \
	test-cogl-vertex-buffer-interleved.c \
	test-cogl-vertex-buffer-mutability.c \
	test-cogl-fixed.c 		\
	test-cogl-backface-culling.c 	\
	test-cogl-npot-texture.c        \
	test-cogl-blend-strings.c	\
	test-cogl-premult.c		\
	test-cogl-materials.c		\
	test-cogl-viewport.c		\
	test-cogl-offscreen.c		\
	test-cogl-readpixels.c		\
	test-cogl-multitexture.c        \
	test-cogl-texture-mipmaps.c     \
	test-cogl-texture-rectangle.c   \
	test-cogl-texture-3d.c          \
	test-cogl-texture-pixmap-x11.c  \
	test-cogl-texture-get-set-data.c \
	test-cogl-wrap-modes.c          \
	test-cogl-pixel-buffer.c	\
	test-cogl-path.c		\
	test-cogl-object.c		\
	test-cogl-depth-test.c		\
	test-path.c 			\
	test-pick.c 			\
	test-clutter-rectangle.c 	\
	test-actor-invariants.c 	\
	test-paint-opacity.c 		\
	test-binding-pool.c		\
        test-clutter-text.c             \
	test-clutter-cairo-texture.c    \
        test-text-cache.c               \
	test-anchors.c                  \
	test-model.c			\
	test-color.c			\
	test-clutter-units.c		\
	test-group.c			\
	test-actor-size.c		\
	test-texture-fbo.c		\
	test-cogl-sub-texture.c         \
	test-script-parser.c		\
	test-actor-destroy.c		\
	test-behaviours.c		\
	test-animator.c			\
	test-state.c			\
	test-clutter-texture.c		\
        $(NULL)

# For convenience, this provides a way to easily run individual unit tests:
.PHONY: wrappers clean-wrappers

UNIT_TESTS = `./test-conformance -l -m thorough | $(GREP) '^/'`

wrappers: stamp-test-conformance
	@true
stamp-test-conformance: test-conformance$(EXEEXT)
	@mkdir -p wrappers
	@chmod +x test-launcher.sh
	@for i in $(UNIT_TESTS); \
	do \
		unit=`basename $$i | sed -e s/_/-/g`; \
		echo "  GEN    $$unit"; \
		( echo "#!/bin/sh" ; echo "$(abs_builddir)/test-launcher.sh '$$i' \"\$$@\"" ) > $$unit$(EXEEXT) ; \
		( echo "#!/bin/sh" ; echo "exec ./test-conformance$(EXEEXT) -p $$i \"\$$@\"" ) > wrappers/$$unit$(EXEEXT) ; \
		chmod +x $$unit$(EXEEXT); \
		chmod +x wrappers/$$unit$(EXEEXT); \
	done \
	&& echo timestamp > $(@F)

clean-wrappers:
	@for i in $(UNIT_TESTS); \
	do \
		unit=`basename $$i | sed -e s/_/-/g`; \
		echo "  RM     $$unit"; \
		rm -f $$unit$(EXEEXT) ; \
		rm -f wrappers/$$unit$(EXEEXT) ; \
	done \
	&& rm -f stamp-test-conformance

# NB: BUILT_SOURCES here a misnomer. We aren't building source, just inserting
# a phony rule that will generate symlink scripts for running individual tests
BUILT_SOURCES = wrappers

INCLUDES = \
	-I$(top_srcdir)/ \
	-I$(top_srcdir)/clutter \
	-I$(top_srcdir)/clutter/cogl \
	-I$(top_builddir)/clutter \
	-I$(top_builddir)/clutter/cogl

test_conformance_CPPFLAGS = \
	-DG_DISABLE_SINGLE_INCLUDES \
	-DCOGL_ENABLE_EXPERIMENTAL_API \
	-DCOGL_DISABLE_DEPRECATED \
	-DCLUTTER_DISABLE_DEPRECATED \
	-DTESTS_DATADIR=\""$(top_srcdir)/tests/data"\"

test_conformance_CFLAGS = -g $(CLUTTER_CFLAGS) $(MAINTAINER_CFLAGS)

test_conformance_LDADD = $(top_builddir)/clutter/libclutter-@CLUTTER_SONAME_INFIX@-@CLUTTER_API_VERSION@.la $(CLUTTER_LIBS)

test_conformance_LDFLAGS = -export-dynamic

test: wrappers
	@$(top_srcdir)/tests/conform/run-tests.sh \
	  ./test-conformance$(EXEEXT) -o test-report.xml

test-verbose: wrappers
	@$(top_srcdir)/tests/conform/run-tests.sh \
	  ./test-conformance$(EXEEXT) -o test-report.xml --verbose

GTESTER = gtester
GTESTER_REPORT = gtester-report

# XXX: we could prevent the conformance test suite from running
#      by simply defining this variable conditionally
TEST_PROGS = test-conformance

.PHONY: test
.PHONY: test-report perf-report full-report
.PHONY: test-report-npot perf-report-npot full-report-npot

# test-report: run tests and generate report
# perf-report: run tests with -m perf and generate report
# full-report: like test-report: with -m perf and -m slow
test-report perf-report full-report:	${TEST_PROGS}
	@test -z "${TEST_PROGS}" || { \
	  export GTESTER_LOGDIR=`mktemp -d "$(srcdir)/.testlogs-XXXXXX"` ; \
	  case $@ in \
	  test-report) test_options="-k";; \
	  perf-report) test_options="-k -m=perf";; \
	  full-report) test_options="-k -m=perf -m=slow";; \
	  esac ; \
	  $(top_srcdir)/tests/conform/run-tests.sh \
	    ./test-conformance$(EXEEXT) \
	    --verbose \
	    $$test_options \
	    -o `mktemp "$$GTESTER_LOGDIR/log-XXXXXX"` ; \
	  echo '<?xml version="1.0"?>'            > $@.xml ; \
	  echo '<report-collection>'             >> $@.xml ; \
	  echo '<info>'                          >> $@.xml ; \
	  echo '  <package>$(PACKAGE)</package>' >> $@.xml ; \
	  echo '  <version>$(VERSION)</version>' >> $@.xml ; \
	  echo '</info>'                         >> $@.xml ; \
	  for lf in `ls -L "$$GTESTER_LOGDIR"/.` ; do \
	    sed '1,1s/^<?xml\b[^>?]*?>//' <"$$GTESTER_LOGDIR"/"$$lf" >> $@.xml ; \
	  done ; \
	  echo >> $@.xml ; \
	  echo '</report-collection>' >> $@.xml ; \
	  ${GTESTER_REPORT} --version 2>/dev/null 1>&2 ; test "$$?" != 0 || ${GTESTER_REPORT} $@.xml >$@.html ; \
	  rm -rf "$$GTESTER_LOGDIR" ; \
	}

# same as above, but with a wrapper that forcibly disables non-power of
# two textures
test-report-npot perf-report-npot full-report-npot:	${TEST_PROGS}
	@test -z "${TEST_PROGS}" || { \
	  $(top_srcdir)/tests/tools/disable-npots.sh ; \
	  export GTESTER_LOGDIR=`mktemp -d "$(srcdir)/.testlogs-XXXXXX"` ; \
	  case $@ in \
	  test-report-npot) test_options="-k";; \
	  perf-report-npot) test_options="-k -m=perf";; \
	  full-report-npot) test_options="-k -m=perf -m=slow";; \
	  esac ; \
	  $(top_srcdir)/tests/conform/run-tests.sh \
	    ./test-conformance$(EXEEXT) \
	    --verbose \
	    $$test_options \
	    -o `mktemp "$$GTESTER_LOGDIR/log-XXXXXX"` ; \
	  echo '<?xml version="1.0"?>'            > $@.xml ; \
	  echo '<report-collection>'             >> $@.xml ; \
	  echo '<info>'                          >> $@.xml ; \
	  echo '  <package>$(PACKAGE)</package>' >> $@.xml ; \
	  echo '  <version>$(VERSION)</version>' >> $@.xml ; \
	  echo '</info>'                         >> $@.xml ; \
	  for lf in `ls -L "$$GTESTER_LOGDIR"/.` ; do \
	    sed '1,1s/^<?xml\b[^>?]*?>//' <"$$GTESTER_LOGDIR"/"$$lf" >> $@.xml ; \
	  done ; \
	  echo >> $@.xml ; \
	  echo '</report-collection>' >> $@.xml ; \
	  ${GTESTER_REPORT} --version 2>/dev/null 1>&2 ; test "$$?" != 0 || ${GTESTER_REPORT} $@.xml >$@.html ; \
	  rm -rf "$$GTESTER_LOGDIR" ; \
	}

XML_REPORTS = \
	test-report.xml 	\
	perf-report.xml 	\
	full-report.xml 	\
	test-report-npot.xml 	\
	perf-report-npot.xml 	\
	full-report-npot.xml

HTML_REPORTS = \
	test-report.html 	\
	perf-report.html 	\
	full-report.html 	\
	test-report-npot.html 	\
	perf-report-npot.html 	\
	full-report-npot.html

EXTRA_DIST = ADDING_NEW_TESTS test-launcher.sh.in run-tests.sh
DISTCLEANFILES = test-launcher.sh

# we override the clean-generic target to clean up the wrappers so
# we cannot use CLEANFILES
clean-generic: clean-wrappers
	$(QUIET_RM)rm -f $(XML_REPORTS) $(HTML_REPORTS)