| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407 |
- include $(top_srcdir)/build/Makefile.am.common
- include $(top_srcdir)/test/Makefile.sources
- SUBDIRS=pdiff .
- # Then we have a collection of tests that are only run if certain
- # features are compiled into cairo
- if HAVE_REAL_PTHREAD
- test_sources += $(pthread_test_sources)
- endif
- if CAIRO_HAS_FT_FONT
- if CAIRO_HAS_FC_FONT
- test_sources += $(ft_font_test_sources)
- endif
- endif
- if CAIRO_HAS_GL_SURFACE
- test_sources += $(gl_surface_test_sources)
- endif
- if CAIRO_HAS_EGL_FUNCTIONS
- test_sources += $(egl_surface_test_sources)
- endif
- # Need to add quartz-surface-source
- if CAIRO_HAS_QUARTZ_SURFACE
- test_sources += $(quartz_surface_test_sources)
- endif
- if CAIRO_HAS_PDF_SURFACE
- test_sources += $(pdf_surface_test_sources)
- endif
- if CAIRO_HAS_PS_SURFACE
- test_sources += $(ps_surface_test_sources)
- endif
- if CAIRO_HAS_SVG_SURFACE
- test_sources += $(svg_surface_test_sources)
- endif
- if CAIRO_HAS_TEST_SURFACES
- test_sources += $(test_fallback16_surface_test_sources)
- endif
- if CAIRO_HAS_XCB_SURFACE
- test_sources += $(xcb_surface_test_sources)
- endif
- if CAIRO_HAS_XLIB_SURFACE
- test_sources += $(xlib_surface_test_sources)
- endif
- if CAIRO_HAS_XLIB_XRENDER_SURFACE
- test_sources += $(xlib_xrender_surface_test_sources)
- endif
- if CAIRO_HAS_MULTI_PAGE_SURFACES
- test_sources += $(multi_page_surface_test_sources)
- endif
- # Include fallback-resolution (once!) if we have any of the vector surfaces
- if BUILD_ANY2PPM
- if CAIRO_HAS_SVG_SURFACE
- test = $(fallback_resolution_test_sources)
- endif
- if CAIRO_HAS_PDF_SURFACE
- test = $(fallback_resolution_test_sources)
- endif
- if CAIRO_HAS_PS_SURFACE
- test = $(fallback_resolution_test_sources)
- endif
- endif
- test_sources += $(test)
- noinst_PROGRAMS = cairo-test-suite$(EXEEXT) # always build
- noinst_SCRIPTS = check-refs.sh
- TESTS += cairo-test-suite$(EXEEXT)
- cairo-test-constructors.c: Makefile $(test_sources) make-cairo-test-constructors.sh
- (cd $(srcdir) && sh ./make-cairo-test-constructors.sh $(test_sources)) > $@ || (rm $@ ; exit 1)
- cairo_test_suite_SOURCES = \
- $(cairo_test_suite_sources) \
- $(cairo_test_suite_headers) \
- $(test_sources) \
- cairo-test-constructors.c
- cairo_test_suite_CFLAGS = $(AM_CFLAGS) $(real_pthread_CFLAGS)
- cairo_test_suite_LDADD = \
- $(real_pthread_LIBS) \
- $(top_builddir)/test/pdiff/libpdiff.la \
- $(top_builddir)/boilerplate/libcairoboilerplate.la \
- $(top_builddir)/src/libcairo.la \
- $(CAIRO_LDADD)
- cairo_test_suite_DEPENDENCIES = \
- $(top_builddir)/test/pdiff/libpdiff.la \
- $(top_builddir)/boilerplate/libcairoboilerplate.la \
- $(top_builddir)/src/libcairo.la
- if BUILD_ANY2PPM
- cairo_test_suite_DEPENDENCIES += \
- any2ppm$(EXEEXT)
- endif
- if HAVE_SHM
- EXTRA_PROGRAMS += cairo-test-trace
- cairo_test_trace_SOURCES = \
- cairo-test-trace.c \
- buffer-diff.c \
- buffer-diff.h
- cairo_test_trace_CFLAGS = $(AM_CFLAGS) $(real_pthread_CFLAGS)
- cairo_test_trace_LDADD = \
- $(real_pthread_LIBS) \
- $(top_builddir)/test/pdiff/libpdiff.la \
- $(top_builddir)/util/cairo-script/libcairo-script-interpreter.la \
- $(top_builddir)/boilerplate/libcairoboilerplate.la \
- $(top_builddir)/src/libcairo.la \
- $(top_builddir)/util/cairo-missing/libcairo-missing.la \
- $(CAIRO_LDADD) \
- $(SHM_LIBS)
- cairo_test_trace_DEPENDENCIES = \
- $(top_builddir)/test/pdiff/libpdiff.la \
- $(top_builddir)/util/cairo-script/libcairo-script-interpreter.la \
- $(top_builddir)/boilerplate/libcairoboilerplate.la \
- $(top_builddir)/src/libcairo.la \
- $(top_builddir)/util/cairo-missing/libcairo-missing.la \
- $(NULL)
- endif
- BUILT_SOURCES += cairo-test-constructors.c
- EXTRA_DIST += $(BUILT_SOURCES) $(noinst_SCRIPTS) COPYING make-cairo-test-constructors.sh run-cairo-test-suite.sh generate_refs.sh tiger.inc
- CLEANFILES += $(BUILT_SOURCES)
- EXTRA_DIST += \
- 6x13.pcf \
- index.html \
- jp2.jp2 \
- jpeg.jpg \
- png.png \
- romedalen.jpg \
- romedalen.png \
- scarab.jpg \
- surface-source.c \
- testtable.js \
- reference
- # Any test that doesn't generate a log file goes here
- NOLOG_TESTS = \
- fallback-resolution \
- font-options \
- multi-page \
- pdf-features \
- png \
- ps-eps \
- ps-features \
- svg-clip \
- svg-surface \
- toy-font-face \
- user-data
- # A target to summarise the failures
- check-summary:
- @FAILED_TESTS=""; \
- for t in output/*.log; do \
- if grep -e '\<FAIL\>' $$t >/dev/null 2>&1; then \
- FAILED_TESTS="$$FAILED_TESTS $$t"; \
- fi; \
- done; \
- if test -n "$$FAILED_TESTS"; then \
- echo "Failed tests:"; \
- surfaces=""; \
- for t in $$FAILED_TESTS; do \
- name="$${t##output/}"; name="$${name%.log}"; \
- echo -n " $$name: "; \
- grep -e '\<FAIL\>' $$t | sed -e 's/.*TARGET: \([^ ]*\).*/\1/' | sort | uniq | tr '\n' ' '; \
- echo; \
- for s in `grep -e '\<FAIL\>' $$t | sed -e 's/.*TARGET: \([^ ]*\).*/\1/' | sort | uniq`; do \
- ss=`echo $$s | tr '-' '_'`; \
- tt=`echo $$name | tr '-' '_'`; \
- eval $$ss=\""$${!ss} $$tt"\"; \
- echo $$surfaces | grep $$ss >/dev/null || surfaces="$$surfaces $$ss"; \
- done; \
- done; \
- echo -n "Failures per surface - "; \
- first=""; \
- for s in $$surfaces; do \
- ss=`echo $$s | tr '_' '-'`; \
- test -n "$$first" && echo -n ", "; \
- cnt=`echo $${!s} | wc -w`; \
- echo -n "$$ss: $$cnt"; \
- first="false"; \
- done; \
- echo "."; \
- for s in $$surfaces; do \
- ss=`echo $$s | tr '_' '-'`; \
- cnt=`echo $${!s} | wc -w`; \
- echo -n " $$ss [$$cnt]: "; \
- echo $${!s} | tr '_' '-'; \
- done; \
- fi
- AM_CPPFLAGS = \
- -I$(srcdir) \
- -I$(srcdir)/pdiff \
- -I$(top_srcdir)/boilerplate \
- -I$(top_srcdir)/util/cairo-missing \
- -I$(top_srcdir)/util/cairo-script \
- -I$(top_srcdir)/src \
- -I$(top_builddir)/src \
- $(CAIRO_CFLAGS)
- AM_LDFLAGS = $(CAIRO_LDFLAGS)
- $(top_builddir)/boilerplate/libcairoboilerplate.la: $(top_builddir)/src/libcairo.la
- cd $(top_builddir)/boilerplate && $(MAKE) $(AM_MAKEFLAGS) libcairoboilerplate.la
- $(top_builddir)/src/libcairo.la:
- cd $(top_builddir)/src && $(MAKE) $(AM_MAKEFLAGS) libcairo.la
- $(top_builddir)/test/pdiff/libpdiff.la:
- cd $(top_builddir)/test/pdiff && $(MAKE) $(AM_MAKEFLAGS) libpdiff.la
- $(top_builddir)/test/pdiff/perceptualdiff:
- cd $(top_builddir)/test/pdiff && $(MAKE) $(AM_MAKEFLAGS) perceptualdiff
- $(top_builddir)/util/cairo-script/libcairo-script-interpreter.la: $(top_builddir)/src/libcairo.la
- cd $(top_builddir)/util/cairo-script && $(MAKE) $(AM_MAKEFLAGS) libcairo-script-interpreter.la
- EXTRA_PROGRAMS += imagediff png-flatten
- imagediff_SOURCES = \
- imagediff.c \
- buffer-diff.c \
- buffer-diff.h
- imagediff_LDADD = \
- $(top_builddir)/test/pdiff/libpdiff.la \
- $(top_builddir)/src/libcairo.la
- png_flatten_SOURCES = png-flatten.c
- png_flatten_LDADD = $(top_builddir)/src/libcairo.la \
- $(CAIRO_LDADD)
- if BUILD_ANY2PPM
- check_PROGRAMS += any2ppm
- any2ppm_CFLAGS = $(AM_CFLAGS) $(POPPLER_CFLAGS) $(LIBRSVG_CFLAGS) $(LIBSPECTRE_CFLAGS)
- # add LDADD, so poppler/librsvg uses "our" cairo
- any2ppm_LDFLAGS = $(AM_LDFLAGS) $(CAIRO_TEST_UNDEFINED_LDFLAGS)
- any2ppm_LDADD = \
- $(top_builddir)/util/cairo-script/libcairo-script-interpreter.la \
- $(top_builddir)/src/libcairo.la \
- $(CAIRO_LDADD) \
- $(CAIROBOILERPLATE_LIBS) \
- $(POPPLER_LIBS) \
- $(LIBRSVG_LIBS) \
- $(LIBSPECTRE_LIBS)
- endif
- if CAIRO_CAN_TEST_PDF_SURFACE
- check_PROGRAMS += pdf2png
- pdf2png_CFLAGS = $(AM_CFLAGS) $(POPPLER_CFLAGS)
- # add LDADD, so poppler uses "our" cairo
- pdf2png_LDFLAGS = $(AM_LDFLAGS) $(CAIRO_TEST_UNDEFINED_LDFLAGS)
- pdf2png_LDADD = $(top_builddir)/src/libcairo.la \
- $(CAIRO_LDADD) \
- $(POPPLER_LIBS)
- endif
- if CAIRO_CAN_TEST_SVG_SURFACE
- check_PROGRAMS += svg2png
- svg2png_CFLAGS = $(AM_CFLAGS) $(LIBRSVG_CFLAGS)
- # add LDADD, so librsvg uses "our" cairo
- svg2png_LDFLAGS = $(AM_LDFLAGS) $(CAIRO_TEST_UNDEFINED_LDFLAGS)
- svg2png_LDADD = $(top_builddir)/src/libcairo.la \
- $(CAIRO_LDADD) \
- $(LIBRSVG_LIBS)
- endif
- if CAIRO_HAS_SPECTRE
- check_PROGRAMS += ps2png
- ps2png_CFLAGS = $(AM_CFLAGS) $(LIBSPECTRE_CFLAGS)
- # add LDADD, so ps2png uses "our" cairo
- ps2png_LDFLAGS = $(AM_LDFLAGS) $(CAIRO_TEST_UNDEFINED_LDFLAGS)
- ps2png_LDADD = $(top_builddir)/src/libcairo.la \
- $(CAIRO_LDADD) \
- $(LIBSPECTRE_LIBS)
- endif
- EXTRA_PROGRAMS += $(TESTS)
- # Do a funny transition of CAIRO_TEST_TARGET through TARGETS such that
- # one can limit tested targets both through CAIRO_TEST_TARGET env var
- # and TARGETS make var on the command line. Same for the rest.
- TARGETS = $(CAIRO_TEST_TARGET)
- TARGETS_EXCLUDE = $(CAIRO_TEST_TARGET_EXCLUDE)
- FORMAT = $(CAIRO_TEST_TARGET_FORMAT)
- NUM_THREADS = $(CAIRO_TEST_NUM_THREADS)
- MODE = $(CAIRO_TEST_MODE)
- # Same about ENV vs CAIRO_TEST_ENV. ENV is used with "make run" only
- ENV = $(CAIRO_TEST_ENV)
- TESTS_ENVIRONMENT = CAIRO_TEST_MODE="$(MODE)" CAIRO_TEST_TARGET="$(TARGETS)" CAIRO_TEST_TARGET_FORMAT="$(FORMAT)" CAIRO_TEST_TARGET_EXCLUDE="$(TARGETS_EXCLUDE)" CAIRO_TEST_NUM_THREADS="$(NUM_THREADS)" $(ENV)
- EXTRA_VALGRIND_FLAGS = $(CAIRO_EXTRA_VALGRIND_FLAGS)
- VALGRIND_FLAGS = \
- --tool=memcheck --suppressions=$(srcdir)/.valgrind-suppressions \
- --track-origins=yes \
- --leak-check=yes --show-reachable=yes \
- $(EXTRA_VALGRIND_FLAGS)
- CLEANFILES += \
- valgrind-log \
- ref.hash \
- ref.list \
- png-test.png \
- png.out.png \
- create-for-stream.pdf \
- create-for-stream.ps \
- create-for-stream.svg \
- svg-surface-source.out.svg \
- pdf-surface-source.out.pdf \
- ps-surface-source.out.ps \
- pdf-features.pdf \
- pdf-mime-data.out* \
- ps-features.ps \
- svg-clip.svg \
- svg-surface.svg \
- multi-page.pdf \
- multi-page.ps \
- $(NULL)
- # This used to be a simple 'echo ${RM} *.ps *.pdf *.svg *.etc', but
- # most systems cannot handle all of our clean files together.
- # Then it became a fancy find using many GNU extensions, but then the ugly
- # reality of portability was raised and it became....
- clean-local:
- rm -rf output
- -${FIND} . -name '*.log' -print | ${XARGS} ${RM}
- -${FIND} . -name '*.[is]' -print | ${XARGS} ${RM}
- clean-caches:
- -${FIND} output -name '*.fail.*' -print | ${XARGS} ${RM}
- -${FIND} output -name '*.pass.*' -print | ${XARGS} ${RM}
- # The following definitions both should work.
- #FAILED_TESTS = `grep -l '\<FAIL\>' $(test_sources:.c=.log) 2>/dev/null | sed -e 's/[.]log$$//' | xargs echo`
- FAILED_TESTS = `grep -l '\<FAIL\>' $(test_sources:.c=.log) 2>/dev/null | tr '\n' ' ' | sed -e 's/[.]log */ /g; s/^ //; s/ $$//'`
- recheck = check CAIRO_TESTS="$(FAILED_TESTS)"
- # Re-checks all failed tests, i.e. tests with a log file that has a failure
- recheck:
- @echo Re-checking failed tests
- @$(MAKE) $(AM_MAKEFLAGS) $(recheck)
- # Checks tests.
- # Target doesn't fail if tests fail.
- test:
- @$(MAKE) $(AM_MAKEFLAGS) check
- # Re-checks tests.
- # Target doesn't fail if tests fail.
- retest:
- @CAIRO_TESTS="$(FAILED_TESTS)"; \
- $(MAKE) $(AM_MAKEFLAGS) check
- # Run tests under a tool specified by TOOL. For example, make run TOOL=gdb
- run:
- $(MAKE) $(AM_MAKEFLAGS) check TESTS_ENVIRONMENT='$(TESTS_ENVIRONMENT) $(top_builddir)/libtool --mode=execute env $(TOOL)'
- # Check tests under valgrind. Saves log to valgrind-log
- check-valgrind:
- $(MAKE) $(AM_MAKEFLAGS) check TESTS_ENVIRONMENT='$(TESTS_ENVIRONMENT) CAIRO_TEST_MODE="$(MODE),foreground CAIRO_TEST_TIMEOUT=0" $(top_builddir)/libtool --mode=execute valgrind $(VALGRIND_FLAGS)' 2>&1 | tee valgrind-log
- #%.log: %.c cairo-test-suite
- #-./cairo-test-suite $(<:.c=)
- NOLOG_TESTS_LOG = $(NOLOG_TESTS:=.log)
- $(NOLOG_TESTS_LOG):
- @echo dummy > $@
- # Identify identical reference images
- check-ref-dups: check-refs.sh $(top_builddir)/test/pdiff/perceptualdiff
- sh $(srcdir)/check-refs.sh $(top_builddir)/test/pdiff/perceptualdiff
- # Remove identical reference images (DANGEROUS)
- clean-ref-dups: check-refs.sh $(top_builddir)/test/pdiff/perceptualdiff
- sh $(srcdir)/check-refs.sh | cut -d' ' -f2 | while read f; do git rm "reference/$$f"; done
- results.tar:
- @tar cf $@ index.html testtable.js *.log output/*.log; \
- for i in output/*.fail.png ; do \
- testname=$${i#output/} ; \
- testname=$${testname%%.*} ; \
- echo tar uf $@ reference/$${testname}*.ref.png $${i%fail.png}out.png $${i%fail.png}diff.png ; \
- tar uf $@ reference/$${testname}*.ref.png $${i%fail.png}out.png $${i%fail.png}diff.png ; \
- done
- results.tar.gz: results.tar
- gzip -c $< > $@
- release-verify-sane-tests:
- .PHONY: check-valgrind test recheck retest check-ref-dups release-verify-sane-tests
- EXTRA_DIST += Makefile.win32
|