mirror of
https://gitlab.freedesktop.org/cairo/cairo.git
synced 2025-12-29 12:40:14 +01:00
409 lines
12 KiB
Makefile
409 lines
12 KiB
Makefile
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
|
|
test_sources += $(ft_font_test_sources)
|
|
if CAIRO_HAS_FC_FONT
|
|
test_sources += $(fc_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 \
|
|
font-variations \
|
|
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)
|
|
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)" $(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* \
|
|
pdf-tagged-text.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
|