SUBDIRS=pdiff . # Here are all the tests that are run unconditionally TESTS = \ a1-image-sample$(EXEEXT) \ a1-mask$(EXEEXT) \ a1-traps-sample$(EXEEXT) \ a8-mask$(EXEEXT) \ big-line$(EXEEXT) \ big-trap$(EXEEXT) \ bilevel-image$(EXEEXT) \ caps-joins$(EXEEXT) \ caps-joins-alpha$(EXEEXT) \ caps-sub-paths$(EXEEXT) \ clip-all$(EXEEXT) \ clip-empty$(EXEEXT) \ clip-fill-rule$(EXEEXT) \ clip-fill-rule-pixel-aligned$(EXEEXT) \ clip-nesting$(EXEEXT) \ clip-operator$(EXEEXT) \ clip-push-group$(EXEEXT) \ clip-twice$(EXEEXT) \ clip-zero$(EXEEXT) \ clipped-group$(EXEEXT) \ close-path$(EXEEXT) \ composite-integer-translate-source$(EXEEXT) \ composite-integer-translate-over$(EXEEXT) \ composite-integer-translate-over-repeat$(EXEEXT) \ copy-path$(EXEEXT) \ create-for-stream$(EXEEXT) \ create-from-png$(EXEEXT) \ create-from-png-stream$(EXEEXT) \ dash-caps-joins$(EXEEXT) \ dash-curve$(EXEEXT) \ dash-no-dash$(EXEEXT) \ dash-offset-negative$(EXEEXT) \ dash-scale$(EXEEXT) \ dash-state$(EXEEXT) \ dash-zero-length$(EXEEXT) \ degenerate-arc$(EXEEXT) \ degenerate-path$(EXEEXT) \ degenerate-pen$(EXEEXT) \ device-offset$(EXEEXT) \ device-offset-positive$(EXEEXT) \ device-offset-scale$(EXEEXT) \ extend-pad$(EXEEXT) \ extend-reflect$(EXEEXT) \ extend-reflect-similar$(EXEEXT) \ extend-repeat$(EXEEXT) \ extend-repeat-similar$(EXEEXT) \ fill-and-stroke$(EXEEXT) \ fill-and-stroke-alpha$(EXEEXT) \ fill-and-stroke-alpha-add$(EXEEXT) \ fill-degenerate-sort-order$(EXEEXT) \ fill-missed-stop$(EXEEXT) \ fill-rule$(EXEEXT) \ filter-bilinear-extents$(EXEEXT) \ filter-nearest-offset$(EXEEXT) \ finer-grained-fallbacks$(EXEEXT) \ font-face-get-type$(EXEEXT) \ font-matrix-translation$(EXEEXT) \ font-options$(EXEEXT) \ glyph-cache-pressure$(EXEEXT) \ get-and-set$(EXEEXT) \ get-clip$(EXEEXT) \ get-group-target$(EXEEXT) \ get-path-extents$(EXEEXT) \ gradient-alpha$(EXEEXT) \ gradient-zero-stops$(EXEEXT) \ group-paint$(EXEEXT) \ image-surface-source$(EXEEXT) \ infinite-join$(EXEEXT) \ in-fill-empty-trapezoid$(EXEEXT) \ in-fill-trapezoid$(EXEEXT) \ invalid-matrix$(EXEEXT) \ large-clip$(EXEEXT) \ large-font$(EXEEXT) \ large-source$(EXEEXT) \ leaky-dash$(EXEEXT) \ leaky-dashed-rectangle$(EXEEXT) \ leaky-polygon$(EXEEXT) \ line-width$(EXEEXT) \ line-width-scale$(EXEEXT) \ line-width-zero$(EXEEXT) \ linear-gradient$(EXEEXT) \ linear-gradient-reflect$(EXEEXT) \ long-dashed-lines$(EXEEXT) \ long-lines$(EXEEXT) \ mask$(EXEEXT) \ mask-alpha$(EXEEXT) \ mask-ctm$(EXEEXT) \ mask-surface-ctm$(EXEEXT) \ meta-surface-pattern$(EXEEXT) \ miter-precision$(EXEEXT) \ move-to-show-surface$(EXEEXT) \ new-sub-path$(EXEEXT) \ nil-surface$(EXEEXT) \ operator-clear$(EXEEXT) \ operator-source$(EXEEXT) \ over-above-source$(EXEEXT) \ over-around-source$(EXEEXT) \ over-below-source$(EXEEXT) \ over-between-source$(EXEEXT) \ paint$(EXEEXT) \ paint-repeat$(EXEEXT) \ paint-source-alpha$(EXEEXT) \ paint-with-alpha$(EXEEXT) \ pattern-get-type$(EXEEXT) \ pattern-getters$(EXEEXT) \ pixman-rotate$(EXEEXT) \ png$(EXEEXT) \ push-group$(EXEEXT) \ radial-gradient$(EXEEXT) \ random-intersections$(EXEEXT) \ rectangle-rounding-error$(EXEEXT) \ rectilinear-miter-limit$(EXEEXT) \ rectilinear-stroke$(EXEEXT) \ reflected-stroke$(EXEEXT) \ rel-path$(EXEEXT) \ rgb24-ignore-alpha$(EXEEXT) \ rotate-image-surface-paint$(EXEEXT) \ scale-down-source-surface-paint$(EXEEXT) \ scale-source-surface-paint$(EXEEXT) \ stroke-ctm-caps$(EXEEXT) \ stroke-image$(EXEEXT) \ select-font-face$(EXEEXT) \ select-font-no-show-text$(EXEEXT) \ self-copy$(EXEEXT) \ self-intersecting$(EXEEXT) \ set-source$(EXEEXT) \ show-text-current-point$(EXEEXT) \ skew-extreme$(EXEEXT) \ smask$(EXEEXT) \ smask-fill$(EXEEXT) \ smask-image-mask$(EXEEXT) \ smask-mask$(EXEEXT) \ smask-paint$(EXEEXT) \ smask-stroke$(EXEEXT) \ smask-text$(EXEEXT) \ solid-pattern-cache-stress$(EXEEXT) \ source-clip$(EXEEXT) \ source-clip-scale$(EXEEXT) \ source-surface-scale-paint$(EXEEXT) \ surface-finish-twice$(EXEEXT) \ surface-pattern$(EXEEXT) \ surface-pattern-big-scale-down$(EXEEXT) \ surface-pattern-scale-down$(EXEEXT) \ surface-pattern-scale-up$(EXEEXT) \ text-antialias-gray$(EXEEXT) \ text-antialias-none$(EXEEXT) \ text-antialias-subpixel$(EXEEXT) \ text-cache-crash$(EXEEXT) \ text-lcd-filter-fir3$(EXEEXT) \ text-lcd-filter-fir5$(EXEEXT) \ text-lcd-filter-intra-pixel$(EXEEXT) \ text-lcd-filter-none$(EXEEXT) \ text-pattern$(EXEEXT) \ text-rotate$(EXEEXT) \ text-transform$(EXEEXT) \ text-zero-len$(EXEEXT) \ toy-font-face$(EXEEXT) \ transforms$(EXEEXT) \ translate-show-surface$(EXEEXT) \ trap-clip$(EXEEXT) \ truetype-tables$(EXEEXT) \ unantialiased-shapes$(EXEEXT) \ unbounded-operator$(EXEEXT) \ user-data$(EXEEXT) \ user-font$(EXEEXT) \ user-font-proxy$(EXEEXT) \ zero-alpha$(EXEEXT) # XXX: Here are some existing tests that are currently disabled for # one reason or another. They can still be built and run (manually) # but we don't currently run them as part of 'make check' to avoid # inflicting some particularly nasty problems on the user of the test # suite (described below). # # It would definitely be worthwhile to address these problems so that # these tests can get back into the test suite proper, (since the # problems do indicated bugs somewhere and we're less likely to get # those bugs fixed without the attention due to having these tests in # the suite). # # The reasons for disabling the tests are as follows: # # extend-reflect - Triggers an infinite (or near-infinite) bug in some # X servers in some circumstances. Details and cause unknown. # # show-glyphs-many - This stress test was exercising a particular bug # in the xlib surface code (exceeding the X11 protocol request # limit) when rendering several thousand glyphs at once. The # original xlib-surface bug is fixed now, but the test continues # to stress some other aspects of the test suite. For example, # when doing text as paths, the resuilting PostScript file is one # giant path that ghostscript has a particularly hard time # with. I'm disabling this test for now, since I don't care about # that performance problem in ghostscript. (But, there is a # similar performance problem when using cairo to rasterize the # equivalen giant path---from an SVG files say---so this might be # a useful kind of test to bring back again for performance (not # correctness) testing. # text-glyph-range - This test triggers the following assertion in cairo: # # lt-text-glyph-range: cairo-scaled-font-subsets.c:350: # _cairo_sub_font_collect: Assertion `collection->num_glyphs == # collection->max_glyph + 1' failed. # # And as a result causes a failure to be recorded by the test # suite, (in spite of the XFAIL status of the test). So maybe # that's just a bug in the test rig that should just consider # the abort an XFAIL like any other. DISABLED_TESTS = \ show-glyphs-many$(EXEEXT) \ text-glyph-range$(EXEEXT) # Then we have a collection of tests that are only run if certain # features are compiled into cairo if HAVE_PTHREAD TESTS += pthread-show-text$(EXEEXT) endif if CAIRO_HAS_FT_FONT TESTS += bitmap-font$(EXEEXT) TESTS += ft-font-create-for-ft-face$(EXEEXT) TESTS += ft-show-glyphs-positioning$(EXEEXT) TESTS += ft-show-glyphs-table$(EXEEXT) TESTS += ft-text-vertical-layout-type1$(EXEEXT) TESTS += ft-text-vertical-layout-type3$(EXEEXT) TESTS += ft-text-antialias-none$(EXEEXT) endif # Need to add win32-surface-source, quartz-surface-source if CAIRO_HAS_GLITZ_SURFACE TESTS += glitz-surface-source$(EXEEXT) endif if CAIRO_HAS_PDF_SURFACE TESTS += pdf-features$(EXEEXT) TESTS += pdf-surface-source$(EXEEXT) endif if CAIRO_HAS_PS_SURFACE TESTS += ps-features$(EXEEXT) TESTS += ps-surface-source$(EXEEXT) endif if CAIRO_HAS_SVG_SURFACE TESTS += svg-surface$(EXEEXT) TESTS += svg-clip$(EXEEXT) TESTS += svg-surface-source$(EXEEXT) endif if CAIRO_HAS_XLIB_SURFACE TESTS += xlib-expose-event$(EXEEXT) TESTS += xlib-surface$(EXEEXT) TESTS += xlib-surface-source$(EXEEXT) endif if CAIRO_HAS_XLIB_XRENDER_SURFACE TESTS += get-xrender-format$(EXEEXT) endif if CAIRO_HAS_MULTI_PAGE_SURFACES TESTS += multi-page$(EXEEXT) endif # Include fallback-resolution (once!) if we have any of the vector surfaces if CAIRO_HAS_SVG_SURFACE test = fallback-resolution$(EXEEXT) endif if CAIRO_HAS_PDF_SURFACE test = fallback-resolution$(EXEEXT) endif if CAIRO_HAS_PS_SURFACE test = fallback-resolution$(EXEEXT) endif TESTS += $(test) # All tests which have a reference image go here. REFERENCE_IMAGES = \ a1-image-sample-ref.png \ a1-mask-ref.png \ a1-traps-sample-ref.png \ a8-mask-ref.png \ big-line-ref.png \ big-line-rgb24-ref.png \ big-line-ps-ref.png \ big-line-ps-rgb24-ref.png \ big-line-quartz-ref.png \ big-line-quartz-rgb24-ref.png \ bilevel-image-ref.png \ bitmap-font-pdf-argb32-ref.png \ bitmap-font-ref.png \ bitmap-font-rgb24-ref.png \ caps-joins-alpha-quartz-ref.png \ caps-joins-alpha-ref.png \ caps-joins-alpha-svg-ref.png \ caps-joins-ref.png \ caps-joins-ps-ref.png \ caps-sub-paths-ref.png \ clip-all-ref.png \ clip-empty-ref.png \ clip-fill-rule-pixel-aligned-ref.png \ clip-fill-rule-pixel-aligned-rgb24-ref.png \ clip-fill-rule-ps-argb32-ref.png \ clip-fill-rule-ps-rgb24-ref.png \ clip-fill-rule-ref.png \ clip-fill-rule-rgb24-ref.png \ clip-nesting-ps-argb32-ref.png \ clip-nesting-ps-rgb24-ref.png \ clip-nesting-quartz-ref.png \ clip-nesting-quartz-rgb24-ref.png \ clip-nesting-ref.png \ clip-nesting-rgb24-ref.png \ clip-operator-ref.png \ clip-operator-pdf-argb32-ref.png \ clip-operator-pdf-rgb24-ref.png \ clip-operator-ps-argb32-ref.png \ clip-operator-ps-rgb24-ref.png \ clip-operator-rgb24-ref.png \ clip-operator-quartz-ref.png \ clip-operator-quartz-rgb24-ref.png \ clip-push-group-ps-argb32-ref.png \ clip-push-group-ps-rgb24-ref.png \ clip-push-group-quartz-ref.png \ clip-push-group-ref.png \ clip-twice-ps-argb32-ref.png \ clip-twice-ps-rgb24-ref.png \ clip-twice-quartz-ref.png \ clip-twice-quartz-rgb24-ref.png \ clip-twice-ref.png \ clip-twice-rgb24-ref.png \ clipped-group-ref.png \ clipped-group-ps-ref.png \ close-path-ref.png \ close-path-ps-ref.png \ composite-integer-translate-over-ref.png \ composite-integer-translate-over-repeat-ref.png \ composite-integer-translate-source-ref.png \ copy-path-ps-ref.png \ copy-path-ref.png \ create-from-png-ref.png \ create-from-png-alpha-ref.png \ create-from-png-gray-ref.png \ create-from-png-gray-alpha-ref.png \ create-from-png-indexed-ref.png \ create-from-png-indexed-alpha-ref.png \ create-from-png-stream-ref.png \ dash-caps-joins-ps-argb32-ref.png \ dash-caps-joins-ps-rgb24-ref.png \ dash-caps-joins-quartz-ref.png \ dash-caps-joins-ref.png \ dash-curve-ref.png \ dash-curve-ps-ref.png \ dash-curve-quartz-ref.png \ dash-no-dash-ref.png \ dash-offset-negative-ref.png \ dash-scale-ps-argb32-ref.png \ dash-scale-ps-rgb24-ref.png \ dash-scale-quartz-ref.png \ dash-scale-ref.png \ dash-state-ps-ref.png \ dash-state-ref.png \ dash-state-quartz-ref.png \ dash-zero-length-ps-ref.png \ dash-zero-length-ps-rgb24-ref.png \ dash-zero-length-ref.png \ dash-zero-length-rgb24-ref.png \ degenerate-arc-ref.png \ degenerate-arc-ps-ref.png \ degenerate-pen-ref.png \ degenerate-pen-ps-ref.png \ degenerate-pen-quartz-ref.png \ degenerate-path-ps-argb32-ref.png \ degenerate-path-ps-rgb24-ref.png \ degenerate-path-ref.png \ degenerate-path-rgb24-ref.png \ degenerate-path-quartz-ref.png \ degenerate-path-quartz-rgb24-ref.png \ device-offset-positive-ref.png \ device-offset-positive-rgb24-ref.png \ device-offset-ref.png \ device-offset-rgb24-ref.png \ device-offset-scale-ref.png \ extend-pad-ref.png \ extend-reflect-ref.png \ extend-reflect-similar-ref.png \ extend-reflect-similar-ps-ref.png \ extend-reflect-ps-ref.png \ extend-repeat-ref.png \ extend-repeat-similar-ref.png \ fill-and-stroke-alpha-add-quartz-ref.png \ fill-and-stroke-alpha-add-ref.png \ fill-and-stroke-alpha-quartz-ref.png \ fill-and-stroke-alpha-ref.png \ fill-and-stroke-ps-argb32-ref.png \ fill-and-stroke-ps-rgb24-ref.png \ fill-and-stroke-quartz-ref.png \ fill-and-stroke-quartz-rgb24-ref.png \ fill-and-stroke-ref.png \ fill-and-stroke-rgb24-ref.png \ fill-degenerate-sort-order-quartz-ref.png \ fill-degenerate-sort-order-quartz-rgb24-ref.png \ fill-degenerate-sort-order-ref.png \ fill-degenerate-sort-order-rgb24-ref.png \ fill-missed-stop-ps-argb32-ref.png \ fill-missed-stop-ps-rgb24-ref.png \ fill-missed-stop-ref.png \ fill-missed-stop-rgb24-ref.png \ fill-rule-ps-argb32-ref.png \ fill-rule-quartz-ref.png \ fill-rule-quartz-rgb24-ref.png \ fill-rule-ref.png \ fill-rule-rgb24-ref.png \ fill-rule-ps-rgb24-ref.png \ filter-bilinear-extents-ref.png \ filter-nearest-offset-ref.png \ finer-grained-fallbacks-ref.png \ finer-grained-fallbacks-rgb24-ref.png \ finer-grained-fallbacks-ps-argb32-ref.png \ finer-grained-fallbacks-ps-rgb24-ref.png \ font-matrix-translation-ps-argb32-ref.png \ font-matrix-translation-ps-rgb24-ref.png \ font-matrix-translation-ref.png \ font-matrix-translation-svg-ref.png \ font-matrix-translation-quartz-ref.png \ ft-text-antialias-none-ps-argb32-ref.png \ ft-text-antialias-none-ref.png \ ft-show-glyphs-positioning-ref.png \ ft-show-glyphs-positioning-pdf-ref.png \ ft-show-glyphs-positioning-ps-ref.png \ ft-show-glyphs-positioning-svg-ref.png \ ft-show-glyphs-table-ref.png \ ft-show-glyphs-table-ps-ref.png \ ft-text-vertical-layout-type1-pdf-ref.png \ ft-text-vertical-layout-type1-ps-ref.png \ ft-text-vertical-layout-type1-ref.png \ ft-text-vertical-layout-type1-svg-ref.png \ ft-text-vertical-layout-type3-pdf-ref.png \ ft-text-vertical-layout-type3-ps-ref.png \ ft-text-vertical-layout-type3-ref.png \ ft-text-vertical-layout-type3-svg-ref.png \ get-group-target-ref.png \ glitz-surface-source-ref.png \ glyph-cache-pressure-ref.png \ glyph-cache-pressure-ps-ref.png \ glyph-cache-pressure-quartz-ref.png \ gradient-alpha-pdf-argb32-ref.png \ gradient-alpha-pdf-rgb24-ref.png \ gradient-alpha-ps-argb32-ref.png \ gradient-alpha-ps-rgb24-ref.png \ gradient-alpha-ref.png \ gradient-alpha-rgb24-ref.png \ gradient-zero-stops-ref.png \ gradient-zero-stops-rgb24-ref.png \ group-paint-ref.png \ image-surface-source-ref.png \ infinite-join-ref.png \ infinite-join-ps-ref.png \ large-clip-ref.png \ large-font-ref.png \ large-source-ref.png \ leaky-dash-ps-argb32-ref.png \ leaky-dash-ps-rgb24-ref.png \ leaky-dash-quartz-ref.png \ leaky-dash-ref.png \ leaky-dashed-rectangle-ref.png \ leaky-dashed-rectangle-ps-ref.png \ leaky-polygon-ref.png \ leaky-polygon-ps-ref.png \ linear-gradient-reflect-ref.png \ linear-gradient-reflect-pdf-argb32-ref.png \ linear-gradient-reflect-pdf-rgb24-ref.png \ linear-gradient-reflect-ps-ref.png \ linear-gradient-reflect-quartz-ref.png \ linear-gradient-pdf-ref.png \ linear-gradient-ps-ref.png \ linear-gradient-quartz-ref.png \ linear-gradient-ref.png \ linear-gradient-svg-ref.png \ line-width-ref.png \ line-width-scale-ps-ref.png \ line-width-scale-quartz-ref.png \ line-width-scale-ref.png \ long-dashed-lines-ref.png \ long-dashed-lines-ps-ref.png \ long-dashed-lines-quartz-ref.png \ long-lines-ref.png \ mask-alpha-ref.png \ mask-alpha-svg-argb32-ref.png \ mask-alpha-rgb24-ref.png \ mask-alpha-quartz-argb32-ref.png \ mask-ctm-ref.png \ mask-ctm-rgb24-ref.png \ mask-ctm-svg-argb32-ref.png \ mask-ref.png \ mask-rgb24-ref.png \ mask-pdf-argb32-ref.png \ mask-pdf-rgb24-ref.png \ mask-quartz-ref.png \ mask-quartz-rgb24-ref.png \ mask-surface-ctm-ref.png \ mask-surface-ctm-rgb24-ref.png \ mask-surface-ctm-svg-argb32-ref.png \ mask-svg-rgb24-ref.png \ mask-svg-argb32-ref.png \ meta-surface-pattern-ref.png \ meta-surface-pattern-rgb24-ref.png \ meta-surface-pattern-pdf-ref.png \ meta-surface-pattern-pdf-rgb24-ref.png \ meta-surface-pattern-ps-argb32-ref.png \ meta-surface-pattern-ps-rgb24-ref.png \ meta-surface-pattern-quartz-ref.png \ meta-surface-pattern-quartz-rgb24-ref.png \ meta-surface-pattern-svg-argb32-ref.png \ meta-surface-pattern-svg-rgb24-ref.png \ miter-precision-ref.png \ move-to-show-surface-ref.png \ new-sub-path-ps-argb32-ref.png \ new-sub-path-ps-rgb24-ref.png \ new-sub-path-quartz-ref.png \ new-sub-path-quartz-rgb24-ref.png \ new-sub-path-ref.png \ new-sub-path-rgb24-ref.png \ nil-surface-ref.png \ nil-surface-rgb24-ref.png \ operator-clear-quartz-ref.png \ operator-clear-quartz-rgb24-ref.png \ operator-clear-ref.png \ operator-clear-rgb24-ref.png \ operator-clear-pdf-argb32-ref.png \ operator-clear-pdf-rgb24-ref.png \ operator-clear-ps-argb32-ref.png \ operator-source-pdf-argb32-ref.png \ operator-source-pdf-rgb24-ref.png \ operator-source-ps-argb32-ref.png \ operator-source-ps-rgb24-ref.png \ operator-source-ref.png \ operator-source-rgb24-ref.png \ operator-source-quartz-ref.png \ operator-source-quartz-rgb24-ref.png \ over-above-source-ps-argb32-ref.png \ over-above-source-quartz-ref.png \ over-above-source-quartz-rgb24-ref.png \ over-above-source-ref.png \ over-above-source-rgb24-ref.png \ over-around-source-ps-argb32-ref.png \ over-around-source-quartz-ref.png \ over-around-source-quartz-rgb24-ref.png \ over-around-source-ref.png \ over-around-source-rgb24-ref.png \ over-below-source-ps-argb32-ref.png \ over-below-source-ref.png \ over-below-source-rgb24-ref.png \ over-between-source-ps-argb32-ref.png \ over-between-source-quartz-ref.png \ over-between-source-quartz-rgb24-ref.png \ over-between-source-ref.png \ over-between-source-rgb24-ref.png \ paint-ref.png \ paint-repeat-ref.png \ paint-source-alpha-pdf-argb32-ref.png \ paint-source-alpha-ref.png \ paint-source-alpha-svg-ref.png \ paint-with-alpha-ref.png \ paint-with-alpha-svg-ref.png \ paint-source-alpha-pdf-ref.png \ paint-with-alpha-pdf-ref.png \ pattern-getters-ref.png \ pdf-surface-source-ref.png \ pixman-rotate-ref.png \ pixman-rotate-rgb24-ref.png \ ps-surface-source-ref.png \ push-group-pdf-ref.png \ push-group-pdf-rgb24-ref.png \ push-group-ref.png \ push-group-rgb24-ref.png \ push-group-svg-argb32-ref.png \ radial-gradient-ref.png \ radial-gradient-pdf-ref.png \ radial-gradient-quartz-ref.png \ radial-gradient-svg-ref.png \ random-intersections-ref.png \ random-intersections-ps-ref.png \ random-intersections-quartz-ref.png \ rgb24-ignore-alpha-ref.png \ rectangle-rounding-error-ref.png \ rectilinear-miter-limit-ref.png \ rectilinear-miter-limit-ps-ref.png \ rectilinear-stroke-ref.png \ reflected-stroke-ref.png \ reflected-stroke-ps-ref.png \ reflected-stroke-quartz-ref.png \ rel-path-quartz-ref.png \ rel-path-quartz-rgb24-ref.png \ rel-path-ps-rgb24-ref.png \ rel-path-ref.png \ rel-path-rgb24-ref.png \ rotate-image-surface-paint-pdf-rgb24-ref.png \ rotate-image-surface-paint-ps-ref.png \ rotate-image-surface-paint-pdf-argb32-ref.png \ rotate-image-surface-paint-quartz-ref.png \ rotate-image-surface-paint-ref.png \ rotate-image-surface-paint-svg-ref.png \ scale-down-source-surface-paint-ref.png \ scale-source-surface-paint-pdf-argb32-ref.png \ scale-source-surface-paint-ref.png \ scale-source-surface-paint-rgb24-ref.png \ scale-source-surface-paint-svg-argb32-ref.png \ scale-source-surface-paint-svg-rgb24-ref.png \ scale-source-surface-paint-pdf-rgb24-ref.png \ stroke-ctm-caps-ref.png \ stroke-ctm-caps-quartz-ref.png \ select-font-face-ref.png \ select-font-face-ps-ref.png \ select-font-face-quartz-ref.png \ self-copy-ref.png \ self-copy-ps-ref.png \ self-intersecting-ref.png \ self-intersecting-rgb24-ref.png \ set-source-ref.png \ set-source-rgb24-ref.png \ set-source-svg-argb32-ref.png \ show-glyphs-many-ref.png \ show-text-current-point-ref.png \ show-text-current-point-ps-ref.png \ show-text-current-point-quartz-ref.png \ skew-extreme-ref.png \ skew-extreme-ps-ref.png \ smask-ref.png \ smask-pdf-ref.png \ smask-ps-ref.png \ smask-svg-ref.png \ smask-fill-ref.png \ smask-fill-pdf-ref.png \ smask-fill-svg-ref.png \ smask-image-mask-ref.png \ smask-image-mask-pdf-ref.png \ smask-mask-ref.png \ smask-mask-pdf-ref.png \ smask-mask-svg-ref.png \ smask-paint-ref.png \ smask-paint-pdf-ref.png \ smask-paint-svg-ref.png \ smask-stroke-ref.png \ smask-stroke-pdf-ref.png \ smask-text-ref.png \ smask-text-pdf-ref.png \ smask-text-ps-ref.png \ smask-text-svg-ref.png \ stroke-image-ref.png \ stroke-image-pdf-ref.png \ stroke-image-ps-ref.png \ stroke-image-quartz-ref.png \ solid-pattern-cache-stress-ref.png \ source-clip-ref.png \ source-clip-scale-quartz-ref.png \ source-clip-scale-ps-argb32-ref.png \ source-clip-scale-ps-rgb24-ref.png \ source-clip-scale-ref.png \ source-clip-scale-svg-ref.png \ source-clip-scale-pdf-ref.png \ source-surface-scale-paint-ref.png \ source-surface-scale-paint-rgb24-ref.png \ stroke-ctm-caps-ps-ref.png \ surface-pattern-big-scale-down-ref.png \ surface-pattern-pdf-argb32-ref.png \ surface-pattern-ps-argb32-ref.png \ surface-pattern-ref.png \ surface-pattern-scale-down-pdf-argb32-ref.png \ surface-pattern-scale-down-ps-argb32-ref.png \ surface-pattern-scale-down-ref.png \ surface-pattern-scale-down-quartz-ref.png \ surface-pattern-scale-up-pdf-argb32-ref.png \ surface-pattern-scale-up-ps-argb32-ref.png \ surface-pattern-scale-up-ref.png \ surface-pattern-svg-ref.png \ svg-surface-source-ref.png \ text-antialias-gray-ref.png \ text-antialias-gray-quartz-ref.png \ text-antialias-none-ref.png \ text-antialias-none-quartz-ref.png \ text-antialias-subpixel-ref.png \ text-antialias-subpixel-quartz-ref.png \ text-glyph-range-ref.png \ text-glyph-range-rgb24-ref.png \ text-lcd-filter-fir3-ref.png \ text-lcd-filter-fir5-ref.png \ text-lcd-filter-intra-pixel-ref.png \ text-lcd-filter-none-ref.png \ text-pattern-ps-argb32-ref.png \ text-pattern-ps-rgb24-ref.png \ text-pattern-ref.png \ text-pattern-rgb24-ref.png \ text-pattern-svg-argb32-ref.png \ text-pattern-svg-rgb24-ref.png \ text-pattern-pdf-argb32-ref.png \ text-pattern-pdf-rgb24-ref.png \ text-pattern-quartz-ref.png \ text-pattern-quartz-rgb24-ref.png \ text-rotate-ref.png \ text-rotate-pdf-ref.png \ text-rotate-ps-ref.png \ text-rotate-svg-ref.png \ text-rotate-quartz-ref.png \ text-transform-ref.png \ text-transform-pdf-ref.png \ text-transform-ps-ref.png \ transforms-ref.png \ transforms-ps-ref.png \ translate-show-surface-ref.png \ trap-clip-quartz-ref.png \ trap-clip-quartz-rgb24-ref.png \ trap-clip-ps-argb32-ref.png \ trap-clip-ps-rgb24-ref.png \ trap-clip-ref.png \ trap-clip-rgb24-ref.png \ trap-clip-pdf-argb32-ref.png \ trap-clip-pdf-rgb24-ref.png \ unantialiased-shapes-ref.png \ unantialiased-shapes-quartz-ref.png \ unbounded-operator-ref.png \ unbounded-operator-rgb24-ref.png \ user-font-ref.png \ user-font-ps-ref.png \ user-font-svg-ref.png \ user-font-proxy-ref.png \ user-font-proxy-pdf-ref.png \ user-font-proxy-ps-ref.png \ user-font-proxy-svg-ref.png \ unbounded-operator-quartz-ref.png \ unbounded-operator-quartz-rgb24-ref.png \ xlib-expose-event-ref.png \ xlib-surface-source-ref.png \ zero-alpha-ref.png EXTRA_DIST = \ 6x13.pcf \ make-html.pl \ romedalen.png \ surface-source.c \ $(REFERENCE_IMAGES) # Any test for which the code committed to CVS is expected to fail # should be listed here. # # This way, we can avoid being bothered by reports of bugs we are # aware of, but users can still report when tests start behaving in # unexpected ways on their system. # # Of course, before any "release" of cairo we should eliminate # everything from this list by fixing the bugs. (We don't necessarily # have to be that strict for "snapshots" though.) XFAIL_TESTS = \ big-line$(EXEEXT) \ big-trap$(EXEEXT) \ extend-pad$(EXEEXT) \ filter-nearest-offset$(EXEEXT) \ filter-bilinear-extents$(EXEEXT) \ large-source$(EXEEXT) \ long-lines$(EXEEXT) \ self-intersecting$(EXEEXT) \ surface-pattern$(EXEEXT) \ surface-pattern-big-scale-down$(EXEEXT) \ surface-pattern-scale-down$(EXEEXT) \ surface-pattern-scale-up$(EXEEXT) # Any test that doesn't generate a log file goes here NOLOG_TESTS = \ fallback-resolution \ font-options \ multi-page \ pdf-features \ png \ ps-features \ svg-clip \ svg-surface \ toy-font-face \ user-data # A hook that summarises the failures # We need to both force make to keep going after failures and to disable the # jobserver (parallel builds). check: AM_MAKEFLAGS+=-k -j1 check-local: @FAILED_TESTS=""; \ for t in $(TESTS:$(EXEEXT)=.log); do \ if grep -e '\' $$t >/dev/null 2>&1; then \ FAILED_TESTS="$$FAILED_TESTS $${t%.log}"; \ fi; \ done; \ if test -n "$$FAILED_TESTS"; then \ echo "Failed tests:"; \ surfaces=""; \ for t in $$FAILED_TESTS; do \ echo -n " $$t: "; \ grep -e '\' $$t.log | sed -e 's/.*TARGET: \([^ ]*\).*/\1/' | sort | uniq | tr '\n' ' '; \ echo; \ for s in `grep -e '\' $$t.log | sed -e 's/.*TARGET: \([^ ]*\).*/\1/' | sort | uniq`; do \ ss=`echo $$s | tr '-' '_'`; \ tt=`echo $$t | 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 check_PROGRAMS = EXTRA_PROGRAMS = # We're using _GNU_SOURCE to get the prototype for asprintf. This may # not be the most portable approach, but it is pragmatic and I'm # willing to do something cleaner as soon as it causes someone a # problem. INCLUDES = \ -D_GNU_SOURCE \ -I$(srcdir) \ -I$(srcdir)/pdiff \ -I$(top_srcdir)/boilerplate \ -I$(top_srcdir)/pixman/src \ -I$(top_srcdir)/src \ -I$(top_builddir)/src \ $(CAIRO_CFLAGS) EXTRA_LTLIBRARIES = libcairotest.la libcairotest_la_SOURCES =\ buffer-diff.c \ buffer-diff.h \ cairo-test.c \ cairo-test.h libcairotest_la_LIBADD =\ $(top_builddir)/test/pdiff/libpdiff.la \ $(top_builddir)/boilerplate/libcairoboilerplate.la \ $(top_builddir)/src/libcairo.la \ $(CAIRO_LDADD) LDADD = $(CAIRO_LDADD) libcairotest.la $(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 if HAVE_PTHREAD LDADD += -lpthread endif check_PROGRAMS += imagediff png-flatten if BUILD_ANY2PPM check_PROGRAMS += any2ppm any2ppm_CFLAGS = $(POPPLER_CFLAGS) $(LIBRSVG_CFLAGS) # add LDADD, so poppler/librsvg uses "our" cairo any2ppm_LDADD = $(LDADD) $(POPPLER_LIBS) $(LIBRSVG_LIBS) endif if CAIRO_CAN_TEST_PDF_SURFACE check_PROGRAMS += pdf2png pdf2png_CFLAGS = $(POPPLER_CFLAGS) # add LDADD, so poppler uses "our" cairo pdf2png_LDADD = $(LDADD) $(POPPLER_LIBS) endif if CAIRO_CAN_TEST_SVG_SURFACE check_PROGRAMS += svg2png svg2png_CFLAGS = $(LIBRSVG_CFLAGS) # add LDADD, so librsvg uses "our" cairo svg2png_LDADD = $(LDADD) $(LIBRSVG_LIBS) endif EXTRA_PROGRAMS += $(TESTS) $(DISABLED_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) NUM_THREADS = $(CAIRO_TEST_NUM_THREADS) # Same about ENV vs CAIRO_TEST_ENV. ENV is used with "make run" only ENV = $(CAIRO_TEST_ENV) TESTS_ENVIRONMENT = CAIRO_XFAIL_TESTS="$(XFAIL_TESTS:$(EXEEXT)=)" CAIRO_TEST_TARGET="$(TARGETS)" 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 \ --leak-check=yes --show-reachable=yes $(EXTRA_VALGRIND_FLAGS) CLEANFILES = \ valgrind-log \ index.html \ ref.hash \ png-test.png \ $(EXTRA_LTLIBRARIES) \ $(EXTRA_PROGRAMS) # 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: clean-caches -${FIND} . -name '*-out.*' -print | ${XARGS} ${RM} -${FIND} . -name '*-diff.png' -print | ${XARGS} ${RM} -${FIND} . -name '*.log' -print | ${XARGS} ${RM} -${FIND} . -name '*.[is]' -print | ${XARGS} ${RM} clean-caches: -${FIND} . -name '*-pass.*' -print | ${XARGS} ${RM} -${FIND} . -name '*-fail.*' -print | ${XARGS} ${RM} # The following definitions both should work. #FAILED_TESTS = `grep -l '\' $(TESTS:$(EXEEXT)=.log) 2>/dev/null | sed -e 's/[.]log$$//' | xargs echo` FAILED_TESTS = `grep -l '\' $(TESTS:$(EXEEXT)=.log) 2>/dev/null | tr '\n' ' ' | sed -e 's/[.]log */ /g; s/^ //; s/ $$//'` recheck = check 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 and creates index.html. # Target doesn't fail if tests fail. test: @$(MAKE) $(AM_MAKEFLAGS) check; \ $(MAKE) $(AM_MAKEFLAGS) html # Re-checks tests and creates index.html. # Target doesn't fail if tests fail. retest: @TESTS="$(FAILED_TESTS)"; \ $(MAKE) $(AM_MAKEFLAGS) TESTS="$$TESTS" check; \ $(MAKE) $(AM_MAKEFLAGS) TESTS="$$TESTS" html # Make index.html with no dependency tracking. html: @echo Creating index.html @perl $(srcdir)/make-html.pl $(TESTS:$(EXEEXT)=.log) > index.html # Make index.html with no dependency tracking, containing only the failed tests. rehtml: @$(MAKE) $(AM_MAKEFLAGS) TESTS="$(FAILED_TESTS)" html # 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) $(top_builddir)/libtool --mode=execute valgrind $(VALGRIND_FLAGS)' 2>&1 | tee valgrind-log %.log: % $(check_PROGRAMS) -./$< NOLOG_TESTS_LOG = $(NOLOG_TESTS:=.log) $(NOLOG_TESTS_LOG): @echo dummy > $@ index.html: $(srcdir)/make-html.pl $(TESTS:$(EXEEXT)=.log) @echo Creating index.html @perl $^ > $@ # Identify identical reference images check-ref-dups: @LANG=C; \ ( cd "$(scrdir)" && sha1sum *-ref.png | sort ) > ref.hash; \ join ref.hash ref.hash | grep -v -E '( .*-ref.png).*\1' | cut -d' ' -f 1-2 | sort -u # Not exactly the best script in the world... check-ref-missing: @cd "$(srcdir)"; \ REFS=`git ls-files "*-ref.png"`; \ test x = "x$$REFS" && REFS=`ls *-ref.png`; \ ret=true; \ missing=""; \ for i in $$REFS; do \ echo "" $(REFERENCE_IMAGES) "" | grep -sq " $$i " || missing="$$missing $$i" ; \ done ; \ if test -n "$$missing"; then \ echo "*** Error: Sanity check failed"; \ echo "Some reference files are not included in the distribution."; \ echo "You probably need to add these to Makefile.am's REFERENCE_IMAGES."; \ echo "Missing: $$missing"; \ ret=false; \ fi >&2; \ missing=""; \ for i in $(REFERENCE_IMAGES); do \ echo "" $$REFS "" | grep -sq " $$i " || missing="$$missing $$i" ; \ done ; \ if test -n "$$missing"; then \ echo "*** Error: Sanity check failed"; \ echo "Some reference files included in the distribution do not exist"; \ echo "or are not in git. You probably want to add these to git first."; \ echo "Missing: $$missing"; \ ret=false; \ fi >&2; \ $$ret release-verify-sane-tests: check-ref-missing .PHONY: check-valgrind test recheck retest html rehtml check-ref-dups check-ref-missing release-verify-sane-tests EXTRA_DIST += Makefile.win32