re-enable leak checking :)
[platform/upstream/gstreamer.git] / check / Makefile.am
index 37b4525..d1f27b1 100644 (file)
@@ -1,31 +1,56 @@
+CHECK_REGISTRY=$(top_builddir)/check/test-registry.xml
+
 TESTS_ENVIRONMENT=\
-       GST_PLUGIN_PATH=$(top_builddir)/gst:$(top_builddir)/check \
-       GST_REGISTRY=$(top_builddir)/check/test-registry.xml
+       GST_PLUGIN_PATH_ONLY=yes \
+       GST_PLUGIN_PATH=$(top_builddir)/gst \
+       GST_REGISTRY=$(CHECK_REGISTRY)
 
 plugindir = $(libdir)/gstreamer-@GST_MAJORMINOR@
 
-# make all tests depend on the versioned gst-register
-$(TESTS): $(top_builddir)/tools/gst-register-@GST_MAJORMINOR@
-
 # rebuild gst-register-@GST_MAJORMINOR@ if needed
-$(top_builddir)/tools/gst-register-@GST_MAJORMINOR@:
+$(top_builddir)/tools/gst-register-@GST_MAJORMINOR@$(EXEEXT):
        cd $(top_builddir)/tools && make
 
 # override to _not_ install the test plugins
 install-pluginLTLIBRARIES:
 
-# This rule is here so make distcheck works on machines where core
-# dumps have PIDs appended
-CLEANFILES = core.*
-
-TESTS = $(top_builddir)/tools/gst-register-@GST_MAJORMINOR@ \
-       gst/gstbin              \
-    gst/gstbus          \
-       gst/gstcaps             \
-       gst/gstdata             \
-       gst/gstiterator         \
-       gst/gstobject           \
-       gst/gstsystemclock      \
+# ths core dumps of some machines have PIDs appended
+CLEANFILES = core.* test-registry.xml
+
+EXTRA_DIST = gst.supp
+
+clean-local:
+       for i in `find . -name ".libs" -type d`; do \
+         rm -rf $$i; \
+       done
+
+$(CHECK_REGISTRY):
+       $(TESTS_ENVIRONMENT)                                    \
+       $(top_builddir)/tools/gst-register
+
+# FIXME: it'd be nicer to run the versioned register, but in that case
+# "make dist" complains about not finding gst-register-0.9.c
+TESTS = $(top_builddir)/tools/gst-register     \
+       gst/gst                                 \
+       gst/gstbin                              \
+        gst/gstbuffer                          \
+        gst/gstbus                             \
+       gst/gstcaps                             \
+       gst/gstelement                          \
+       gst/gstghostpad                         \
+       gst/gstiterator                         \
+       gst/gstmessage                          \
+       gst/gstminiobject                       \
+       gst/gstobject                           \
+       gst/gstpad                              \
+       gst/gstsystemclock                      \
+       gst/gststructure                        \
+       gst/gsttag                              \
+       gst/gstvalue                            \
+       elements/gstfakesrc                     \
+       pipelines/simple_launch_lines           \
+       pipelines/cleanup                       \
+       states/sinks                            \
        gst-libs/gdp    
 
 check_PROGRAMS = $(TESTS)
@@ -34,7 +59,7 @@ noinst_LTLIBRARIES = libgstcheck.la
 
 libgstcheck_la_SOURCES = gstcheck.c
 libgstcheck_la_LIBADD = $(GST_OBJ_LIBS)
-noinst_HEADERS = gstcheck.h
+noinst_HEADERS = gstcheck.h gst/capslist.h
 
 AM_CFLAGS = $(GST_OBJ_CFLAGS) $(CHECK_CFLAGS)
 LDADD = $(GST_OBJ_LIBS) $(CHECK_LIBS) libgstcheck.la
@@ -44,3 +69,59 @@ gst_libs_gdp_SOURCES = \
        $(top_srcdir)/libs/gst/dataprotocol/dataprotocol.c
 # remove GST_ENABLE_NEW when dataprotocol has been declared API-stable
 gst_libs_gdp_CFLAGS = $(AM_CFLAGS) -DGST_ENABLE_NEW
+
+# valgrind testing
+
+# these just need fixing, period
+TESTS_TO_FIX =                                 \
+       gst/gstghostpad                         \
+       gst/gstiterator                         \
+       gst/gstmessage                          \
+       gst/gstsystemclock                      \
+       gst/gsttag                              \
+       pipelines/cleanup                       \
+       pipelines/simple_launch_lines
+
+# these need fixing because the threads cause segfaults under valgrind
+TESTS_THREADED =                               \
+       gst/gstminiobject                       \
+       gst/gstobject
+
+VALGRIND_TESTS_DISABLE =                       \
+       $(top_builddir)/tools/gst-register      \
+       $(TESTS_THREADED)                       \
+       $(TESTS_TO_FIX)
+
+if HAVE_VALGRIND
+# hangs spectacularly on some machines, so let's not do this by default yet
+check-local-disabled:
+       make valgrind
+else
+check-local-disabled:
+       @true
+endif
+
+# valgrind any given test by running make test.valgrind
+%.valgrind: % $(CHECK_REGISTRY)
+       @$(TESTS_ENVIRONMENT)                                   \
+       libtool --mode=execute                                  \
+       $(VALGRIND_PATH) -q --suppressions=$(srcdir)/gst.supp   \
+       --tool=memcheck --leak-check=yes --trace-children=yes   \
+       $*
+
+# valgrind all tests
+valgrind: $(TESTS)
+       @echo "Valgrinding tests ..."
+       $(TESTS_ENVIRONMENT) $(top_builddir)/tools/gst-register
+       @failed=0;                                                      \
+       for t in $(filter-out $(VALGRIND_TESTS_DISABLE),$(TESTS)); do   \
+               make $$t.valgrind;                                      \
+               if test "$$?" -ne 0; then                               \
+                        echo "Valgrind error for test $$t";            \
+                       failed=`expr $$failed + 1`;                     \
+                fi;                                                    \
+       done;                                                           \
+       if test "$$failed" -ne 0; then                                  \
+               echo "$$failed tests had leaks under valgrind";         \
+               false;                                                  \
+       fi